You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2017/11/19 10:00:27 UTC

svn commit: r1815716 - in /jmeter/trunk: bin/testfiles/JMS_TESTS.csv bin/testfiles/JMS_TESTS.jmx bin/testfiles/JMS_TESTS.xml src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java

Author: pmouawad
Date: Sun Nov 19 10:00:27 2017
New Revision: 1815716

URL: http://svn.apache.org/viewvc?rev=1815716&view=rev
Log:
Bug 61544 - JMS Point-to-Point Sampler: Enhance communication styles with read, browse, clear
Fix test : Increase timeout that was set to 1ms which led to random failure
Improve class code (logging, variable naming, use StringBuilder)
Bugzilla Id: 61544

Modified:
    jmeter/trunk/bin/testfiles/JMS_TESTS.csv
    jmeter/trunk/bin/testfiles/JMS_TESTS.jmx
    jmeter/trunk/bin/testfiles/JMS_TESTS.xml
    jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java

Modified: jmeter/trunk/bin/testfiles/JMS_TESTS.csv
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/JMS_TESTS.csv?rev=1815716&r1=1815715&r2=1815716&view=diff
==============================================================================
--- jmeter/trunk/bin/testfiles/JMS_TESTS.csv (original)
+++ jmeter/trunk/bin/testfiles/JMS_TESTS.csv Sun Nov 19 10:00:27 2017
@@ -12,7 +12,7 @@ JMS-P2P-RequestOnly,200,OK,TG-JMS-P2P 1-
 JMS-P2P-Browse,200,1 messages available on the queue,TG-JMS-P2P 1-1,text,true,1,1,1,0
 JMS-P2P-Read,200,1 message(s) received successfully,TG-JMS-P2P 1-1,text,true,1,1,1,0
 JMS-P2P-RequestOnlyForClear,200,OK,TG-JMS-P2P 1-1,text,true,1,1,1,0
-JMS-P2P-Clear,200,1 message(s) removed,TG-JMS-P2P 1-1,text,true,1,1,1,0
+JMS-P2P-Clear,200,1 message(s) removed using receive timeout:100ms,TG-JMS-P2P 1-1,text,true,1,1,1,0
 JMS-P2P-BrowseAfterClear,200,0 messages available on the queue,TG-JMS-P2P 1-1,text,true,1,1,1,0
 JMS Publisher-NonDurable,200,1 messages published,TG-JMS-PS 2-1,,true,1,1,1,0
 JMS Subscriber-NonDurable,200,1 message(s) received successfully of 1 expected,TG-JMS-PS 2-1,text,true,1,1,1,0

Modified: jmeter/trunk/bin/testfiles/JMS_TESTS.jmx
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/JMS_TESTS.jmx?rev=1815716&r1=1815715&r2=1815716&view=diff
==============================================================================
--- jmeter/trunk/bin/testfiles/JMS_TESTS.jmx (original)
+++ jmeter/trunk/bin/testfiles/JMS_TESTS.jmx Sun Nov 19 10:00:27 2017
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<jmeterTestPlan version="1.2" properties="3.4" jmeter="3.4-SNAPSHOT.20171118">
+<jmeterTestPlan version="1.2" properties="3.4" jmeter="3.4-SNAPSHOT.20171119">
   <hashTree>
     <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
       <stringProp name="TestPlan.comments"></stringProp>
