blob: ac3f595d7d47c74eb594880e04c46f1d96689091 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}