From a01d6077ffa148f89149f5a6573edb0260e53a0f Mon Sep 17 00:00:00 2001 From: Nguyen Van Nghi Date: Fri, 27 Feb 2015 10:01:39 +0700 Subject: [PATCH 01/16] format the xml --- pom.xml | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/pom.xml b/pom.xml index 82df624..2e9a853 100644 --- a/pom.xml +++ b/pom.xml @@ -1,31 +1,31 @@ - - 4.0.0 + + 4.0.0 co.uk.bugtrap JMeterWebSocketSampler 1.0.2-SNAPSHOT jar - JMeterWebSocketSampler http://maven.apache.org - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - - UTF-8 + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + + + + UTF-8 - junit From 1d4adf2de8fc1efc1822f12966e04f19a9d3f2c9 Mon Sep 17 00:00:00 2001 From: Nguyen Van Nghi Date: Fri, 27 Feb 2015 10:03:14 +0700 Subject: [PATCH 02/16] use maven-shade-plugin to embed depedencies --- pom.xml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/pom.xml b/pom.xml index 2e9a853..dd34d83 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,43 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs 1.7 + + + org.apache.maven.plugins + maven-shade-plugin + 2.0 + + + target/${project.name}-dist-${project.version}.jar + + + + package + + shade + + + + From b72332094dc414e0480d8d259f556c418b60bd9b Mon Sep 17 00:00:00 2001 From: Nguyen Van Nghi Date: Fri, 27 Feb 2015 10:05:05 +0700 Subject: [PATCH 03/16] use maven-shade-plugin to embed depedencies, add provided to ignore the dependecies --- pom.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dd34d83..95782a8 100644 --- a/pom.xml +++ b/pom.xml @@ -68,7 +68,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs junit junit 3.8.1 - test + + provided org.eclipse.jetty.websocket @@ -80,16 +81,19 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs org.apache.jmeter ApacheJMeter 2.10 + provided org.apache.jmeter ApacheJMeter_core 2.10 + provided org.apache.jmeter ApacheJMeter_http 2.10 + provided From 6c05967dcca833a465e30085b4b801226d0da7b5 Mon Sep 17 00:00:00 2001 From: Nguyen Van Nghi Date: Fri, 27 Feb 2015 10:06:29 +0700 Subject: [PATCH 04/16] use org.eclipse.jetty.websocket 9.2.7.v20150116 to avoid memory leak --- pom.xml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 95782a8..206ae32 100644 --- a/pom.xml +++ b/pom.xml @@ -74,25 +74,29 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs org.eclipse.jetty.websocket websocket-client - 9.1.1.v20140108 + 9.2.7.v20150116 hybrid + jar org.apache.jmeter ApacheJMeter - 2.10 + 2.12 + jar provided org.apache.jmeter ApacheJMeter_core - 2.10 + 2.12 + jar provided org.apache.jmeter ApacheJMeter_http - 2.10 + 2.12 + jar provided From 3b8de2a489e2811827eec053ef1fb8715c234012 Mon Sep 17 00:00:00 2001 From: Nguyen Van Nghi Date: Fri, 27 Feb 2015 10:23:42 +0700 Subject: [PATCH 05/16] how to build --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 9ea4d13..2a83ffa 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,7 @@ JMeter - WebSocket Sampler Compiled binary can be downloaded from the Releases. Please have a look at the Wiki pages for instructions on how to install the plug-in. + +How to build +====== +mvn clean install \ No newline at end of file From 30f9004c2756f5049ca0fc00e543a29953d3c9c8 Mon Sep 17 00:00:00 2001 From: elyran Date: Wed, 23 Dec 2015 11:48:18 +0200 Subject: [PATCH 06/16] fix exception: java.util.LinkedList$ListItr.checkForComodification(Unknown Source) java.util.LinkedList$ListItr.next(Unknown Source) JMeter.plugins.functional.samplers.websocket.ServiceSocket.getResponseMessage(ServiceSocket.java:149) JMeter.plugins.functional.samplers.websocket.WebSocketSampler.sample(WebSocketSampler.java:159) org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:434) org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261) java.lang.Thread.run(Unknown Source) --- .../functional/samplers/websocket/ServiceSocket.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java index fcad059..1fc5692 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java @@ -6,8 +6,7 @@ import java.io.IOException; import java.util.Deque; -import java.util.Iterator; -import java.util.LinkedList; +import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -37,7 +36,7 @@ public class ServiceSocket { protected final WebSocketSampler parent; protected WebSocketClient client; private static final Logger log = LoggingManager.getLoggerForClass(); - protected Deque responeBacklog = new LinkedList(); + protected Deque responeBacklog = new ConcurrentLinkedDeque<>(); protected Integer error = 0; protected StringBuffer logMessage = new StringBuffer(); protected CountDownLatch openLatch = new CountDownLatch(1); @@ -144,9 +143,8 @@ public String getResponseMessage() { String responseMessage = ""; //Iterate through response messages saved in the responeBacklog cache - Iterator iterator = responeBacklog.iterator(); - while (iterator.hasNext()) { - responseMessage += iterator.next(); + for (String aResponeBacklog : responeBacklog) { + responseMessage += aResponeBacklog; } return responseMessage; From e4e02202d6e6c153523f31a477ea8e1bf2fbe29a Mon Sep 17 00:00:00 2001 From: elyran Date: Wed, 23 Dec 2015 15:54:47 +0200 Subject: [PATCH 07/16] fix issue: Response pattern not working with streaming connection #19 --- .../functional/samplers/websocket/ServiceSocket.java | 6 +++++- .../functional/samplers/websocket/WebSocketSampler.java | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java index 1fc5692..21ad713 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java @@ -259,13 +259,17 @@ public boolean isConnected() { return connected; } - public void initialize() { + public void initialize(WebSocketSampler sampler) { logMessage = new StringBuffer(); logMessage.append("\n\n[Execution Flow]\n"); logMessage.append(" - Reusing exising connection\n"); error = 0; this.closeLatch = new CountDownLatch(1); + + this.responsePattern = new CompoundVariable(sampler.getResponsePattern()).execute(); + this.disconnectPattern = new CompoundVariable(sampler.getCloseConncectionPattern()).execute(); + initializePatterns(); } private void addResponseMessage(String message) { diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java index 2747394..a319bcd 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java @@ -71,7 +71,7 @@ private ServiceSocket getConnectionSocket() throws URISyntaxException, Exception if (isStreamingConnection() && connectionList.containsKey(connectionId)) { ServiceSocket socket = connectionList.get(connectionId); - socket.initialize(); + socket.initialize(this); return socket; } From bcaedc9220d0943f95799c128da1fde0d7850443 Mon Sep 17 00:00:00 2001 From: elyran Date: Thu, 24 Dec 2015 10:22:25 +0200 Subject: [PATCH 08/16] on streaming connection - update the sampler on the socket to get all sampler configuration i.e - message backlog --- .../samplers/websocket/ServiceSocket.java | 110 +++++++++--------- 1 file changed, 54 insertions(+), 56 deletions(-) diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java index 21ad713..ea50a48 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java @@ -12,6 +12,7 @@ import org.apache.log.Logger; +import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; import org.apache.jmeter.engine.util.CompoundVariable; @@ -33,7 +34,7 @@ @WebSocket(maxTextMessageSize = 256 * 1024 * 1024) public class ServiceSocket { - protected final WebSocketSampler parent; + protected WebSocketSampler parent; protected WebSocketClient client; private static final Logger log = LoggingManager.getLoggerForClass(); protected Deque responeBacklog = new ConcurrentLinkedDeque<>(); @@ -44,7 +45,7 @@ public class ServiceSocket { protected Session session = null; protected String responsePattern; protected String disconnectPattern; - protected int messageCounter = 1; + protected AtomicInteger messageCounter = new AtomicInteger(1); protected Pattern responseExpression; protected Pattern disconnectExpression; protected boolean connected = false; @@ -52,7 +53,7 @@ public class ServiceSocket { public ServiceSocket(WebSocketSampler parent, WebSocketClient client) { this.parent = parent; this.client = client; - + //Evaluate response matching patterns in case thay contain JMeter variables (i.e. ${var}) responsePattern = new CompoundVariable(parent.getResponsePattern()).execute(); disconnectPattern = new CompoundVariable(parent.getCloseConncectionPattern()).execute(); @@ -63,52 +64,48 @@ public ServiceSocket(WebSocketSampler parent, WebSocketClient client) { @OnWebSocketMessage public void onMessage(String msg) { - synchronized (parent) { - log.debug("Received message: " + msg); - String length = " (" + msg.length() + " bytes)"; - logMessage.append(" - Received message #").append(messageCounter).append(length); - addResponseMessage("[Message " + (messageCounter++) + "]\n" + msg + "\n\n"); - - if (responseExpression == null || responseExpression.matcher(msg).find()) { - logMessage.append("; matched response pattern").append("\n"); - closeLatch.countDown(); - } else if (!disconnectPattern.isEmpty() && disconnectExpression.matcher(msg).find()) { - logMessage.append("; matched connection close pattern").append("\n"); - closeLatch.countDown(); - close(StatusCode.NORMAL, "JMeter closed session."); - } else { - logMessage.append("; didn't match any pattern").append("\n"); - } + log.debug("Received message: " + msg); + String length = " (" + msg.length() + " bytes)"; + logMessage.append(" - Received message #").append(messageCounter.get()).append(length); + addResponseMessage("[Message " + (messageCounter.getAndIncrement()) + "]\n" + msg + "\n\n"); + + if (responseExpression == null || responseExpression.matcher(msg).find()) { + logMessage.append("; matched response pattern").append("\n"); + closeLatch.countDown(); + } else if (!disconnectPattern.isEmpty() && disconnectExpression.matcher(msg).find()) { + logMessage.append("; matched connection close pattern").append("\n"); + closeLatch.countDown(); + close(StatusCode.NORMAL, "JMeter closed session."); + } else { + logMessage.append("; didn't match any pattern").append("\n"); + } + } + + @OnWebSocketFrame + public void onFrame(Frame frame) { + log.debug("Received frame: " + frame.getPayload() + " " + + frame.getType().name()); + String length = " (" + frame.getPayloadLength() + " bytes)"; + logMessage.append(" - Received frame #").append(messageCounter.get()) + .append(length); + String frameTxt = new String(frame.getPayload().array()); + addResponseMessage("[Frame " + (messageCounter.getAndIncrement()) + "]\n" + + frameTxt + "\n\n"); + + if (responseExpression == null + || responseExpression.matcher(frameTxt).find()) { + logMessage.append("; matched response pattern").append("\n"); + closeLatch.countDown(); + } else if (!disconnectPattern.isEmpty() + && disconnectExpression.matcher(frameTxt).find()) { + logMessage.append("; matched connection close pattern").append( + "\n"); + closeLatch.countDown(); + close(StatusCode.NORMAL, "JMeter closed session."); + } else { + logMessage.append("; didn't match any pattern").append("\n"); } } - - @OnWebSocketFrame - public void onFrame(Frame frame) { - synchronized (parent) { - log.debug("Received frame: " + frame.getPayload() + " " - + frame.getType().name()); - String length = " (" + frame.getPayloadLength() + " bytes)"; - logMessage.append(" - Received frame #").append(messageCounter) - .append(length); - String frameTxt = new String(frame.getPayload().array()); - addResponseMessage("[Frame " + (messageCounter++) + "]\n" - + frameTxt + "\n\n"); - - if (responseExpression == null - || responseExpression.matcher(frameTxt).find()) { - logMessage.append("; matched response pattern").append("\n"); - closeLatch.countDown(); - } else if (!disconnectPattern.isEmpty() - && disconnectExpression.matcher(frameTxt).find()) { - logMessage.append("; matched connection close pattern").append( - "\n"); - closeLatch.countDown(); - close(StatusCode.NORMAL, "JMeter closed session."); - } else { - logMessage.append("; didn't match any pattern").append("\n"); - } - } - } @OnWebSocketConnect public void onOpen(Session session) { @@ -129,7 +126,7 @@ public void onClose(int statusCode, String reason) { logMessage.append(" - WebSocket conection has been successfully closed by the server").append("\n"); log.debug("Disconnect " + statusCode + ": " + reason); } - + //Notify connection opening and closing latches of the closed connection openLatch.countDown(); closeLatch.countDown(); @@ -141,7 +138,7 @@ public void onClose(int statusCode, String reason) { */ public String getResponseMessage() { String responseMessage = ""; - + //Iterate through response messages saved in the responeBacklog cache for (String aResponeBacklog : responeBacklog) { responseMessage += aResponeBacklog; @@ -199,8 +196,8 @@ public void close(int statusCode, String statusText) { } else { logMessage.append(" - WebSocket session wasn't started (...that's odd)").append("\n"); } - - + + //Stoping WebSocket client; thanks m0ro try { client.stop(); @@ -222,7 +219,7 @@ public Integer getError() { */ public String getLogMessage() { logMessage.append("\n\n[Variables]\n"); - logMessage.append(" - Message count: ").append(messageCounter - 1).append("\n"); + logMessage.append(" - Message count: ").append(messageCounter.get() - 1).append("\n"); return logMessage.toString(); } @@ -259,16 +256,17 @@ public boolean isConnected() { return connected; } - public void initialize(WebSocketSampler sampler) { + public void initialize(WebSocketSampler parent) { logMessage = new StringBuffer(); logMessage.append("\n\n[Execution Flow]\n"); logMessage.append(" - Reusing exising connection\n"); error = 0; this.closeLatch = new CountDownLatch(1); - - this.responsePattern = new CompoundVariable(sampler.getResponsePattern()).execute(); - this.disconnectPattern = new CompoundVariable(sampler.getCloseConncectionPattern()).execute(); + //update the parent - used for streaming connection when using the same connection but updating all other definitions of the sampler + this.parent = parent; + this.responsePattern = new CompoundVariable(parent.getResponsePattern()).execute(); + this.disconnectPattern = new CompoundVariable(parent.getCloseConncectionPattern()).execute(); initializePatterns(); } From c784e3230935cd14543a6faf626efa3974cf138f Mon Sep 17 00:00:00 2001 From: elyran Date: Wed, 30 Dec 2015 09:17:35 +0200 Subject: [PATCH 09/16] remove duplicate data - all messages data appear also on frame - there is no need to handle the same data twice --- .../samplers/websocket/ServiceSocket.java | 25 ++++--------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java index ea50a48..3d411b3 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java @@ -5,6 +5,8 @@ package JMeter.plugins.functional.samplers.websocket; import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Deque; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.CountDownLatch; @@ -34,6 +36,8 @@ @WebSocket(maxTextMessageSize = 256 * 1024 * 1024) public class ServiceSocket { + private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + protected WebSocketSampler parent; protected WebSocketClient client; private static final Logger log = LoggingManager.getLoggerForClass(); @@ -62,25 +66,6 @@ public ServiceSocket(WebSocketSampler parent, WebSocketClient client) { initializePatterns(); } - @OnWebSocketMessage - public void onMessage(String msg) { - log.debug("Received message: " + msg); - String length = " (" + msg.length() + " bytes)"; - logMessage.append(" - Received message #").append(messageCounter.get()).append(length); - addResponseMessage("[Message " + (messageCounter.getAndIncrement()) + "]\n" + msg + "\n\n"); - - if (responseExpression == null || responseExpression.matcher(msg).find()) { - logMessage.append("; matched response pattern").append("\n"); - closeLatch.countDown(); - } else if (!disconnectPattern.isEmpty() && disconnectExpression.matcher(msg).find()) { - logMessage.append("; matched connection close pattern").append("\n"); - closeLatch.countDown(); - close(StatusCode.NORMAL, "JMeter closed session."); - } else { - logMessage.append("; didn't match any pattern").append("\n"); - } - } - @OnWebSocketFrame public void onFrame(Frame frame) { log.debug("Received frame: " + frame.getPayload() + " " @@ -89,7 +74,7 @@ public void onFrame(Frame frame) { logMessage.append(" - Received frame #").append(messageCounter.get()) .append(length); String frameTxt = new String(frame.getPayload().array()); - addResponseMessage("[Frame " + (messageCounter.getAndIncrement()) + "]\n" + addResponseMessage("[Frame " + (messageCounter.getAndIncrement()) + ", Time: " + DATE_FORMAT.format(new Date()) + "]\n" + frameTxt + "\n\n"); if (responseExpression == null From 3ae471a85a168cc414ee8f1d7a7224f1c6ab537e Mon Sep 17 00:00:00 2001 From: elyran Date: Wed, 30 Dec 2015 09:28:28 +0200 Subject: [PATCH 10/16] update pom version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7773b9c..15133a2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ co.uk.bugtrap JMeterWebSocketSampler - 1.0.2-SNAPSHOT + 1.1.0-SNAPSHOT jar JMeterWebSocketSampler From dd8f5483e48364878b54c5adb5198af9556a479c Mon Sep 17 00:00:00 2001 From: elyran Date: Wed, 30 Dec 2015 11:32:06 +0200 Subject: [PATCH 11/16] streaming connection - repeating exception when socket is closed #1 --- .../functional/samplers/websocket/WebSocketSampler.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java index a319bcd..da1b31b 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/WebSocketSampler.java @@ -71,8 +71,10 @@ private ServiceSocket getConnectionSocket() throws URISyntaxException, Exception if (isStreamingConnection() && connectionList.containsKey(connectionId)) { ServiceSocket socket = connectionList.get(connectionId); - socket.initialize(this); - return socket; + if (socket.getSession() != null && socket.getSession().isOpen()) { + socket.initialize(this); + return socket; + } } //Create WebSocket client From e096d4b3d34a5c5461e9f140db72d995c1de8e66 Mon Sep 17 00:00:00 2001 From: elyran Date: Sun, 3 Jan 2016 10:26:46 +0200 Subject: [PATCH 12/16] some requests are blocked for 10 or 20 seconds fixed by sending requests async --- .../plugins/functional/samplers/websocket/ServiceSocket.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java index 3d411b3..2f78776 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java @@ -94,7 +94,7 @@ public void onFrame(Frame frame) { @OnWebSocketConnect public void onOpen(Session session) { - logMessage.append(" - WebSocket conection has been opened").append("\n"); + logMessage.append(" - WebSocket connection has been opened on ").append(session.getUpgradeRequest().getRequestURI().toString()).append("\n"); log.debug("Connect " + session.isOpen()); this.session = session; connected = true; @@ -166,7 +166,7 @@ public Session getSession() { } public void sendMessage(String message) throws IOException { - session.getRemote().sendString(message); + session.getRemote().sendStringByFuture(message); } public void close() { From 6cc6ede153afe1205fd6b4ef86a29e830f86f60c Mon Sep 17 00:00:00 2001 From: elyran Date: Mon, 4 Jan 2016 13:01:45 +0200 Subject: [PATCH 13/16] Merge branch 'master' of https://github.com/nghinv/JMeter-WebSocketSampler into nghinv-master --- pom.xml | 178 ++++++++++++++++++++++++++------------------------------ 1 file changed, 81 insertions(+), 97 deletions(-) diff --git a/pom.xml b/pom.xml index 206ae32..55d34ce 100644 --- a/pom.xml +++ b/pom.xml @@ -1,103 +1,87 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - 4.0.0 - co.uk.bugtrap - JMeterWebSocketSampler - 1.0.2-SNAPSHOT - jar - JMeterWebSocketSampler - http://maven.apache.org - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - org.apache.maven.plugins - maven-shade-plugin - 2.0 - - - target/${project.name}-dist-${project.version}.jar - - - - package - - shade - - - - - - - - - UTF-8 - - - - junit - junit - 3.8.1 - - provided - - - org.eclipse.jetty.websocket - websocket-client - 9.2.7.v20150116 + + + junit + junit + 3.8.1 + + provided + + + org.eclipse.jetty.websocket + websocket-client + 9.1.1.v20140108 hybrid - jar - - - org.apache.jmeter - ApacheJMeter - 2.12 - jar - provided - - - org.apache.jmeter - ApacheJMeter_core - 2.12 - jar - provided - - - org.apache.jmeter - ApacheJMeter_http - 2.12 - jar - provided - - + jar + + + org.apache.jmeter + ApacheJMeter + 2.10 + jar + provided + + + org.apache.jmeter + ApacheJMeter_core + 2.10 + jar + provided + + + org.apache.jmeter + ApacheJMeter_http + 2.10 + jar + provided + + From 09ee14bcec59cc92ad237e5c481e8799d0b683c2 Mon Sep 17 00:00:00 2001 From: elyran Date: Mon, 4 Jan 2016 16:13:50 +0200 Subject: [PATCH 14/16] update jetty version --- pom.xml | 67 ++++++++++++++++--- .../samplers/websocket/ServiceSocket.java | 27 +++----- 2 files changed, 67 insertions(+), 27 deletions(-) diff --git a/pom.xml b/pom.xml index 55d34ce..512a8af 100644 --- a/pom.xml +++ b/pom.xml @@ -10,6 +10,11 @@ JMeterWebSocketSampler http://maven.apache.org + + UTF-8 + 9.2.9.v20150224 + 2.13 + @@ -20,8 +25,8 @@ 1.7 1.7 - **\JMeter\plugins\controler\websocketapp\** - + **\JMeter\plugins\controler\websocketapp\** + @@ -43,9 +48,6 @@ - - UTF-8 - @@ -58,30 +60,75 @@ org.eclipse.jetty.websocket websocket-client - 9.1.1.v20140108 - hybrid + ${jetty.version} + hybrid jar org.apache.jmeter ApacheJMeter - 2.10 + ${jMeter.version} jar provided + + + + commons-math3 + commons-math3 + + + commons-pool2 + commons-pool2 + + + d-haven-managed-pool + d-haven-managed-pool + + org.apache.jmeter ApacheJMeter_core - 2.10 + ${jMeter.version} jar provided + + + + commons-math3 + commons-math3 + + + commons-pool2 + commons-pool2 + + + d-haven-managed-pool + d-haven-managed-pool + + org.apache.jmeter ApacheJMeter_http - 2.10 + ${jMeter.version} jar provided + + + + commons-math3 + commons-math3 + + + d-haven-managed-pool + d-haven-managed-pool + + + commons-pool2 + commons-pool2 + + diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java index 2f78776..466fdca 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java @@ -66,25 +66,18 @@ public ServiceSocket(WebSocketSampler parent, WebSocketClient client) { initializePatterns(); } - @OnWebSocketFrame - public void onFrame(Frame frame) { - log.debug("Received frame: " + frame.getPayload() + " " - + frame.getType().name()); - String length = " (" + frame.getPayloadLength() + " bytes)"; - logMessage.append(" - Received frame #").append(messageCounter.get()) - .append(length); - String frameTxt = new String(frame.getPayload().array()); - addResponseMessage("[Frame " + (messageCounter.getAndIncrement()) + ", Time: " + DATE_FORMAT.format(new Date()) + "]\n" - + frameTxt + "\n\n"); - - if (responseExpression == null - || responseExpression.matcher(frameTxt).find()) { + @OnWebSocketMessage + public void onMessage(String msg) { +// log.info("Received message: " + msg); + String length = " (" + msg.length() + " bytes)"; + logMessage.append(" - Received message #").append(messageCounter).append(length); + addResponseMessage("[Message " + messageCounter.getAndIncrement() + ", Time: " + DATE_FORMAT.format(new Date()) + "]\n" + msg + "\n\n"); + + if (responseExpression == null || responseExpression.matcher(msg).find()) { logMessage.append("; matched response pattern").append("\n"); closeLatch.countDown(); - } else if (!disconnectPattern.isEmpty() - && disconnectExpression.matcher(frameTxt).find()) { - logMessage.append("; matched connection close pattern").append( - "\n"); + } else if (!disconnectPattern.isEmpty() && disconnectExpression.matcher(msg).find()) { + logMessage.append("; matched connection close pattern").append("\n"); closeLatch.countDown(); close(StatusCode.NORMAL, "JMeter closed session."); } else { From 91fcd34f7ab4d3aa32303887137bed8bfbee9be3 Mon Sep 17 00:00:00 2001 From: elyran Date: Sun, 10 Jan 2016 11:42:26 +0200 Subject: [PATCH 15/16] update jetty version & send sync --- pom.xml | 2 +- .../samplers/websocket/ServiceSocket.java | 32 ++++++++----------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 512a8af..670eb85 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ http://maven.apache.org UTF-8 - 9.2.9.v20150224 + 9.2.14.v20151106 2.13 diff --git a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java index 466fdca..cf13503 100644 --- a/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java +++ b/src/main/java/JMeter/plugins/functional/samplers/websocket/ServiceSocket.java @@ -4,36 +4,32 @@ */ package JMeter.plugins.functional.samplers.websocket; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Deque; -import java.util.concurrent.ConcurrentLinkedDeque; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import org.apache.log.Logger; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.regex.Pattern; - import org.apache.jmeter.engine.util.CompoundVariable; import org.apache.jorphan.logging.LoggingManager; +import org.apache.log.Logger; +import org.eclipse.jetty.websocket.api.BatchMode; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.StatusCode; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; -import org.eclipse.jetty.websocket.api.annotations.OnWebSocketFrame; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; -import org.eclipse.jetty.websocket.api.extensions.Frame; import org.eclipse.jetty.websocket.client.WebSocketClient; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Deque; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Pattern; + /** - * * @author Maciej Zaleski */ -@WebSocket(maxTextMessageSize = 256 * 1024 * 1024) +@WebSocket(batchMode = BatchMode.OFF, maxTextMessageSize = 256 * 1024 * 1024) public class ServiceSocket { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); @@ -159,7 +155,7 @@ public Session getSession() { } public void sendMessage(String message) throws IOException { - session.getRemote().sendStringByFuture(message); + session.getRemote().sendString(message); } public void close() { From 84e7f3a54bb5687915dac5c581b1a5a5327930f9 Mon Sep 17 00:00:00 2001 From: elyran Date: Mon, 11 Jan 2016 17:35:55 +0200 Subject: [PATCH 16/16] add scm tags to enable release to maven --- pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pom.xml b/pom.xml index 670eb85..0a258e2 100644 --- a/pom.xml +++ b/pom.xml @@ -15,8 +15,20 @@ 9.2.14.v20151106 2.13 + + + scm:git:https://github.com/elyrank/JMeter-WebSocketSampler.git + scm:git:https://github.com/elyrank/JMeter-WebSocketSampler.git + scm:git:https://github.com/elyrank/JMeter-WebSocketSampler.git + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.1 + org.apache.maven.plugins maven-compiler-plugin