@@ -508,11 +508,6 @@ finally {
           <intProp name="JMSSampler.communicationStyle">3</intProp>
         </JMSSampler>
         <hashTree>
-          <UniformRandomTimer guiclass="UniformRandomTimerGui" testclass="UniformRandomTimer" testname="Pause" enabled="true">
-            <stringProp name="ConstantTimer.delay">1000</stringProp>
-            <stringProp name="RandomTimer.range">100</stringProp>
-          </UniformRandomTimer>
-          <hashTree/>
           <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true">
             <collectionProp name="Asserion.test_strings">
               <stringProp name="-1029016402">requestQueue5 has 1 messages</stringProp>
@@ -607,7 +602,7 @@ finally {
           <stringProp name="JMSSampler.ReceiveQueue"></stringProp>
           <boolProp name="JMSSampler.isNonPersistent">false</boolProp>
           <boolProp name="JMSSampler.useReqMsgIdAsCorrelId">false</boolProp>
-          <stringProp name="JMSSampler.timeout">1</stringProp>
+          <stringProp name="JMSSampler.timeout">100</stringProp>
           <stringProp name="HTTPSamper.xml_data"></stringProp>
           <stringProp name="JMSSampler.initialContextFactory">org.apache.activemq.jndi.ActiveMQInitialContextFactory</stringProp>
           <stringProp name="JMSSampler.contextProviderUrl">tcp://localhost:61616</stringProp>

Modified: jmeter/trunk/bin/testfiles/JMS_TESTS.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/testfiles/JMS_TESTS.xml?rev=1815716&r1=1815715&r2=1815716&view=diff
==============================================================================
--- jmeter/trunk/bin/testfiles/JMS_TESTS.xml (original)
+++ jmeter/trunk/bin/testfiles/JMS_TESTS.xml Sun Nov 19 10:00:27 2017
@@ -85,7 +85,7 @@
     <error>false</error>
   </assertionResult>
 </sample>
-<sample s="true" lb="JMS-P2P-Clear" rc="200" rm="1 message(s) removed" tn="TG-JMS-P2P 1-1" dt="text" sc="1" ec="0" ng="1" na="1">
+<sample s="true" lb="JMS-P2P-Clear" rc="200" rm="1 message(s) removed using receive timeout:100ms" tn="TG-JMS-P2P 1-1" dt="text" sc="1" ec="0" ng="1" na="1">
   <assertionResult>
     <name>Response Assertion</name>
     <failure>false</failure>

Modified: jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java?rev=1815716&r1=1815715&r2=1815716&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java (original)
+++ jmeter/trunk/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java Sun Nov 19 10:00:27 2017
@@ -18,6 +18,7 @@
 
 package org.apache.jmeter.protocol.jms.sampler;
 
+import java.nio.charset.StandardCharsets;
 import java.util.Date;
 import java.util.Enumeration;
 import java.util.Hashtable;
@@ -65,14 +66,17 @@ import org.slf4j.LoggerFactory;
  */
 public class JMSSampler extends AbstractSampler implements ThreadListener {
 
+    private static final long serialVersionUID = 233L;
+
     private static final Logger LOGGER = LoggerFactory.getLogger(JMSSampler.class);
 
-    private static final long serialVersionUID = 233L;
+    private static final String PREV_SAMPLER = "__PREV_SAMPLER__";
 
     private static final int DEFAULT_TIMEOUT = 2000;
+
     private static final String DEFAULT_TIMEOUT_STRING = Integer.toString(DEFAULT_TIMEOUT);
 
-    // ++ These are JMX names, and must not be changed
+    // These are JMX names, and must not be changed
     private static final String JNDI_INITIAL_CONTEXT_FACTORY = "JMSSampler.initialContextFactory"; // $NON-NLS-1$
 
     private static final String JNDI_CONTEXT_PROVIDER_URL = "JMSSampler.contextProviderUrl"; // $NON-NLS-1$
@@ -93,7 +97,7 @@ public class JMSSampler extends Abstract
      * @deprecated since 4.0 replaced by JMS_COMMUNICATION_STYLE
      */
     @Deprecated
-    public static final String IS_ONE_WAY = "JMSSampler.isFireAndForget"; // $NON-NLS-1$
+    public static final String IS_ONE_WAY = "JMSSampler.isFireAndForget"; // $NON-NLS-1$ // NOSONAR
     
     private static final String JMS_NUMBEROFSAMPLES = "JMSSampler.jmsNumberOfSamplesToAggregate"; // $NON-NLS-1$
 
@@ -178,7 +182,7 @@ public class JMSSampler extends Abstract
      */
     @Override
     public SampleResult sample(Entry entry) {
-        JMeterContext context = JMeterContextService.getContext();
+        JMeterContext jmeterContext = JMeterContextService.getContext();
 
         SampleResult res = new SampleResult();
         res.setSampleLabel(getName());
@@ -188,7 +192,7 @@ public class JMSSampler extends Abstract
         res.sampleStart();
 
         try {
-            LOGGER.debug("Point-to-point mode: " + getCommunicationstyle());
+            LOGGER.debug("Point-to-point mode: {}", getCommunicationstyle());
             if (isBrowse()) {
                 handleBrowse(res);
             } else if (isClearQueue()) {
@@ -196,7 +200,7 @@ public class JMSSampler extends Abstract
             } else if (isOneway()) {
                 handleOneWay(res);
             } else if (isRead()) {
-                handleRead(context, res);
+                handleRead(jmeterContext, res);
             } else {
                 handleRequestResponse(res);
             }
@@ -214,7 +218,7 @@ public class JMSSampler extends Abstract
 
     private void handleBrowse(SampleResult res) throws JMSException {
         LOGGER.debug("isBrowseOnly");
-        StringBuilder sb = new StringBuilder("");
+        StringBuilder sb = new StringBuilder(75);
         res.setSuccessful(true);
         sb.append("Browse message on Send Queue ").append(sendQueue.getQueueName())
             .append(": ")
@@ -225,7 +229,7 @@ public class JMSSampler extends Abstract
 
     private void handleClearQueue(SampleResult res) throws JMSException {
         LOGGER.debug("isClearQueue");
-        StringBuilder sb = new StringBuilder("");
+        StringBuilder sb = new StringBuilder(75);
         res.setSuccessful(true);
         sb.append("Clear messages on Send Queue ").append(sendQueue.getQueueName())
                 .append(": ")
@@ -246,12 +250,12 @@ public class JMSSampler extends Abstract
 
     private void handleRead(JMeterContext context, SampleResult res) {
         LOGGER.debug("isRead");
-        StringBuilder sb = new StringBuilder("");
+        StringBuilder sb = new StringBuilder(75);
         res.setSuccessful(true);
         Sampler sampler = context.getPreviousSampler();
         SampleResult sr = context.getPreviousResult();
         String jmsSelector = getJMSSelector();
-        if (jmsSelector.equals("_PREV_SAMPLER_")
+        if (jmsSelector.equals(JMSSampler.PREV_SAMPLER)
                 && (sampler instanceof JMSSampler)) {
             jmsSelector = sr.getResponseMessage();
         }
@@ -273,7 +277,7 @@ public class JMSSampler extends Abstract
         } while ((result != null) && (sampleTries < getNumberOfSamplesToAggregateAsInt()));
 
         res.setResponseMessage(sampleCounter + " samples messages received");
-        res.setResponseData(buffer.toString().getBytes()); // TODO - charset?
+        res.setResponseData(buffer.toString(), StandardCharsets.UTF_8.name());
         res.setResponseHeaders(propBuffer.toString());
         if (sampleCounter == 0) {
             res.setResponseCode("404");
@@ -379,24 +383,32 @@ public class JMSSampler extends Abstract
 
     private String browseQueueDetails(Queue queue, SampleResult res) {
         try {
-            String messageBodies = "\n==== Browsing Messages === \n";
+            StringBuilder messageBodies = new StringBuilder(150);
+            messageBodies.append("==== Browsing Messages ===\n");
             // get some queue details
             QueueBrowser qBrowser = session.createBrowser(queue);
             // browse the messages
             Enumeration<?> e = qBrowser.getEnumeration();
             int numMsgs = 0;
             // count number of messages
-            String corrID = "";
+            String corrID;
             while (e.hasMoreElements()) {
                 TextMessage message = (TextMessage) e.nextElement();
                 corrID = message.getJMSCorrelationID();
                 if (corrID == null) {
                     corrID = message.getJMSMessageID();
-                    messageBodies = messageBodies + numMsgs + " - MessageID: " + corrID + ": " + message.getText()
-                            + "\n";
+                    messageBodies.append(numMsgs)
+                        .append(" - MessageID: ")
+                        .append(corrID)
+                        .append(": ").append(message.getText())
+                        .append("\n");
                 } else {
-                    messageBodies = messageBodies + numMsgs + " - CorrelationID: " + corrID + ": " + message.getText()
-                            + "\n";
+                    messageBodies.append(numMsgs)
+                    .append(" - CorrelationID: ")
+                    .append(corrID)
+                    .append(": ")
+                    .append(message.getText())
+                    .append("\n");
                 }
                 numMsgs++;
             }
@@ -424,7 +436,8 @@ public class JMSSampler extends Abstract
                     deletedMsg.acknowledge();
                 }
             } while (deletedMsg != null);
-            retVal = deletedMsgCount + " message(s) removed";
+            retVal = deletedMsgCount + " message(s) removed using receive timeout:"+
+                    getTimeoutAsInt()+"ms";
             res.setResponseMessage(retVal);
         } catch (Exception ex) {
             res.setResponseMessage("Error clearing queue");
@@ -694,11 +707,11 @@ public class JMSSampler extends Abstract
             table.put(me.getKey(), me.getValue());
         }
 
-        Context context = new InitialContext(table);
+        Context initialContext = new InitialContext(table);
         if (LOGGER.isDebugEnabled()) {
-            printEnvironment(context);
+            printEnvironment(initialContext);
         }
-        return context;
+        return initialContext;
     }
 
     private void printEnvironment(Context context) throws NamingException {
@@ -721,12 +734,12 @@ public class JMSSampler extends Abstract
 
     private void logThreadStart() {
         if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug("Thread started " + new Date());
-            LOGGER.debug("JMSSampler: [" + Thread.currentThread().getName() + "], hashCode=[" + hashCode() + "]");
-            LOGGER.debug("QCF: [" + getQueueConnectionFactory() + "], sendQueue=[" + getSendQueue() + "]");
-            LOGGER.debug("Timeout             = " + getTimeout() + "]");
-            LOGGER.debug("Use temporary queue =" + useTemporyQueue() + "]");
-            LOGGER.debug("Reply queue         =" + getReceiveQueue() + "]");
+            LOGGER.debug("Thread started {}", new Date());
+            LOGGER.debug("JMSSampler: [{}], hashCode=[{}]", Thread.currentThread().getName(), hashCode());
+            LOGGER.debug("QCF: [{}], sendQueue=[{}]", getQueueConnectionFactory(), getSendQueue());
+            LOGGER.debug("Timeout = [{}]", getTimeout());
+            LOGGER.debug("Use temporary queue =[{}]", useTemporyQueue());
+            LOGGER.debug("Reply queue         = [{}]", getReceiveQueue());
         }
     }