diff options
author | Robert Gemmell <robbie@apache.org> | 2015-06-25 10:22:51 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2015-06-25 10:22:51 +0000 |
commit | 32ae758bc2e8fd962b66a4ab6341b14009f1907e (patch) | |
tree | 2f4d8174813284a6ea58bb6b7f6520aa92287476 /qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java | |
parent | 116d91ad7825a98af36a869fc751206fbce0c59f (diff) | |
parent | f7e896076143de4572b4f1f67ef0765125f2498d (diff) | |
download | qpid-python-32ae758bc2e8fd962b66a4ab6341b14009f1907e.tar.gz |
NO-JIRA: create branch for qpid-cpp 0.34 RC process
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/qpid-cpp-0.34-rc@1687469 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java')
-rw-r--r-- | qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java b/qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java new file mode 100644 index 0000000000..edae41bcf4 --- /dev/null +++ b/qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java @@ -0,0 +1,308 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.qmf2.test; + +import javax.jms.Connection; + +// Misc Imports +import java.io.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +// QMF2 Imports +import org.apache.qpid.qmf2.common.ObjectId; +import org.apache.qpid.qmf2.common.QmfData; +import org.apache.qpid.qmf2.common.QmfEvent; +import org.apache.qpid.qmf2.common.QmfEventListener; +import org.apache.qpid.qmf2.common.QmfException; +import org.apache.qpid.qmf2.common.WorkItem; +import org.apache.qpid.qmf2.console.Agent; +import org.apache.qpid.qmf2.console.AgentAddedWorkItem; +import org.apache.qpid.qmf2.console.AgentHeartbeatWorkItem; +import org.apache.qpid.qmf2.console.Console; +import org.apache.qpid.qmf2.console.EventReceivedWorkItem; +import org.apache.qpid.qmf2.console.MethodResult; +import org.apache.qpid.qmf2.console.MethodResponseWorkItem; +import org.apache.qpid.qmf2.console.ObjectUpdateWorkItem; +import org.apache.qpid.qmf2.console.QmfConsoleData; +import org.apache.qpid.qmf2.util.ConnectionHelper; +import static org.apache.qpid.qmf2.common.WorkItem.WorkItemType.*; + +/** + * This class is the Console part of AgentTest which together provide a test of a number of core Console and + * Agent behaviours such as Schema creation, registration and lookup, Object lookup, method invocation on Objects + * Object refreshing (updating state of local proxy objects from the real Agent). + * + * N.B. AgentTest needs to be running for this test to behave as expected. + * + * @author Fraser Adams + */ +public final class AgentTestConsole implements QmfEventListener +{ + private Console _console; + private Agent _gizmo; + + public AgentTestConsole(String url) + { + try + { + System.out.println("*** Starting AgentTestConsole used to test basic Console and Agent behaviour ***"); + + Connection connection = ConnectionHelper.createConnection(url, "{reconnect: true}"); + _console = new Console(this); + _console.addConnection(connection); + + // Wait until the gizmo Agent has been discovered + synchronized(this) + { + while (_gizmo == null) + { + long startTime = System.currentTimeMillis(); + try + { + wait(10*1000); + } + catch (InterruptedException ie) + { + continue; + } + // Measure elapsed time to test against spurious wakeups and ensure we really have timed out + long elapsedTime = (System.currentTimeMillis() - startTime)/1000; + if (_gizmo == null && elapsedTime >= 10) + { + System.out.println("gizmo Agent not found, you probably need to run AgentTest"); + System.exit(1); + } + } + } + + System.out.println("Testing lookup of control objects by name"); + List<QmfConsoleData> controls = _console.getObjects("com.profitron.gizmo", "control"); + if (controls.size() > 0) + { + System.out.println("control object found"); + QmfConsoleData control = controls.get(0); + //control.listValues(); + + ObjectId oid = control.getObjectId(); + //System.out.println("Agent Name = " + oid.getAgentName()); + //System.out.println("Agent Epoch = " + oid.getAgentEpoch()); + //System.out.println("Object Name = " + oid.getObjectName()); + + System.out.println("Testing lookup of object by ObjectId"); + controls = _console.getObjects(oid); + + if (controls.size() == 0) + { + System.out.println("No objects returned from ObjectId lookup: AgentTestConsole failed"); + System.exit(1); + } + + System.out.println("MethodCount = " + control.getLongValue("methodCount")); + QmfData inArgs; + QmfData outArgs; + MethodResult results; + +/* + System.out.println("Testing invokeMethod(toString, args) - method called directly on Agent"); + results = _gizmo.invokeMethod("toString", null); + System.out.println("gizmo.toString() = " + results.getArguments().getStringValue("string")); +*/ + + // ********** Invoke create_child nethod ********** + System.out.println("Testing invokeMethod(create_child, args)"); + inArgs = new QmfData(); + inArgs.setValue("name", "child 1"); + + results = control.invokeMethod("create_child", inArgs); + if (!results.succeeded()) + { + System.out.println("create_child returned an exception object"); + System.exit(1); + } + + if (!results.hasValue("childAddr")) + { + System.out.println("create_child returned an unexpected value"); + System.exit(1); + } + + ObjectId childId = results.getRefValue("childAddr"); + System.out.println("childId = " + childId); + System.out.println("childAddr subtype = " + results.getSubtype("childAddr")); + QmfConsoleData child1 = _console.getObjects(childId).get(0); + System.out.println("child1 name = " + child1.getStringValue("name")); + + + // Update and display state of control object + control.refresh(); + System.out.println("MethodCount = " + control.getLongValue("methodCount")); + + + // ********** Invoke event nethod ********** + System.out.println("Testing invokeMethod(event, args) "); + inArgs = new QmfData(); + inArgs.setValue("text", "Attention Will Robinson!! Aliens have just invaded"); + inArgs.setValue("severity", 0); + control.invokeMethod("event", inArgs); + + + // Update and display state of control object + control.refresh(); + System.out.println("MethodCount = " + control.getLongValue("methodCount")); + + + // ********** Invoke fail nethod ********** + System.out.println("Testing invokeMethod(fail, args) "); + QmfData details = new QmfData(); + details.setValue("detail1", "something bad"); + details.setValue("detail2", "something even badder"); + inArgs = new QmfData(); + inArgs.setValue("details", details.mapEncode()); + results = control.invokeMethod("fail", inArgs); + System.out.println("whatHappened: " + results.getStringValue("whatHappened")); + System.out.println("howBad: " + results.getLongValue("howBad")); + + // Update and display state of control object + control.refresh(); + System.out.println("MethodCount = " + control.getLongValue("methodCount")); + + + // ********** Invoke echo nethod asynchronously ********** + System.out.println("Testing asynchronous call of invokeMethod(echo, args) "); + inArgs = new QmfData(); + inArgs.setValue("message", "This message should be echoed by the Agent"); + control.invokeMethod("echo", inArgs, "echoMethodCorrelationId"); + + + // Asynchronous update and display state of control object. The state here should be the same as + // the last time it was called as this is an asynchronous refresh. The ObjectUpdateWorkItem in + // the event handler contains the new state + control.refresh("echoMethodCorrelationId"); + System.out.println("MethodCount = " + control.getLongValue("methodCount") + " (should be same as last value)"); + + + + // ********** Invoke stop nethod, this will stop the Agent ********** + System.out.println("Testing invokeMethod(stop, args) "); + inArgs = new QmfData(); + inArgs.setValue("message", "Ladies and gentlemen Elvis has just left the building"); + control.invokeMethod("stop", inArgs); + + + } + else + { + System.out.println("No control objects returned: AgentTestConsole failed"); + System.exit(1); + } + } + catch (QmfException qmfe) + { + System.err.println("QmfException " + qmfe.getMessage() + ": AgentTestConsole failed"); + System.exit(1); + } + } + + public void onEvent(WorkItem wi) + { + System.out.println("WorkItem type: " + wi.getType()); + + if (wi.getType() == AGENT_ADDED) + { + AgentAddedWorkItem item = (AgentAddedWorkItem)wi; + Agent agent = item.getAgent(); + + // If this is the gizmo Agent we notify the main thread so processing can continue. + if (agent.getProduct().equals("gizmo")) + { + synchronized(this) + { + _gizmo = agent; + notify(); + } + } + } + + if (wi.getType() == AGENT_HEARTBEAT) + { + AgentHeartbeatWorkItem item = (AgentHeartbeatWorkItem)wi; + Agent agent = item.getAgent(); + System.out.println(agent.getName()); + } + + if (wi.getType() == EVENT_RECEIVED) + { + EventReceivedWorkItem item = (EventReceivedWorkItem)wi; + Agent agent = item.getAgent(); + QmfEvent event = item.getEvent(); + + String className = event.getSchemaClassId().getClassName(); + System.out.println("Event: " + className); +//event.listValues(); + } + + if (wi.getType() == METHOD_RESPONSE) + { + MethodResponseWorkItem item = (MethodResponseWorkItem)wi; + MethodResult result = item.getMethodResult(); + String correlationId = item.getHandle().getCorrelationId(); + System.out.println("correlationId = " + correlationId); + System.out.println(result.getStringValue("message")); + } + + if (wi.getType() == OBJECT_UPDATE) + { + ObjectUpdateWorkItem item = (ObjectUpdateWorkItem)wi; + QmfConsoleData object = item.getQmfConsoleData(); + ObjectId objectId = object.getObjectId(); + String correlationId = item.getHandle().getCorrelationId(); + System.out.println("correlationId = " + correlationId); + System.out.println("objectId = " + objectId); + System.out.println("MethodCount = " + object.getLongValue("methodCount")); + } + + } + + public static void main(String[] args) + { + //System.out.println ("Setting log level to FATAL"); + System.setProperty("amqj.logging.level", "FATAL"); + + String url = (args.length == 1) ? args[0] : "localhost"; + AgentTestConsole test = new AgentTestConsole(url); + + BufferedReader commandLine = new BufferedReader(new InputStreamReader(System.in)); + try + { // Blocks here until return is pressed + System.out.println("Hit Return to exit"); + String s = commandLine.readLine(); + System.exit(0); + } + catch (IOException e) + { + System.out.println ("AgentTestConsole main(): IOException: " + e.getMessage()); + } + + System.out.println("*** Ending AgentTestConsole ***"); + } +} |