summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SoapClientTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SoapClientTest.java')
-rw-r--r--qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SoapClientTest.java208
1 files changed, 208 insertions, 0 deletions
diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SoapClientTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SoapClientTest.java
new file mode 100644
index 0000000000..a3d993a39f
--- /dev/null
+++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SoapClientTest.java
@@ -0,0 +1,208 @@
+/*
+ *
+ * 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.info.test;
+
+import junit.framework.TestCase;
+import org.apache.qpid.info.util.SoapClient;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+
+public class SoapClientTest extends TestCase
+{
+
+ private int _port;
+
+ private final String _hostName = "localhost";
+
+ private final String _urlPath = "/testSoap";
+
+ private ServerSocket _server = null;
+
+ /*
+ * Generate a soap client from a custom URL, hostname, port and soap context
+ * path to be derived
+ */
+ private SoapClient getSoapClient()
+ {
+ Properties destprops = new Properties();
+ destprops.setProperty("soap.hostname", _hostName);
+ destprops.setProperty("soap.port", _port + "");
+ destprops.setProperty("soap.urlpath", _urlPath);
+ destprops.setProperty("soap.envelope", "<ip>@IP</ip>");
+ destprops.setProperty("soap.action", "send");
+ HashMap<String, String> soapmap = new HashMap<String, String>();
+ soapmap.put("IP", "127.0.0.1");
+ return new SoapClient(soapmap, destprops);
+ }
+
+ /*
+ * A connection handler class that verifies the correct message is received
+ *
+ */
+ class ConnectionHandler implements Runnable
+ {
+ private Socket socket;
+
+ public ConnectionHandler(Socket socket)
+ {
+ this.socket = socket;
+ Thread t = new Thread(this);
+ t.start();
+ }
+
+ public void run()
+ {
+ String line;
+ final List<String> response = new ArrayList<String>();
+ try
+ {
+ BufferedReader br = new BufferedReader(new InputStreamReader(
+ socket.getInputStream()));
+ assertNotNull(br);
+ while ((line = br.readLine()) != null)
+ {
+ response.add(line);
+ }
+ br.close();
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ fail("Exception while reading from the socket");
+ }
+ assertTrue(response.contains("<ip>127.0.0.1</ip>"));
+ assertTrue(response.contains("SOAPAction: \"urn:send\""));
+ assertTrue(response
+ .contains("Content-Type: text/xml; charset=\"utf-8\""));
+ assertTrue(response.contains("Host: localhost" + _port));
+ assertTrue(response.contains("User-Agent: Axis2"));
+ }
+
+ }
+
+ /*
+ * Test that the SOAP client sends the expected data to the socket We mock a
+ * simple SOAP envelope: <ip>127.0.0.1</ip>
+ */
+ public void testSoapClient() throws Exception
+ {
+ //
+ try
+ {
+ _server = new ServerSocket(0);
+ _port = _server.getLocalPort();
+ assertTrue("Server is not yet bound to a port", _port != -1);
+ assertNotNull(_server);
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ fail("Unable to start the socket server");
+ }
+
+ Thread _socketAcceptor = new Thread()
+ {
+ public void run()
+ {
+ try
+ {
+ Socket socket = _server.accept();
+ new ConnectionHandler(socket);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ };
+ _socketAcceptor.start();
+ // Sleep for 1 second to allow the ServerSocket readiness
+ Thread.sleep(1000);
+ SoapClient sc = getSoapClient();
+ assertNotNull(sc);
+ sc.sendSOAPMessage();
+
+ _socketAcceptor.join(2000);
+
+ assertFalse("Socket Acceptor not stopped.", _socketAcceptor.isAlive());
+ }
+
+ /**
+ * Test SoapClient correctly clears previously set values
+ */
+ public void testSoapClientXMLData()
+ {
+ SoapClient sc = getSoapClient();
+
+ StringBuffer initial = new StringBuffer("Initial Value");
+
+ sc.setXMLData(initial);
+
+ assertEquals("getXMLData is not set with initial value",
+ initial.toString(), sc.getXMLData().toString());
+
+
+ StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?><ip=@IP><port=@PORT>");
+ sc.setXMLData(sb);
+ assertEquals(sc.getXMLData().length(), sb.length());
+ assertEquals("getXMLData does not return the same StringBuffer set by setXMLData",
+ sb.toString(), sc.getXMLData().toString());
+ }
+
+ /**
+ * Test that variable replacement is performed on the soap.envelope.
+ * Create dummy soap message and validate that the variable have been replaced.
+ */
+ public void testReplaceVariablesMap()
+ {
+ Properties props = new Properties();
+ // Add dummy values as required to create a soap message
+ props.setProperty("soap.hostname", _hostName);
+ props.setProperty("soap.port", "0");
+ props.setProperty("soap.urlpath", _urlPath);
+ props.setProperty("soap.action", "send");
+
+ /// The envelope is what we care about
+ props.setProperty("soap.envelope", "<addr>@IP:@PORT</addr>");
+ HashMap<String, String> soapmap = new HashMap<String, String>();
+
+ /// Variables that should be replaced.
+ final String ip = "127.0.0.1";
+ soapmap.put("IP", ip);
+ final String port = "8080";
+ soapmap.put("PORT", port);
+
+ SoapClient sc = new SoapClient(soapmap, props);
+ assertNotNull("SoapClient is null", sc);
+
+ assertTrue("Replace variables did not work as expected", ("<addr>" + ip + ":" + port + "</addr>").equals(sc.getXMLData().toString()));
+ }
+
+}