diff options
author | Martin Ritchie <ritchiem@apache.org> | 2010-06-22 13:42:41 +0000 |
---|---|---|
committer | Martin Ritchie <ritchiem@apache.org> | 2010-06-22 13:42:41 +0000 |
commit | b3c9cdb55d0c0f054bc4329f51492c0bee001ada (patch) | |
tree | 3652f1066645b9156967f353bdd6f774c3b0ac83 | |
parent | a82ee1e3944850168428c1c6ece0eda8b88a0dad (diff) | |
download | qpid-python-b3c9cdb55d0c0f054bc4329f51492c0bee001ada.tar.gz |
Qpid-2555 Patch 4 provided by Sorin Suciu, based on local review comments
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@956893 13f79535-47bb-0310-9956-ffa450edef68
16 files changed, 586 insertions, 426 deletions
diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Activator.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Activator.java index a442cf1f28..c7d3fd38ff 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Activator.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Activator.java @@ -21,70 +21,52 @@ package org.apache.qpid.info; -import java.io.File; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - import org.apache.qpid.info.util.HttpPoster; import org.apache.qpid.info.util.IniFileReader; import org.apache.qpid.info.util.SoapClient; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; -/** - * The Activator class for the OSGI info service - * - */ +import java.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +/** The Activator class for the OSGI info service */ public class Activator implements BundleActivator { - private final List<String> soapPropList = Arrays.asList("soap.hostname", - "soap.port", "soap.path", "soap.action", "soap.envelope"); + private final List<String> _soapPropList = Arrays.asList("soap.hostname", + "soap.port", "soap.path", "soap.action", "soap.envelope"); - private final List<String> httpPropList = Arrays.asList("http.url", - "http.envelope"); + private final List<String> _httpPropList = Arrays.asList("http.url", + "http.envelope"); - InfoServiceImpl service = null; + InfoServiceImpl _service = null; BundleContext _ctx = null; - Map<String, Properties> infoprops = new HashMap<String, Properties>(); - /** * Start bundle method - * - * @param ctx - * the bundle context + * + * @param ctx the bundle context */ public void start(BundleContext ctx) throws Exception { if (null != ctx) { _ctx = ctx; - service = new InfoServiceImpl(); - ctx.registerService(InfoService.class.getName(), service, null); + _service = new InfoServiceImpl(); + ctx.registerService(InfoService.class.getName(), _service, null); sendInfo("STARTUP"); } } /** - * Getter for the bundle context - * - * @return BundleContext the bundle context - */ - public BundleContext getBundleContext() - { - return _ctx; - } - - /** * Stop the bundle method - * - * @param ctx - * the bundle context + * + * @param ctx the bundle context */ public void stop(BundleContext ctx) throws Exception { @@ -93,13 +75,12 @@ public class Activator implements BundleActivator /** * Sends the information message - * - * @param action - * label that identifies if we are starting up or shutting down + * + * @param action label that identifies if we are starting up or shutting down */ private void sendInfo(String action) { - if ((null == _ctx) && (null == service)) + if ((null == _ctx) && (null == _service)) { // invalid state return; @@ -110,37 +91,35 @@ public class Activator implements BundleActivator { String QPID_HOME = System.getProperty("QPID_HOME"); String cfgFilePath = QPID_HOME + File.separator + "etc" - + File.separator + "qpidinfo.properties"; + + File.separator + "qpidinfo.ini"; ifr.load(cfgFilePath); - } catch (Exception ex) + } + catch (Throwable ex) { - // drop the exception + // drop everything to be silent return; } - // If we have no sections, something has gone really wrong, abort - if (ifr.getSections().size() == 0) - return; - - Info<? extends Map<String, ?>> info = service.invoke(action); - String protocol = ifr.getSections().get("").getProperty("protocol"); - sendMessages(protocol, ifr, info); + // Only send Messages if we have some sections. + if (ifr.getSections().size() != 0) + { + Info<? extends Map<String, ?>> info = _service.invoke(action); + String protocol = ifr.getSections().get("").getProperty("protocol"); + sendMessages(protocol, ifr, info); + } } /** * Sends all the messages configured in the properties file - * - * @param protocol - * indicates what protocol to be used: http and soap implemented - * for now - * @param ifr - * an instance of IniFileReader class - * @param info - * an instance of an Info object, encapsulating the information - * we want to send + * + * @param protocol indicates what protocol to be used: http and soap implemented + * for now + * @param ifr an instance of IniFileReader class + * @param info an instance of an Info object, encapsulating the information + * we want to send */ private void sendMessages(String protocol, IniFileReader ifr, - Info<? extends Map<String, ?>> info) + Info<? extends Map<String, ?>> info) { if (null != protocol) { @@ -152,7 +131,9 @@ public class Activator implements BundleActivator { // Skip the defaults if (section.equals("")) + { continue; + } Properties props = new Properties(); props.putAll(defaultProps); props.putAll(ifr.getSections().get(section)); @@ -162,7 +143,8 @@ public class Activator implements BundleActivator } } - } else if (protocol.toLowerCase().startsWith("soap")) + } + else if (protocol.toLowerCase().startsWith("soap")) { for (String section : ifr.getSections().keySet()) { @@ -175,38 +157,38 @@ public class Activator implements BundleActivator } } } - } else - { - return; } } /** * Checks if the properties for a specified protocol are valid - * - * @param protocol - * String representing the protocol - * @param props - * The properties associate with the specified protocol + * + * @param protocol String representing the protocol + * @param props The properties associate with the specified protocol + * @return boolean */ private boolean isValid(String protocol, Properties props) { if (null == protocol) + { return false; + } String value = ""; if (protocol.toLowerCase().startsWith("http")) { - for (String prop : httpPropList) + for (String prop : _httpPropList) { if (null == props.get(prop)) + { return false; + } } return true; } if (protocol.toLowerCase().startsWith("soap")) { - for (String prop : soapPropList) + for (String prop : _soapPropList) { value = props.getProperty(prop); if (null == value) diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/AppInfo.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/AppInfo.java index 15d9f6f55f..a5d267282b 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/AppInfo.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/AppInfo.java @@ -21,34 +21,32 @@ package org.apache.qpid.info; +import org.apache.qpid.common.QpidProperties; +import org.apache.qpid.server.configuration.ServerConfiguration; +import org.apache.qpid.server.registry.ApplicationRegistry; + import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import java.util.TreeMap; -import java.util.Map.Entry; -import org.apache.qpid.common.QpidProperties; -import org.apache.qpid.server.configuration.ServerConfiguration; -import org.apache.qpid.server.registry.ApplicationRegistry; - -/** - * AppInfo class is gathering application specific informations - * - */ +/** AppInfo class is gathering application specific information */ public class AppInfo { private static final List<String> appProps = Arrays.asList("QPID_HOME", - "QPID_WORK"); + "QPID_WORK"); private static Map<String, String> appInfoMap = new TreeMap<String, String>(); /** * getInfo method retrieves a key-value map for specific application properties + * * @return Map<String,String> - */ + */ public static Map<String, String> getInfo() { @@ -76,8 +74,6 @@ public class AppInfo appInfoMap.put("port", sc.getPorts().toString()); appInfoMap.put("version", QpidProperties.getReleaseVersion()); appInfoMap.put("vhosts", "standalone"); - // brokerInfoMap.put("DefaultVirtualHost", - // sc.getDefaultVirtualHost()); appInfoMap.put("JMXPrincipalDatabase", sc .getJMXPrincipalDatabase()); appInfoMap.put("KeystorePath", sc.getKeystorePath()); @@ -86,9 +82,10 @@ public class AppInfo appInfoMap.put("QpidWork", sc.getQpidWork()); appInfoMap.put("Bind", sc.getBind()); } - } catch (Exception e) + } + catch (Exception e) { - // + // drop everything to be silent } return appInfoMap; diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Info.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Info.java index 2c6db8df12..2fb9382526 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Info.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/Info.java @@ -20,31 +20,32 @@ */ /** - * + * * @author sorin - * + * * Info object */ package org.apache.qpid.info; +import org.apache.qpid.info.util.XMLWriter; + import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Properties; -import org.apache.qpid.info.util.XMLWriter; - /** - * The Info class encapsulates all the informations we are collecting - * and it is able to render it in different data representations + * The Info class encapsulates all the information we are collecting + * and it is able to render it in different data representations */ public class Info<T extends Map<String, ?>> { private T _info; /** - * Constructor. + * Constructor. + * * @param info instantiates the object with a Map<String,?> */ public Info(T info) @@ -65,24 +66,32 @@ public class Info<T extends Map<String, ?>> } /** - * Renders Info map to a property object - * @return A Properties object representing the Info map + * Renders Info map to a property object + * + * @return A Properties object representing the Info map */ - public Properties toProps() { + public Properties toProps() + { Properties props = new Properties(); - if (null==_info) return null; - for (Iterator<String> it = _info.keySet().iterator(); it.hasNext();) { - String key = it.next(); - props.put(key, _info.get(key)); + if (null == _info) + { + return null; + } + for (Iterator<String> it = _info.keySet().iterator(); it.hasNext();) + { + String key = it.next(); + props.put(key, _info.get(key)); } return props; } - + /** - * Renders Info map to a StringBuffer - * @return A StringBuffer object representing the Info map + * Renders Info map to a StringBuffer + * + * @return A StringBuffer object representing the Info map */ - public StringBuffer toStringBuffer() { + public StringBuffer toStringBuffer() + { StringBuffer sb = new StringBuffer(); for (Iterator<String> it = _info.keySet().iterator(); it.hasNext();) { @@ -91,37 +100,42 @@ public class Info<T extends Map<String, ?>> } return sb; } - + /** - * Renders Info map to a StringBuffer containing an XML string - * @return A StringBuffer object containing an XML representation of the Info map + * Renders Info map to a StringBuffer containing an XML string + * + * @return A StringBuffer object containing an XML representation of the Info map */ - public StringBuffer toXML() + public StringBuffer toXML() { XMLWriter xw = new XMLWriter(new StringBuffer()); xw.writeXMLHeader(); Map<String, String> attr = new HashMap<String, String>(); xw.writeOpenTag("qpidinfo", attr); String key; - for (Iterator<String> it = _info.keySet().iterator(); it.hasNext();) { + for (Iterator<String> it = _info.keySet().iterator(); it.hasNext();) + { attr.clear(); key = it.next(); - xw.writeTag(key, attr, _info.get(key).toString()); - } + xw.writeTag(key, attr, _info.get(key).toString()); + } xw.writeCloseTag("qpidinfo"); return xw.getXML(); } - + /** - * Renders Info map to a HashMap - * @return A HashMap object representing the Info map + * Renders Info map to a HashMap + * + * @return A HashMap object representing the Info map */ - public HashMap<String,String> toMap() { + public HashMap<String, String> toMap() + { String key; - HashMap<String,String> infoMap = new HashMap<String,String>(); - for (Iterator<String> it = _info.keySet().iterator(); it.hasNext();) { + HashMap<String, String> infoMap = new HashMap<String, String>(); + for (Iterator<String> it = _info.keySet().iterator(); it.hasNext();) + { key = it.next(); - infoMap.put(key, _info.get(key).toString()); + infoMap.put(key, _info.get(key).toString()); } return infoMap; } diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/InfoServiceImpl.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/InfoServiceImpl.java index a2ffaea3bb..5522f2701e 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/InfoServiceImpl.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/InfoServiceImpl.java @@ -20,9 +20,9 @@ */ /** - * + * * @author sorin - * + * * Implementation for Info service */ @@ -39,28 +39,28 @@ public class InfoServiceImpl implements InfoService { SortedMap<String, String> infoMap = new TreeMap<String, String>(); - + /** - * invoke method collects all the informations from System and Application - * and encapsulates them in an Info object - * @return An instance of an Info object + * invoke method collects all the information from System and Application + * and encapsulates them in an Info object + * @return An instance of an Info object */ public Info<? extends Map<String,?>> invoke(String action) { // Record the action (STARTUP/SHUTDOWN) infoMap.put("action",action); - + // Record the current time stamp SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSZ"); infoMap.put("time", sdf.format(Calendar.getInstance().getTime())); - + // Add the system specific properties infoMap.putAll(SystemInfo.getInfo()); // Add the application specific properties infoMap.putAll(AppInfo.getInfo()); - + return new Info<SortedMap<String, String>>(infoMap); - } + } } diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/SystemInfo.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/SystemInfo.java index 25095b62dc..8bd94fe14d 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/SystemInfo.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/SystemInfo.java @@ -32,7 +32,7 @@ import java.util.TreeMap; import java.util.Map.Entry; /** - * Collector for system specific information + * Collector for system specific information */ public class SystemInfo { @@ -46,8 +46,8 @@ public class SystemInfo "user.home", "user.dir", "user.name", "user.timezone"); /** - * getInfo collects all the properties specified in sysprops list - * @return A Map<String,String> + * getInfo collects all the properties specified in sysprops list + * @return A Map<String,String> */ public static Map<String, String> getInfo() { @@ -59,9 +59,10 @@ public class SystemInfo String hostname = addr.getHostName(); sysInfoMap.put("hostname", hostname); sysInfoMap.put("ip", addr.getHostAddress()); - } catch (UnknownHostException e) + } + catch (UnknownHostException e) { - // + // drop everything to be silent } // Get the runtime info sysInfoMap.put("CPUCores", Runtime.getRuntime().availableProcessors() diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/HttpPoster.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/HttpPoster.java index a9cd96845c..d27980be05 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/HttpPoster.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/HttpPoster.java @@ -40,63 +40,67 @@ import java.net.UnknownHostException; */
public class HttpPoster implements Runnable
{
- private final String url;
+ private final String _url;
- private final Hashtable<String, String> header;
+ private final Hashtable<String, String> _header;
- private final List<String> response = new ArrayList<String>();
+ private final List<String> _response = new ArrayList<String>();
private final StringBuffer _buf;
/**
* Constructor
- * @param props Properties containing the URL
- * @param buf Buffer containing the message to be posted
+ *
+ * @param props Properties containing the URL
+ * @param buf Buffer containing the message to be posted
*/
public HttpPoster(Properties props, StringBuffer buf)
{
_buf = buf;
if (null != props)
{
- url = props.getProperty("http.url");
- header = new Hashtable<String, String>();
+ _url = props.getProperty("http.url");
+ _header = new Hashtable<String, String>();
try
{
- String hostname = InetAddress.getLocalHost().getHostName();
- header.put("hostname", hostname);
- } catch (UnknownHostException e)
+ String hostname = InetAddress.getLocalHost().getHostName();
+ _header.put("hostname", hostname);
+ }
+ catch (UnknownHostException e)
{
- // Silently ignoring the error ;)
+ // Silently ignoring the error ;)
}
- } else
+ }
+ else
{
- url = null;
- header = null;
+ _url = null;
+ _header = null;
}
}
- /**
- * Posts the message from the _buf StringBuffer to the http server
- */
+
+ /** Posts the message from the _buf StringBuffer to the http server */
public void run()
{
- if (null == url)
+ if (null == _url)
+ {
return;
+ }
String line;
URL urlDest;
URLConnection urlConn;
try
{
- urlDest = new URL(url);
+ urlDest = new URL(_url);
urlConn = urlDest.openConnection();
urlConn.setDoOutput(true);
urlConn.setUseCaches(false);
- for (Iterator<String> it = header.keySet().iterator(); it.hasNext();)
+ for (Iterator<String> it = _header.keySet().iterator(); it.hasNext();)
{
- String prop = (String) it.next();
- urlConn.setRequestProperty(prop, header.get(prop));
+ String prop = it.next();
+ urlConn.setRequestProperty(prop, _header.get(prop));
}
- OutputStreamWriter wr = new OutputStreamWriter(urlConn
- .getOutputStream());
+ OutputStreamWriter wr =
+ new OutputStreamWriter(urlConn.getOutputStream());
wr.write(_buf.toString());
wr.flush();
// Get the response
@@ -104,21 +108,23 @@ public class HttpPoster implements Runnable urlConn.getInputStream()));
while ((line = rd.readLine()) != null)
{
- response.add(line);
+ _response.add(line);
}
- } catch (Exception ex)
+ }
+ catch (Exception ex)
{
- return;
+ // Silently ignoring the error ;)
}
}
-
+
/**
* Retrieves the response from the http server
+ *
* @return List<String> response received from the http server
*/
- public List<String> getResponse()
+ public List<String> get_response()
{
- return response;
+ return _response;
}
}
diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/IniFileReader.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/IniFileReader.java index 3faac5aeaa..60a025d322 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/IniFileReader.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/IniFileReader.java @@ -21,37 +21,42 @@ package org.apache.qpid.info.util; -import java.util.*; -import java.io.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; /** - * This class is simple implementation of an ini file reader. It expects a + * This class is simple implementation of an ini file reader. It expects a * file with the following structure: - * - * ; global values, can be overwritten in sections + * + * ; global values, can be overwritten in sections * key1=value1 * key2=value2 - * + * * [Section1] * key1=value1_new ; overwriting the global key1 * key3=value3 * key4=value4 - * + * * [Section2] * key5=value5 * key6=value6 * key7=value7 - * + * * Note: Commentaries are preceded by ; or # and are supported throughout - * A commentary line at the end of section is interpreted as - * a section end marker - * - * A structure <String,Properties> (section name, associated properties) - * is generated as a result of processing the ini file. + * A commentary line at the end of section is interpreted as + * a section end marker + * + * A structure <String,Properties> (section name, associated properties) + * is generated as a result of processing the ini file. */ public class IniFileReader { - private final Map<String, Properties> sections; + private final Map<String, Properties> _sections; private final String COMMENT_SEMICOLON = ";"; @@ -65,33 +70,45 @@ public class IniFileReader /* * IniFileReader constructor */ + public IniFileReader() { - sections = new HashMap<String, Properties>(); + _sections = new HashMap<String, Properties>(); } /** * Cleans up the after comments or the empty spaces/tabs surrounding the given string - * @param str The String to be cleaned + * + * @param str The String to be cleaned + * * @return String Cleanup Version */ private String cleanUp(String str) { if (str.contains(COMMENT_SEMICOLON)) + { str = str.substring(0, str.indexOf(COMMENT_SEMICOLON)); + } if (str.contains(COMMENT_HASH)) + { str = str.substring(0, str.indexOf(COMMENT_HASH)); + } return str.trim(); } /** * Loads and parses the ini file with the full path specified in the argument - * @param fileName Full path to the ini file - * @throws IllegalArgumentException If the file cannot be processed + * + * @param fileName Full path to the ini file + * + * @throws IllegalArgumentException If the file cannot be processed */ public void load(String fileName) throws IllegalArgumentException { - if (! new File(fileName).isFile()) throw new IllegalArgumentException("File: "+fileName+ " does not exist or cannot be read."); + if (!new File(fileName).isFile()) + { + throw new IllegalArgumentException("File: " + fileName + " does not exist or cannot be read."); + } State state = State.GLOBAL; String line; Properties sectionProps = new Properties(); @@ -104,12 +121,19 @@ public class IniFileReader String str = cleanUp(line); // Did we get a section header? - if (str.startsWith("[") && str.endsWith("]")) + if (str.startsWith("[")) { + if (!str.endsWith("]")) + { + // Index of 1 to skip '[' + throw new IllegalArgumentException(str.substring(1) + + " is not closed"); + } + // We encountered a new section header if (state != State.IN_SECTION) { - sections.put(sectionName, sectionProps); + _sections.put(sectionName, sectionProps); sectionProps = new Properties(); sectionName = str.replace("[", "").replace("]", "") .trim(); @@ -125,10 +149,11 @@ public class IniFileReader // mean we are off the section if (state == State.IN_SECTION) { - sections.put(sectionName, sectionProps); + _sections.put(sectionName, sectionProps); state = State.OFF_SECTION; } - } else + } + else { // proper line, add it to the props if (state != State.OFF_SECTION) @@ -143,25 +168,26 @@ public class IniFileReader } } in.close(); - } catch (IOException e) + } + catch (IOException e) { - sections.clear(); + _sections.clear(); return; } if (state != State.OFF_SECTION) { - sections.put(sectionName, sectionProps); + _sections.put(sectionName, sectionProps); } } /** * Getter for the Sections Map + * * @return Map<String,Properties> The parsed content of the ini file in this structure */ public Map<String, Properties> getSections() { - return sections; + return _sections; } - } diff --git a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/SoapClient.java b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/SoapClient.java index 01a2ccd457..0f66085fc3 100644 --- a/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/SoapClient.java +++ b/qpid/java/broker-plugins/experimental/info/src/main/java/org/apache/qpid/info/util/SoapClient.java @@ -19,19 +19,16 @@ * */ /** - * + * * @author sorin - * + * * An simple SOAP client for qpid info service */ package org.apache.qpid.info.util; import java.io.BufferedWriter; - import java.io.OutputStreamWriter; - import java.net.InetAddress; - import java.net.Socket; import java.util.HashMap; import java.util.Properties; @@ -39,52 +36,56 @@ import java.util.Properties; public class SoapClient { - private final StringBuffer xmlData; + private final StringBuffer _xmlData; private final Properties _destprops; - private final String hostname; + private final String _hostname; - private final int port; + private final int _port; - private final String urlpath; + private final String _urlpath; - private final String soapenvelope; + private final String _soapenvelope; - private final String soapaction; + private final String _soapaction; - private final StringBuffer soapMessage = new StringBuffer(); + private final StringBuffer _soapMessage = new StringBuffer(); public SoapClient(HashMap<String, String> map, Properties destprops) { _destprops = destprops; - hostname = (String) _destprops.get("soap.hostname"); - port = Integer.parseInt((String) _destprops.get("soap.port")); - urlpath = (String) destprops.get("soap.path"); - soapenvelope = (String) destprops.get("soap.envelope"); - soapaction = (String) destprops.get("soap.action"); - xmlData = new StringBuffer(soapenvelope); + _hostname = (String) _destprops.get("soap.hostname"); + _port = Integer.parseInt((String) _destprops.get("soap.port")); + _urlpath = (String) destprops.get("soap.path"); + _soapenvelope = (String) destprops.get("soap.envelope"); + _soapaction = (String) destprops.get("soap.action"); + _xmlData = new StringBuffer(_soapenvelope); replaceVariables(map); } public StringBuffer getXMLData() { - return xmlData; + return _xmlData; } public StringBuffer getSoapMessage() { - return soapMessage; + return _soapMessage; } public String getSoapEnvelope() { - return soapenvelope; + return _soapenvelope; } - + + /** + * Clears and sets new XML data + * @param sb the new data to set + */ public void setXMLData(StringBuffer sb) { - xmlData.delete(0, xmlData.length()); - xmlData.append(sb); + _xmlData.delete(0, _xmlData.length()); + _xmlData.append(sb); } @@ -93,9 +94,9 @@ public class SoapClient int ix = 0; for (String var : vars.keySet()) { - while ((ix = xmlData.indexOf("@" + var.toUpperCase())) >= 0) + while ((ix = _xmlData.indexOf("@" + var.toUpperCase())) >= 0) { - xmlData.replace(ix, ix + 1 + var.length(), vars.get(var)); + _xmlData.replace(ix, ix + 1 + var.length(), vars.get(var)); } } } @@ -103,13 +104,15 @@ public class SoapClient public void replaceVariables(Properties varProps) { if (varProps == null) + { return; + } int ix = 0; for (Object var : varProps.keySet()) { - while ((ix = xmlData.indexOf("@" + var)) >= 0) + while ((ix = _xmlData.indexOf("@" + var)) >= 0) { - xmlData.replace(ix, ix + 1 + var.toString().length(), varProps + _xmlData.replace(ix, ix + 1 + var.toString().length(), varProps .get(var).toString()); } } @@ -121,34 +124,32 @@ public class SoapClient try { - InetAddress addr = InetAddress.getByName(hostname); - Socket sock = new Socket(addr, port); + InetAddress addr = InetAddress.getByName(_hostname); + Socket sock = new Socket(addr, _port); StringBuffer sb = new StringBuffer(); - sb.append("POST " + urlpath + " HTTP/1.1\r\n"); - sb.append("Host: " + hostname + ":" + port + "\r\n"); - sb.append("Content-Length: " + xmlData.length() + "\r\n"); + sb.append("POST " + _urlpath + " HTTP/1.1\r\n"); + sb.append("Host: " + _hostname + ":" + _port + "\r\n"); + sb.append("Content-Length: " + _xmlData.length() + "\r\n"); sb.append("Content-Type: text/xml; charset=\"utf-8\"\r\n"); - sb.append("SOAPAction: \"urn:"+soapaction+"\"\r\n"); + sb.append("SOAPAction: \"urn:"+ _soapaction +"\"\r\n"); sb.append("User-Agent: Axis2\r\n"); sb.append("\r\n"); // Send header BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock .getOutputStream(), "UTF-8")); - synchronized(soapMessage) { - soapMessage.setLength(0); - soapMessage.append(sb); - soapMessage.append(xmlData); + synchronized(_soapMessage) { + _soapMessage.setLength(0); + _soapMessage.append(sb); + _soapMessage.append(_xmlData); } - System.out.println(soapMessage.toString()); - // Send data - wr.write(soapMessage.toString()); + // Send data + wr.write(_soapMessage.toString()); wr.flush(); wr.close(); } catch (Exception ex) { // Drop any exception - System.out.println("*** INFO Exception at sending SOAP msg: "+ex.getMessage()); } } } diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/systest/InfoPluginTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/systest/InfoPluginTest.java index 642327a198..faeaf716e3 100644 --- a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/systest/InfoPluginTest.java +++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/systest/InfoPluginTest.java @@ -1,5 +1,7 @@ package org.apache.qpid.info.systest; +import org.apache.qpid.test.utils.QpidBrokerTestCase; + import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; @@ -13,37 +15,35 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import org.apache.qpid.test.utils.QpidBrokerTestCase; - public class InfoPluginTest extends QpidBrokerTestCase { private String QPID_HOME = null; - private ServerSocket server = null; + private ServerSocket _server = null; - private final int port = 9000; + private int _port; private static final String CR = System.getProperty("line.separator"); private static final String FS = File.separator; - private final String cfgRelPath = "etc" + FS + "qpidinfo.properties"; + private final String _cfgRelPath = "etc" + FS + "qpidinfo.ini"; - private File tmpCfgFile; + private File _tmpCfgFile; - private final String soapEnvelopeHead = "<?xml version=\"1.0\"?><soap:Envelope xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\">"; + private final String _soapEnvelopeHead = "<?xml version=\"1.0\"?><soap:Envelope xmlns:soap=\"http://www.w3.org/2001/12/soap-envelope\" soap:encodingStyle=\"http://www.w3.org/2001/12/soap-encoding\">"; - private final String soapEnvelopeTail = "</soap:Envelope>"; + private final String _soapEnvelopeTail = "</soap:Envelope>"; - private String soapMessage1 = "@ACTION" + "-" + "@VERSION"; + private String _soapMessage1 = "@ACTION" + "-" + "@VERSION"; - private String soapMessage2 = "@VERSION" + "-" + "@ACTION"; + private String _soapMessage2 = "@VERSION" + "-" + "@ACTION"; - private CountDownLatch latch = new CountDownLatch(2); + private CountDownLatch _latch = new CountDownLatch(2); - final List<List<String>> recv = new ArrayList<List<String>>(); + final List<List<String>> _recv = new ArrayList<List<String>>(); - Thread socketAcceptor; + Thread _socketAcceptor; public void setUp() throws Exception { @@ -51,19 +51,27 @@ public class InfoPluginTest extends QpidBrokerTestCase if (QPID_HOME != null) { System.out.println("QPID_HOME=" + QPID_HOME); - } else + } + else { fail("QPID_HOME not set"); } + + startSoapServer(); + // Must start the server first to identify a free port. createConfigFile(); - startSoapServer(port); } public void tearDown() throws Exception { + System.out.println("*** Stopping socket server..."); + _socketAcceptor.join(2000); + System.out.println("*** Deleting the config file..."); - if (tmpCfgFile.isFile()) - tmpCfgFile.delete(); + if (_tmpCfgFile.isFile()) + { + _tmpCfgFile.delete(); + } super.tearDown(); } @@ -71,18 +79,21 @@ public class InfoPluginTest extends QpidBrokerTestCase { try { - tmpCfgFile = new File(QPID_HOME + FS + cfgRelPath); - if (tmpCfgFile.isFile()) - tmpCfgFile.delete(); - tmpCfgFile.createNewFile(); - assertTrue(tmpCfgFile.isFile()); - FileWriter fwriter = new FileWriter(tmpCfgFile); + _tmpCfgFile = new File(QPID_HOME + FS + _cfgRelPath); + _tmpCfgFile.deleteOnExit(); + if (_tmpCfgFile.isFile()) + { + _tmpCfgFile.delete(); + } + assertTrue("Unable to create file.", _tmpCfgFile.createNewFile()); + assertTrue(_tmpCfgFile.isFile()); + FileWriter fwriter = new FileWriter(_tmpCfgFile); BufferedWriter writer = new BufferedWriter(fwriter); writer.write("protocol=soap"); writer.write(CR); writer.write("soap.hostname=localhost"); writer.write(CR); - writer.write("soap.port=" + port); + writer.write("soap.port=" + _port); writer.write(CR); writer.write(CR); writer.write("[MSG1]"); @@ -91,8 +102,8 @@ public class InfoPluginTest extends QpidBrokerTestCase writer.write(CR); writer.write("soap.action=submitinfo1"); writer.write(CR); - writer.write("soap.envelope=" + soapEnvelopeHead + soapMessage1 - + soapEnvelopeTail); + writer.write("soap.envelope=" + _soapEnvelopeHead + _soapMessage1 + + _soapEnvelopeTail); writer.write(CR); writer.write(CR); writer.write("[MSG2]"); @@ -101,34 +112,36 @@ public class InfoPluginTest extends QpidBrokerTestCase writer.write(CR); writer.write("soap.action=submitinfo2"); writer.write(CR); - writer.write("soap.envelope=" + soapEnvelopeHead + soapMessage2 - + soapEnvelopeTail); + writer.write("soap.envelope=" + _soapEnvelopeHead + _soapMessage2 + + _soapEnvelopeTail); writer.write(CR); writer.write(CR); writer.close(); - assertTrue("Config file size is zero", tmpCfgFile.length() > 0); - } catch (IOException e) + assertTrue("Config file size is zero", _tmpCfgFile.length() > 0); + } + catch (IOException e) { fail("Unable to create the qpidinfo.properties due to: " - + e.getMessage()); + + e.getMessage()); } } - private void startSoapServer(int port) throws Exception + private void startSoapServer() throws Exception { - assertTrue("Port a negative number", port > 0); - assertTrue("Port higher than 65535", port < 65535); - try { - server = new ServerSocket(port); - assertNotNull("SocketServer is null", server); - } catch (Exception ex) + _server = new ServerSocket(0); + _port = _server.getLocalPort(); + assertTrue("Server not yet bound.", _port != -1); + + assertNotNull("SocketServer is null", _server); + } + catch (Exception ex) { fail("Unable to start the socket server due to: " + ex.getMessage()); } - socketAcceptor = new Thread() + _socketAcceptor = new Thread() { public void run() { @@ -136,26 +149,27 @@ public class InfoPluginTest extends QpidBrokerTestCase { try { - Socket socket = server.accept(); + Socket socket = _server.accept(); new ConnectionHandler(socket); - } catch (IOException e) + } + catch (IOException e) { fail("Error opening the socket in accept mode"); } } } }; - socketAcceptor.start(); + _socketAcceptor.start(); System.out.println("*** Socket server started..."); } class ConnectionHandler implements Runnable { - private Socket socket; + private Socket _socket; public ConnectionHandler(Socket socket) { - this.socket = socket; + _socket = socket; Thread t = new Thread(this); t.start(); } @@ -168,7 +182,7 @@ public class InfoPluginTest extends QpidBrokerTestCase try { BufferedReader br = new BufferedReader(new InputStreamReader( - socket.getInputStream())); + _socket.getInputStream())); assertNotNull(br); while ((line = br.readLine()) != null) { @@ -177,12 +191,13 @@ public class InfoPluginTest extends QpidBrokerTestCase br.close(); System.out.println("*** Received buffer: " + buf); System.out.println("*** Latch countdown"); - latch.countDown(); - synchronized (recv) + _latch.countDown(); + synchronized (_recv) { - recv.add(buf); + _recv.add(buf); } - } catch (Exception ex) + } + catch (Exception ex) { ex.printStackTrace(); fail("Exception while reading from the socket"); @@ -194,56 +209,48 @@ public class InfoPluginTest extends QpidBrokerTestCase public void testInfoPlugin() throws Exception { + //Start the broker super.setUp(); - if (!latch.await(10, TimeUnit.SECONDS)) + if (!_latch.await(10, TimeUnit.SECONDS)) { fail("Timeout awaiting for the latch, upon startup"); } - assertTrue("Received less than 2 messages", recv.size() > 1); - //Message 1 - assertTrue("Message has 0 size", recv.get(0).size()>0); - assertEquals("Message does not have 8 fields", recv.get(0).size(), 8); - assertTrue("Message does not contain Host: localhost:9000",recv.get(0).contains("Host: localhost:9000")); - assertTrue("Message does not contain: User-Agent: Axis2 ", recv.get(0).contains("User-Agent: Axis2")); - assertTrue("Message does not contain: SOAPAction: \"urn:submitinfo\"", recv.get(0).get(4).startsWith("SOAPAction: \"urn:submitinfo")); - assertTrue("Message does not contain STARTUP in the soap envelope", recv.get(0).get(7).contains("STARTUP")); - - //Message 2 - assertTrue("Message has 0 size", recv.get(1).size()>0); - assertEquals("Message does not have 8 fields", recv.get(1).size(), 8); - assertTrue("Message does not contain Host: localhost:9000",recv.get(1).contains("Host: localhost:9000")); - assertTrue("Message does not contain: User-Agent: Axis2 ", recv.get(1).contains("User-Agent: Axis2")); - assertTrue("Message does not contain: SOAPAction: \"urn:submitinfo\"", recv.get(1).get(4).startsWith("SOAPAction: \"urn:submitinfo")); - assertTrue("Message does not contain STARTUP in the soap envelope", recv.get(0).get(7).contains("STARTUP")); - - recv.clear(); - latch = new CountDownLatch(2); - + validateResponses("STARTUP"); + + _recv.clear(); + _latch = new CountDownLatch(2); + stopBroker(); - - if (!latch.await(10, TimeUnit.SECONDS)) + + if (!_latch.await(10, TimeUnit.SECONDS)) { fail("Timeout awaiting for the latch, upon shutdown"); } - - - assertTrue("Received less than 2 messages", recv.size() > 1); - - // Message 1 - assertTrue("Message does not contain Host: localhost:9000",recv.get(0).contains("Host: localhost:9000")); - assertTrue("Message does not contain: User-Agent: Axis2 ", recv.get(0).contains("User-Agent: Axis2")); - assertTrue("Message does not contain: SOAPAction: \"urn:submitinfo\"", recv.get(0).get(4).startsWith("SOAPAction: \"urn:submitinfo")); - assertTrue("Message does not contain SHUTDOWN in the soap envelope", recv.get(0).get(7).contains("SHUTDOWN")); - + + validateResponses("SHUTDOWN"); + + } + + /** + * Check the responses from the server to ensure they contain the required messages. + * @param action String to match for the SHUTDOWN or STARTUP action. + */ + private void validateResponses(String action) + { + assertTrue("Received less than 2 messages", _recv.size() > 1); + + // Message 1 + assertTrue("Message does not contain Host: localhost:" + _port + "\n" + _recv.get(0), _recv.get(0).contains("Host: localhost:" + _port)); + assertTrue("Message does not contain: User-Agent: Axis2 " + "\n" + _recv.get(0), _recv.get(0).contains("User-Agent: Axis2")); + assertTrue("Message does not contain: SOAPAction: \"urn:submitinfo\"" + "\n" + _recv.get(0).get(4), _recv.get(0).get(4).startsWith("SOAPAction: \"urn:submitinfo")); + assertTrue("Message does not contain '" + action + "' in the soap envelope" + "\n" + _recv.get(0).get(7), _recv.get(0).get(7).contains(action)); + // Message 2 - assertTrue("Message does not contain Host: localhost:9000",recv.get(1).contains("Host: localhost:9000")); - assertTrue("Message does not contain: User-Agent: Axis2 ", recv.get(1).contains("User-Agent: Axis2")); - assertTrue("Message does not contain: SOAPAction: \"urn:submitinfo\"", recv.get(1).get(4).startsWith("SOAPAction: \"urn:submitinfo")); - assertTrue("Message does not contain SHUTDOWN in the soap envelope", recv.get(0).get(7).contains("SHUTDOWN")); - - System.out.println("*** Stopping socket server..."); - socketAcceptor.join(2000); + assertTrue("Message does not contain Host: localhost:" + _port + "\n" + _recv.get(1), _recv.get(1).contains("Host: localhost:" + _port)); + assertTrue("Message does not contain: User-Agent: Axis2 " + "\n" + _recv.get(1), _recv.get(1).contains("User-Agent: Axis2")); + assertTrue("Message does not contain: SOAPAction: \"urn:submitinfo\"" + "\n" + _recv.get(1).get(4), _recv.get(1).get(4).startsWith("SOAPAction: \"urn:submitinfo")); + assertTrue("Message does not contain '" + action + "' in the soap envelope" + "\n" + _recv.get(1).get(7), _recv.get(1).get(7).contains(action)); } } diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/HttpPosterTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/HttpPosterTest.java index 6be421dd7d..4f76fea8ef 100644 --- a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/HttpPosterTest.java +++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/HttpPosterTest.java @@ -92,14 +92,14 @@ public class HttpPosterTest extends TestCase HttpPoster hp = getHttpPoster(baseURL + contextPath); assertNotNull(hp); hp.run(); - List<String> response = hp.getResponse(); + List<String> response = hp.get_response(); assertTrue(response.size() > 0); assertEquals("OK <br>", response.get(0).toString()); // Failure Test hp = getHttpPoster("http://localhost/nonexistent"); hp.run(); - response = hp.getResponse(); + response = hp.get_response(); assertTrue(response.size() == 0); } diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoServiceImplTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoServiceImplTest.java index 2de3f4841b..9f359582a5 100644 --- a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoServiceImplTest.java +++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoServiceImplTest.java @@ -37,14 +37,14 @@ import junit.framework.TestCase; public class InfoServiceImplTest extends TestCase { - InfoServiceImpl isi = null; + InfoServiceImpl _isi = null; @SuppressWarnings("unchecked") public void testInvoke() { - isi = new InfoServiceImpl(); - assertNotNull(isi); - Info<? extends Map<String, String>> info = (Info<? extends Map<String, String>>) isi + _isi = new InfoServiceImpl(); + assertNotNull(_isi); + Info<? extends Map<String, String>> info = (Info<? extends Map<String, String>>) _isi .invoke("START"); assertNotNull(info); Properties props = info.toProps(); diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoTest.java index da3d844491..bb4965ef1e 100644 --- a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoTest.java +++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/InfoTest.java @@ -32,23 +32,16 @@ import org.apache.qpid.info.Info; */ public class InfoTest extends TestCase { - private HashMap<String, String> infoPayLoad = null; + private HashMap<String, String> _infoPayLoad = null; - private Info<HashMap<String, String>> info = null; + private Info<HashMap<String, String>> _info = null; protected void setUp() throws Exception { super.setUp(); - infoPayLoad = new HashMap<String, String>(); - infoPayLoad.put("test", "Test"); - info = new Info<HashMap<String, String>>(infoPayLoad); - } - - protected void tearDown() throws Exception - { - super.tearDown(); - info = null; - infoPayLoad = null; + _infoPayLoad = new HashMap<String, String>(); + _infoPayLoad.put("test", "Test"); + _info = new Info<HashMap<String, String>>(_infoPayLoad); } /* @@ -56,9 +49,9 @@ public class InfoTest extends TestCase */ public void testToString() { - assertNotNull("toString() returned null", info.toString()); + assertNotNull("toString() returned null", _info.toString()); assertEquals("toString() did not return the proper string", - "test=Test\n", info.toString()); + "test=Test\n", _info.toString()); } /* @@ -68,8 +61,8 @@ public class InfoTest extends TestCase { Properties props = new Properties(); props.put("test", "Test"); - assertNotNull("toProperties() returned null", info.toProps()); - assertEquals("toProperties not returned the proper object", props, info + assertNotNull("toProperties() returned null", _info.toProps()); + assertEquals("toProperties not returned the proper object", props, _info .toProps()); } @@ -79,8 +72,8 @@ public class InfoTest extends TestCase public void testToStringBuffer() { StringBuffer sb = new StringBuffer("test=Test\n"); - assertNotNull(info.toStringBuffer()); - assertEquals(sb.toString(), info.toStringBuffer().toString()); + assertNotNull(_info.toStringBuffer()); + assertEquals(sb.toString(), _info.toStringBuffer().toString()); } /* @@ -88,15 +81,15 @@ public class InfoTest extends TestCase */ public void testToXML() { - String INDEND = " "; + String INDENT = " "; StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\"?>\n"); sb.append("<qpidinfo>\n"); sb.append("<test>\n"); - sb.append(INDEND + "Test\n"); + sb.append(INDENT + "Test\n"); sb.append("</test>\n"); sb.append("</qpidinfo>\n"); - assertEquals("toString() does not return the proper string", info + assertEquals("toString() does not return the proper string", _info .toXML().toString(), sb.toString()); } @@ -105,7 +98,7 @@ public class InfoTest extends TestCase */ public void testToMap() { - HashMap<String, String> thm = info.toMap(); + HashMap<String, String> thm = _info.toMap(); assertFalse("toMap() returned empty map", thm.isEmpty()); assertEquals("testToMap did not returned 1", 1, thm.size()); assertTrue("toMap() returned a map not containing expected key: test", diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/IniFileReaderTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/IniFileReaderTest.java index 626102c68d..77ecaa2176 100644 --- a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/IniFileReaderTest.java +++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/IniFileReaderTest.java @@ -21,6 +21,9 @@ package org.apache.qpid.info.test; +import junit.framework.TestCase; +import org.apache.qpid.info.util.IniFileReader; + import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; @@ -28,10 +31,10 @@ import java.io.IOException; import java.util.Map; import java.util.Properties; -import org.apache.qpid.info.util.IniFileReader; - -import junit.framework.TestCase; - +/** + * Test the Loading of the ini file reader by first writing + * out a correct ini file. + */ public class IniFileReaderTest extends TestCase { @@ -48,8 +51,8 @@ public class IniFileReaderTest extends TestCase writer.write("globalprop1=globalval1\n"); writer.write("globalprop2=globalval2\n"); writer.write("\n"); - writer.write("[Section1]\n"); - writer.write("key1=val1\n"); + writer.write("[Section1] # Comment on Section\n"); + writer.write("key1=val1 # Comment on Value\n"); writer.write("key2=val2\n"); writer.write("\n"); writer.write("#Section2 Comment\n"); @@ -63,29 +66,71 @@ public class IniFileReaderTest extends TestCase writer.write("key7=val7\n"); writer.write("\n"); writer.close(); - } catch (IOException e) + } + catch (IOException e) { e.printStackTrace(); fail("Unable to create temporary File"); } ifr.load(iniFile.getAbsolutePath()); - Map<String,Properties> sections = ifr.getSections(); - assertNotNull("Sections not null",sections); + Map<String, Properties> sections = ifr.getSections(); + assertNotNull("Sections not null", sections); assertEquals("Have 4 sections", sections.keySet().size(), 4); assertTrue("Get globalprop1", sections.get("").getProperty("globalprop1").equals("globalval1")); assertTrue("Get globalprop2", sections.get("").getProperty("globalprop2").equals("globalval2")); assertNotNull("Section1 not null", sections.get("Section1")); - assertEquals("Section1 has 2 properties",sections.get("Section1").size(),2); - assertTrue("Section1 key1 has val1",sections.get("Section1").getProperty("key1").equals("val1")); - assertTrue("Section1 key2 has val2",sections.get("Section1").getProperty("key2").equals("val2")); - assertEquals("Section2 has 3 properties",sections.get("Section2").size(),3); - assertTrue("Section2 key3 has val3",sections.get("Section2").getProperty("key3").equals("val3")); - assertTrue("Section2 key4 has val4",sections.get("Section2").getProperty("key4").equals("val4")); - assertTrue("Section2 key5 has val5",sections.get("Section2").getProperty("key5").equals("val5")); - assertEquals("Section3 has 2 properties",sections.get("Section3").size(),2); - assertTrue("Section3 key6 has val6",sections.get("Section3").getProperty("key6").equals("val6")); - assertTrue("Section3 key7 has val7",sections.get("Section3").getProperty("key7").equals("val7")); + assertEquals("Section1 has 2 properties", sections.get("Section1").size(), 2); + assertTrue("Section1 key1 has val1", sections.get("Section1").getProperty("key1").equals("val1")); + assertTrue("Section1 key2 has val2", sections.get("Section1").getProperty("key2").equals("val2")); + assertEquals("Section2 has 3 properties", sections.get("Section2").size(), 3); + assertTrue("Section2 key3 has val3", sections.get("Section2").getProperty("key3").equals("val3")); + assertTrue("Section2 key4 has val4", sections.get("Section2").getProperty("key4").equals("val4")); + assertTrue("Section2 key5 has val5", sections.get("Section2").getProperty("key5").equals("val5")); + assertEquals("Section3 has 2 properties", sections.get("Section3").size(), 2); + assertTrue("Section3 key6 has val6", sections.get("Section3").getProperty("key6").equals("val6")); + assertTrue("Section3 key7 has val7", sections.get("Section3").getProperty("key7").equals("val7")); } + /** + * Test to ensure that the loading of a file with an unclosed section header + * fails to parse. + * + * Section needs to be fully enclosed in square brackets '[<name>]' + */ + public void testIncompleteSection1Load() + { + IniFileReader ifr = new IniFileReader(); + File iniFile = null; + try + { + iniFile = File.createTempFile(getName(), "ini"); + iniFile.deleteOnExit(); + BufferedWriter writer = new BufferedWriter(new FileWriter(iniFile)); + writer.write("# Global Comment1\n"); + writer.write("globalprop1=globalval1\n"); + writer.write("globalprop2=globalval2\n"); + writer.write("\n"); + writer.write("[Section1\n"); // Note '[Section1' not complete + writer.write("key1=val1\n"); + writer.write("key2=val2\n"); + writer.write("\n"); + writer.close(); + } + catch (IOException e) + { + e.printStackTrace(); + fail("Unable to create temporary File"); + } + try + { + ifr.load(iniFile.getAbsolutePath()); + fail("File should fail to parse"); + } + catch (IllegalArgumentException iae) + { + assertEquals("Incorrect Exception", "Section1 is not closed", iae.getMessage()); + } + + } } 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 index 5d503e1ba9..a3d993a39f 100644 --- 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 @@ -21,6 +21,9 @@ 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; @@ -31,22 +34,16 @@ import java.util.HashMap; import java.util.List; import java.util.Properties; -import junit.framework.TestCase; - -import org.apache.qpid.info.util.SoapClient; - public class SoapClientTest extends TestCase { - private final int port = 9100; - - private final String hostName = "localhost"; + private int _port; - private final String urlPath = "/testSoap"; + private final String _hostName = "localhost"; - private ServerSocket server = null; + private final String _urlPath = "/testSoap"; - Thread socketAcceptor; + private ServerSocket _server = null; /* * Generate a soap client from a custom URL, hostname, port and soap context @@ -55,9 +52,9 @@ public class SoapClientTest extends TestCase 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.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>(); @@ -94,7 +91,8 @@ public class SoapClientTest extends TestCase response.add(line); } br.close(); - } catch (Exception ex) + } + catch (Exception ex) { ex.printStackTrace(); fail("Exception while reading from the socket"); @@ -103,7 +101,7 @@ public class SoapClientTest extends TestCase assertTrue(response.contains("SOAPAction: \"urn:send\"")); assertTrue(response .contains("Content-Type: text/xml; charset=\"utf-8\"")); - assertTrue(response.contains("Host: localhost:9000")); + assertTrue(response.contains("Host: localhost" + _port)); assertTrue(response.contains("User-Agent: Axis2")); } @@ -118,59 +116,93 @@ public class SoapClientTest extends TestCase // try { - server = new ServerSocket(port); - assertNotNull(server); - } catch (Exception ex) + _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"); } - socketAcceptor = new Thread() + Thread _socketAcceptor = new Thread() { public void run() { try { - Socket socket = server.accept(); + Socket socket = _server.accept(); new ConnectionHandler(socket); - } catch (IOException e) + } + catch (IOException e) { e.printStackTrace(); } } }; - socketAcceptor.start(); + _socketAcceptor.start(); // Sleep for 1 second to allow the ServerSocket readiness Thread.sleep(1000); SoapClient sc = getSoapClient(); assertNotNull(sc); sc.sendSOAPMessage(); - socketAcceptor.join(2000); + + _socketAcceptor.join(2000); + + assertFalse("Socket Acceptor not stopped.", _socketAcceptor.isAlive()); } - - public void testSoapClientXMLData() { + + /** + * 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()); + assertEquals(sc.getXMLData().length(), sb.length()); + assertEquals("getXMLData does not return the same StringBuffer set by setXMLData", + sb.toString(), sc.getXMLData().toString()); } - - public void testReplaceVariablesMap() { - Properties props = new Properties(); - props.setProperty("soap.hostname", hostName); - props.setProperty("soap.port", port + ""); - props.setProperty("soap.urlpath", urlPath); + + /** + * 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>(); - soapmap.put("IP", "127.0.0.1"); - soapmap.put("PORT","8080"); - SoapClient sc = new SoapClient(soapmap,props); - assertNotNull("SoapClient is null",sc); - assertTrue("Replace variables did not work as expected","<addr>127.0.0.1:8080</addr>".equals(sc.getXMLData().toString())); + + /// 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())); } - } diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SystemInfoTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SystemInfoTest.java index 092ea630eb..6cb8e3a90a 100644 --- a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SystemInfoTest.java +++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/SystemInfoTest.java @@ -21,29 +21,36 @@ package org.apache.qpid.info.test; +import junit.framework.TestCase; +import org.apache.qpid.info.SystemInfo; + import java.util.Arrays; import java.util.List; import java.util.Map; -import junit.framework.TestCase; - -import org.apache.qpid.info.SystemInfo; - +/** Test the SystemInfo component */ public class SystemInfoTest extends TestCase { + /** + * Ensure the list of required properties are returned by the + * SystemInfo.getInfo call + */ public void testGetInfo() { Map<String, String> sysInfoMap = SystemInfo.getInfo(); assertNotNull("SystemInfo.getInfo() returned null", sysInfoMap); - List<String> sysInfoProps = Arrays.asList("java.class.path", + List<String> sysInfoProps = Arrays.asList( + "java.class.path", "java.vm.name", "java.class.version", "os.arch", "os.name", "os.version", "sun.arch.data.model", "user.dir", "user.name", - "user.timezone"); + "user.timezone", "hostname", "ip", "CPUCores", "Maximum_Memory", + "Free_Memory"); + for (String tag : sysInfoProps) { - assertNotNull("Map does not contain the tag: "+tag, sysInfoMap.get(tag)); + assertNotNull("Map does not contain the tag: " + tag, sysInfoMap.get(tag)); } } -} +}
\ No newline at end of file diff --git a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/XMLWriterTest.java b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/XMLWriterTest.java index f3e2e1d55d..f352226361 100644 --- a/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/XMLWriterTest.java +++ b/qpid/java/broker-plugins/experimental/info/src/test/java/org/apache/qpid/info/test/XMLWriterTest.java @@ -21,57 +21,106 @@ package org.apache.qpid.info.test; -import java.util.HashMap; - +import junit.framework.TestCase; import org.apache.qpid.info.util.XMLWriter; -import junit.framework.TestCase; +import java.util.HashMap; /* * This test verifies the XML writer custom class operations */ + public class XMLWriterTest extends TestCase { private XMLWriter xw = null; + /** Test constructor arg is returned via getXML() */ public void testXMLWriter() { - xw = new XMLWriter(new StringBuffer("Test")); + StringBuffer input = new StringBuffer("Test"); + xw = new XMLWriter(input); assertNotNull("XMLWriter could not instantiate", xw); - assertEquals("XMLWriter.toString() failed","Test", xw.getXML().toString()); + assertEquals("XMLWriter.getXML() failed", input, xw.getXML()); } + /** Test header generation */ public void testWriteXMLHeader() { xw = new XMLWriter(new StringBuffer()); assertNotNull(xw); xw.writeXMLHeader(); - assertEquals("XMLWriter.writeXMLHeader(...) failed","<?xml version=\"1.0\"?>\n", xw.getXML().toString()); + assertEquals("XMLWriter.writeXMLHeader(...) failed", "<?xml version=\"1.0\"?>\n", xw.getXML().toString()); } + /** Test tag created and written correctly */ public void testWriteTag() { - String INDEND = " "; + String INDENT = " "; xw = new XMLWriter(new StringBuffer()); assertNotNull("XMLWriter could not instantiate", xw); xw.writeTag("test", new HashMap<String, String>(), "TEST"); - assertEquals("XMLWriter.writeTag(...) failed","<test>\n" + INDEND + "TEST\n" + "</test>\n", xw.getXML() + assertEquals("XMLWriter.writeTag(...) failed", "<test>\n" + INDENT + "TEST\n" + "</test>\n", xw.getXML() .toString()); } + /** Test tag created and written correctly */ + public void testWriteTagWithNullAttribute() + { + String INDENT = " "; + xw = new XMLWriter(new StringBuffer()); + assertNotNull("XMLWriter could not instantiate", xw); + xw.writeTag("test", null, "TEST"); + assertEquals("XMLWriter.writeTag(...) failed", "<test>\n" + INDENT + "TEST\n" + "</test>\n", xw.getXML() + .toString()); + } + + /** Test tag created and written correctly with attribute */ + public void testWriteTagWithAttribute() + { + String INDENT = " "; + xw = new XMLWriter(new StringBuffer()); + assertNotNull("XMLWriter could not instantiate", xw); + HashMap<String, String> attr = new HashMap<String, String>(); + attr.put("id", "1"); + + xw.writeTag("test", attr, "TEST"); + assertEquals("XMLWriter.writeTag(...) failed", "<test id=\"1\">\n" + INDENT + "TEST\n" + "</test>\n", xw.getXML() + .toString()); + } + + /** Test open tag with an empty attribute map. Just creates an open tag */ public void testWriteOpenTag() { xw = new XMLWriter(new StringBuffer()); assertNotNull(xw); HashMap<String, String> attr = new HashMap<String, String>(); xw.writeOpenTag("test", attr); - assertEquals("XMLWriter.writeOpenTag(...) failed","<test>\n", xw.getXML().toString()); + assertEquals("XMLWriter.writeOpenTag(...) failed", "<test>\n", xw.getXML().toString()); + } + + /** Test open tag with a null attribute map. Just creates an open tag */ + public void testNullAtrributeOnTag() + { + xw = new XMLWriter(new StringBuffer()); + assertNotNull(xw); + xw.writeOpenTag("test", null); + assertEquals("XMLWriter.writeOpenTag(...) failed", "<test>\n", xw.getXML().toString()); + } + + /** Test that setting an attribute value on the tag is correctly outputted. */ + public void testAtrributeOnTag() + { + xw = new XMLWriter(new StringBuffer()); + assertNotNull(xw); + HashMap<String, String> attr = new HashMap<String, String>(); + attr.put("id", "1"); xw.writeOpenTag("test1", attr); - assertEquals("XMLWriter.writeOpenTag(...) failed","<test>\n" + "<test1 id=\"1\">\n", xw.getXML().toString()); + assertEquals("XMLWriter.writeOpenTag(...) failed", "<test1 id=\"1\">\n", xw.getXML().toString()); } + /** Test Close Tag is correctly written */ public void testWriteCloseTag() { xw = new XMLWriter(new StringBuffer()); |