Author: pmouawad
Date: Fri Sep  8 11:55:40 2017
New Revision: 1807719

URL: http://svn.apache.org/viewvc?rev=1807719&view=rev
Log:
Bug 60156 - TCPSampler : Latency is not measured for TCP Sampler
Contributed by UbikLoadPack
Bugzilla Id: 60156

Modified:
    
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/AbstractTCPClient.java
    
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/BinaryTCPClientImpl.java
    
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/LengthPrefixedBinaryTCPClientImpl.java
    
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClient.java
    
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClientImpl.java
    
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
    jmeter/trunk/xdocs/changes.xml

Modified: 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/AbstractTCPClient.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/AbstractTCPClient.java?rev=1807719&r1=1807718&r2=1807719&view=diff
==============================================================================
--- 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/AbstractTCPClient.java
 (original)
+++ 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/AbstractTCPClient.java
 Fri Sep  8 11:55:40 2017
@@ -18,6 +18,10 @@
 
 package org.apache.jmeter.protocol.tcp.sampler;
 
+import java.io.InputStream;
+
+import org.apache.jmeter.samplers.SampleResult;
+
 /**
  * Basic implementation of TCPClient interface.
  */
@@ -76,4 +80,12 @@ public abstract class AbstractTCPClient
         this.charset = charset;
     }
 
+    /**
+     * Default implementation calls {@link TCPClient#read(InputStream)} for 
backward compatibility
+     * @see 
org.apache.jmeter.protocol.tcp.sampler.TCPClient#read(java.io.InputStream, 
org.apache.jmeter.samplers.SampleResult)
+     */
+    @Override
+    public String read(InputStream is, SampleResult sampleResult) throws 
ReadException {
+        return read(is);
+    }
 }

Modified: 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/BinaryTCPClientImpl.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/BinaryTCPClientImpl.java?rev=1807719&r1=1807718&r2=1807719&view=diff
==============================================================================
--- 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/BinaryTCPClientImpl.java
 (original)
+++ 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/BinaryTCPClientImpl.java
 Fri Sep  8 11:55:40 2017
@@ -30,6 +30,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.jmeter.samplers.SampleResult;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.util.JOrphanUtils;
 import org.slf4j.Logger;
@@ -53,7 +54,7 @@ public class BinaryTCPClientImpl extends
         super();
         setEolByte(EOM_INT);
         if (useEolByte) {
-            log.info("Using eomByte=" + eolByte);
+            log.info("Using eomByte={}", eolByte);
         }
     }
 
@@ -108,6 +109,12 @@ public class BinaryTCPClientImpl extends
         throw new UnsupportedOperationException(
                 "Method not supported for Length-Prefixed data.");
     }
+    
+    @Deprecated
+    public String read(InputStream is) throws ReadException {
+        log.warn("Deprecated method, use read(is, sampleResult) instead");
+        return read(is, new SampleResult());
+    }
 
     /**
      * Reads data until the defined EOM byte is reached.
@@ -118,12 +125,17 @@ public class BinaryTCPClientImpl extends
      * @throws ReadException when reading fails
      */
     @Override
