| /******************************************************************************* |
| * Copyright (c) 2008, 2011 VMware Inc. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * VMware Inc. - initial contribution |
| *******************************************************************************/ |
| package org.eclipse.virgo.management.console; |
| |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.IOException; |
| import java.util.Map; |
| |
| import javax.script.ScriptException; |
| |
| import org.eclipse.virgo.management.console.stubs.objects.Dollar; |
| import org.eclipse.virgo.management.console.stubs.types.Element; |
| import org.junit.Test; |
| |
| import org.mozilla.javascript.Context; |
| import org.mozilla.javascript.Function; |
| import org.mozilla.javascript.Scriptable; |
| |
| /** |
| * All the methods in this test class should be run in the defined order. In particular, testPageInit must be run first |
| * to perform common setup. |
| */ |
| public class DumpsJSTests extends AbstractJSTests { |
| |
| private static final String DUMPDIR_URL = "hostPrefix/jolokia/read/org.eclipse.virgo.kernel:type=Medic,name=DumpInspector/ConfiguredDumpDirectory"; |
| |
| private static final String DUMPS_URL = "hostPrefix/jolokia/read/org.eclipse.virgo.kernel:type=Medic,name=DumpInspector/Dumps"; |
| |
| @Test |
| public void testPageinit() throws ScriptException, IOException, NoSuchMethodException { |
| |
| // Common setup that will be used by other test methods. |
| readFile("src/main/webapp/js/dumps.js"); |
| |
| addCommonObjects(); |
| |
| invokePageInit(); |
| |
| Map<String, Function> successByUrl = Dollar.getAndClearAjaxSuccessByUrl(); |
| |
| assertTrue(successByUrl.containsKey(DUMPDIR_URL)); |
| successByUrl.get(DUMPS_URL).call(context, scope, scope, new Object[] { getTestDumpDirectory() }); |
| |
| assertTrue(successByUrl.containsKey(DUMPS_URL)); |
| successByUrl.get(DUMPS_URL).call(context, scope, scope, new Object[] { getTestDumpList() }); |
| |
| assertTrue("Page ready has not been called", commonUtil.isPageReady()); |
| } |
| |
| private Scriptable getTestDumpDirectory() throws IOException { |
| |
| readString("var Data = function() {" + // |
| " this.value = ['servicability/dump'];" + // |
| " this.value.Properties = {};" + // |
| "};"); |
| |
| Function testData = (Function) scope.get("Data", scope); |
| return testData.construct(context, scope, Context.emptyArgs); |
| } |
| |
| private Scriptable getTestDumpList() throws IOException { |
| |
| readString("var Data = function() {" + // |
| " this.value = ['2012-05-02-13-30-643'];" + // |
| " this.value.Properties = {};" + // |
| "};"); |
| |
| Function testData = (Function) scope.get("Data", scope); |
| return testData.construct(context, scope, Context.emptyArgs); |
| } |
| |
| @Test |
| public void testDisplayDumpEntries() throws ScriptException, IOException, NoSuchMethodException { |
| |
| Function dumpViewerConstructor = (Function) scope.get("DumpViewer", scope); |
| Scriptable dumpViewer = dumpViewerConstructor.construct(context, scope, new Object[]{}); |
| |
| readString( "var DumpEntryList = function() {" + |
| " this.children = function() {return [];};" + |
| "};"); |
| Function dumpEntryList = (Function) scope.get("DumpEntryList", scope); |
| Scriptable listElement = dumpEntryList.construct(context, scope, Context.emptyArgs); |
| Dollar.setDollarLookupResultForIds(listElement); |
| |
| readString("var ClickEvent = function() {" + // |
| " this.data = new Element('<div />');" + // |
| "};"); |
| |
| Function eventConstructor = (Function) scope.get("ClickEvent", scope); |
| Object[] args = new Object[] {}; |
| Scriptable event = eventConstructor.construct(Context.getCurrentContext(), scope, args); |
| Function displayDumpEntriesFunction = (Function) dumpViewer.get("displayDumpEntries", scope); |
| displayDumpEntriesFunction.call(context, scope, dumpViewer, new Object[] {event}); |
| |
| Function displaySelectedDumpEntriesFunction = (Function) dumpViewer.get("displaySelectedDump", scope); |
| displaySelectedDumpEntriesFunction.call(context, scope, dumpViewer, new Object[] {}); |
| } |
| |
| @Test |
| public void testDisplaySelectedDumpResponse() throws ScriptException, IOException, NoSuchMethodException { |
| |
| Function dumpViewerConstructor = (Function) scope.get("DumpViewer", scope); |
| Scriptable dumpViewer = dumpViewerConstructor.construct(context, scope, new Object[]{}); |
| |
| Object[][] json = new Object[][]{{"a","b"},{"c","d"}}; |
| |
| readString("var DumpListItem = function() {" + // |
| " this.attr = function(id){return 'anId'};" + // |
| "};"); |
| |
| Function dumpListItemConstructor = (Function) scope.get("DumpListItem", scope); |
| Object[] args = new Object[] {}; |
| Scriptable dumpListItem = dumpListItemConstructor.construct(Context.getCurrentContext(), scope, args); |
| |
| Function displaySelectedDumpEntriesResponseFunction = (Function) dumpViewer.get("displaySelectedDumpResponse", scope); |
| displaySelectedDumpEntriesResponseFunction.call(context, scope, dumpViewer, new Object[] {Context.javaToJS(json, scope), dumpListItem}); |
| |
| readString( "var DumpEntryList = function() {" + |
| " this.children = function() {return [];};" + |
| " this.append = function(dumpEntryListItem) {return this;};" + |
| "};"); |
| Function dumpEntryList = (Function) scope.get("DumpEntryList", scope); |
| Scriptable listElement = dumpEntryList.construct(context, scope, Context.emptyArgs); |
| Dollar.setDollarLookupResultForIds(listElement, 2); |
| |
| Element.resetClicked(); |
| Function eachOperation = Dollar.getEachOperation(); |
| eachOperation.call(context, scope, eachOperation, new Object[]{Context.javaToJS(1, scope), new Object[]{"bar.txt","foo"}}); |
| assertEquals(1, Element.isClicked()); |
| eachOperation.call(context, scope, eachOperation, new Object[]{Context.javaToJS(1, scope), new Object[]{"summary.txt","foo"}}); |
| assertEquals(3, Element.isClicked()); |
| } |
| |
| @Test |
| public void testCreateDump() throws ScriptException, IOException, NoSuchMethodException { |
| Function dumpViewerConstructor = (Function) scope.get("DumpViewer", scope); |
| Scriptable dumpViewer = dumpViewerConstructor.construct(context, scope, new Object[]{}); |
| Function createDumpFunction = (Function) dumpViewer.get("createDump", scope); |
| createDumpFunction.call(context, scope, dumpViewer, new Object[] {}); |
| |
| String ajaxUrl = Dollar.getAjaxUrl(); |
| assertEquals("hostPrefix/jolokia/exec/org.eclipse.virgo.kernel:type=Medic,name=DumpInspector/createDump", ajaxUrl); |
| } |
| |
| @Test |
| public void testDeleteDump() throws ScriptException, IOException, NoSuchMethodException { |
| Function dumpViewerConstructor = (Function) scope.get("DumpViewer", scope); |
| Scriptable dumpViewer = dumpViewerConstructor.construct(context, scope, new Object[]{}); |
| Function deleteDumpFunction = (Function) dumpViewer.get("deleteDump", scope); |
| |
| readString("var Event = function() {" + // |
| " this.data = {attr : function(id){return 'anId'}};" + // |
| "};"); |
| |
| Function eventConstructor = (Function) scope.get("Event", scope); |
| Object[] args = new Object[] {}; |
| Scriptable event = eventConstructor.construct(Context.getCurrentContext(), scope, args); |
| |
| deleteDumpFunction.call(context, scope, dumpViewer, new Object[] {event}); |
| |
| String ajaxUrl = Dollar.getAjaxUrl(); |
| assertEquals("hostPrefix/jolokia/exec/org.eclipse.virgo.kernel:type=Medic,name=DumpInspector/deleteDump/anId", ajaxUrl); |
| } |
| } |