summaryrefslogtreecommitdiff
path: root/qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java
diff options
context:
space:
mode:
authorRobert Gemmell <robbie@apache.org>2015-06-25 10:22:51 +0000
committerRobert Gemmell <robbie@apache.org>2015-06-25 10:22:51 +0000
commit32ae758bc2e8fd962b66a4ab6341b14009f1907e (patch)
tree2f4d8174813284a6ea58bb6b7f6520aa92287476 /qpid/tools/src/java/qpid-qmf2-test/src/main/java/org/apache/qpid/qmf2/test/AgentTestConsole.java
parent116d91ad7825a98af36a869fc751206fbce0c59f (diff)
parentf7e896076143de4572b4f1f67ef0765125f2498d (diff)
downloadqpid-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.java308
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 ***");
+ }
+}