-    public String read(InputStream is) throws ReadException {
+    public String read(InputStream is, SampleResult sampleResult) throws 
ReadException {
         ByteArrayOutputStream w = new ByteArrayOutputStream();
         try {
             byte[] buffer = new byte[4096];
             int x = 0;
+            boolean first = true;
             while ((x = is.read(buffer)) > -1) {
+                if (first) {
+                    sampleResult.latencyEnd();
+                    first = false;
+                }
                 w.write(buffer, 0, x);
                 if (useEolByte && (buffer[x - 1] == eolByte)) {
                     break;

Modified: 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/LengthPrefixedBinaryTCPClientImpl.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/LengthPrefixedBinaryTCPClientImpl.java?rev=1807719&r1=1807718&r2=1807719&view=diff
==============================================================================
--- 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/LengthPrefixedBinaryTCPClientImpl.java
 (original)
+++ 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/LengthPrefixedBinaryTCPClientImpl.java
 Fri Sep  8 11:55:40 2017
@@ -32,6 +32,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
+import org.apache.jmeter.samplers.SampleResult;
 import org.apache.jmeter.util.JMeterUtils;
 import org.apache.jorphan.util.JOrphanUtils;
 import org.slf4j.Logger;
@@ -72,21 +73,28 @@ public class LengthPrefixedBinaryTCPClie
         this.tcpClient.write(os, is);
     }
 
+    @Deprecated
+    public String read(InputStream is) throws ReadException {
+        log.warn("Deprecated method, use read(is, sampleResult) instead");
+        return read(is, new SampleResult());
+    }
+    
     /**
      * {@inheritDoc}
      */
     @Override
-    public String read(InputStream is) throws ReadException{
+    public String read(InputStream is, SampleResult sampleResult) throws 
ReadException{
         byte[] msg = new byte[0];
         int msgLen = 0;
         byte[] lengthBuffer = new byte[lengthPrefixLen];
         try {
             if (is.read(lengthBuffer, 0, lengthPrefixLen) == lengthPrefixLen) {
+                sampleResult.latencyEnd();
                 msgLen = byteArrayToInt(lengthBuffer);
                 msg = new byte[msgLen];
                 int bytes = JOrphanUtils.read(is, msg, 0, msgLen);
                 if (bytes < msgLen) {
-                    log.warn("Incomplete message read, expected: "+msgLen+" 
got: "+bytes);
+                    log.warn("Incomplete message read, expected: {} got: {}", 
msgLen, bytes);
                 }
             }
     

Modified: 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClient.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClient.java?rev=1807719&r1=1807718&r2=1807719&view=diff
==============================================================================
--- 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClient.java
 (original)
+++ 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClient.java
 Fri Sep  8 11:55:40 2017
@@ -28,18 +28,20 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
+import org.apache.jmeter.samplers.SampleResult;
+
 /**
  * Interface required by TCPSampler for TCPClient implementations.
  */
 public interface TCPClient {
 
     /**
-     * Versions of JMeter after 2.3.2 invoke this method when the thread 
starts.
+     * Invoked when the thread starts.
      */
     void setupTest();
 
     /**
-     * Versions of JMeter after 2.3.2 invoke this method when the thread ends.
+     * Invoked when the thread ends
      */
     void teardownTest();
 
@@ -69,10 +71,22 @@ public interface TCPClient {
      *            InputStream for socket
      * @return String read from socket
      * @throws ReadException exception that can contain partial response 
(Response until error occurred)
+     * @deprecated since 3.3, implement {@link TCPClient#read(InputStream, 
SampleResult)} instead, will be removed in future version
      */
+    @Deprecated
     String read(InputStream is) throws ReadException;
 
     /**
+     * 
+     * @param is -
+     *            InputStream for socket
+     * @param sampleResult {@link SampleResult}
+     * @return String read from socket
+     * @throws ReadException
+     */
+    String read(InputStream is, SampleResult sampleResult) throws 
ReadException;
+
+    /**
      * Get the end-of-line/end-of-message byte.
      * @return Returns the eolByte.
      */

Modified: 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClientImpl.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClientImpl.java?rev=1807719&r1=1807718&r2=1807719&view=diff
==============================================================================
--- 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClientImpl.java
 (original)
+++ 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPClientImpl.java
 Fri Sep  8 11:55:40 2017
@@ -33,6 +33,7 @@ import java.io.OutputStream;
 import java.nio.charset.Charset;
 
 import org.apache.commons.lang3.StringUtils;
+import org.apache.jmeter.samplers.SampleResult;
 import org.apache.jmeter.util.JMeterUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,14 +56,14 @@ public class TCPClientImpl extends Abstr
         super();
         setEolByte(EOL_INT);
         if (useEolByte) {
-            log.info("Using eolByte=" + eolByte);
+            log.info("Using eolByte={}", eolByte);
         }
         setCharset(CHARSET);
         String configuredCharset = JMeterUtils.getProperty("tcp.charset");
         if(StringUtils.isEmpty(configuredCharset)) {
-            log.info("Using platform default charset:"+CHARSET);
+            log.info("Using platform default charset:{}",CHARSET);
         } else {
-            log.info("Using charset:"+configuredCharset);
+            log.info("Using charset:{}", configuredCharset);
         }
     }
 
@@ -93,18 +94,28 @@ public class TCPClientImpl extends Abstr
         }
     }
 
+    @Deprecated
+    public String read(InputStream is) throws ReadException {
+        return read(is, new SampleResult());
+    }
+    
     /**
      * Reads data until the defined EOL byte is reached.
      * If there is no EOL byte defined, then reads until
      * the end of the stream is reached.
      */
     @Override
-    public String read(InputStream is) throws ReadException{
+    public String read(InputStream is, SampleResult sampleResult) throws 
ReadException{
         ByteArrayOutputStream w = new ByteArrayOutputStream();
         try {
             byte[] buffer = new byte[4096];
             int x = 0;
+            boolean first = true;
             while ((x = is.read(buffer)) > -1) {
+                if (first) {
+                    sampleResult.latencyEnd();
+                    first = false;
+                }
                 w.write(buffer, 0, x);
                 if (useEolByte && (buffer[x - 1] == eolByte)) {
                     break;

Modified: 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java?rev=1807719&r1=1807718&r2=1807719&view=diff
==============================================================================
--- 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
 (original)
+++ 
jmeter/trunk/src/protocol/tcp/org/apache/jmeter/protocol/tcp/sampler/TCPSampler.java
 Fri Sep  8 11:55:40 2017
@@ -400,7 +400,7 @@ public class TCPSampler extends Abstract
                 // TODO handle filenames
                 res.setSamplerData(req);
                 protocolHandler.write(os, req);
-                String in = protocolHandler.read(is);
+                String in = protocolHandler.read(is, res);
                 isSuccessful = setupSampleResult(res, in, null, 
protocolHandler);
             }
         } catch (ReadException ex) {

Modified: jmeter/trunk/xdocs/changes.xml
URL: 
http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1807719&r1=1807718&r2=1807719&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Fri Sep  8 11:55:40 2017
@@ -107,6 +107,7 @@ Incorporated feed back about unclear doc
     <li>JDBC Connection Configuration : Set "Validation Query" to 
<code>empty</code> by default to use isValid method of JDBC driver</li>
     <li>JDBC Connection Configuration : Add a list for main databases 
validation queries for "Validation Query" attribute</li>
     <li>JDBC Connection Configuration : Add a list for main databases JDBC 
driver class name for "JDBC Driver class" attribute</li>
+    <li><bug>60156</bug> - TCPSampler : Latency is not measured for TCP 
Sampler. Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
 </ul>
 
 <h3>Controllers</h3>


Reply via email to