Skip to content

Commit 97da1c4

Browse files
Change websocket factory name and change the way to check status code enum in code generation
1 parent 356b81c commit 97da1c4

File tree

9 files changed

+82
-84
lines changed

9 files changed

+82
-84
lines changed

docs/guide/protocols/websocket.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,25 @@ testImplementation 'us.abstracta.jmeter:jmeter-java-dsl-websocket:2.2'
2424

2525

2626

27-
Following you can see a basic usage example of Web Socket protocol.
27+
Below you can see a basic usage example of WebSocket protocol.
2828

2929
```java
3030
import static us.abstracta.jmeter.javadsl.JmeterDsl.*;
31-
import us.abstracta.jmeter.javadsl.websocket.DslWebsocketFactory;
31+
import static us.abstracta.jmeter.javadsl.websocket.WebsocketJMeterDsl.*;
3232
import us.abstracta.jmeter.javadsl.core.TestPlanStats;
3333

3434
public class Test {
3535
public static void main(String[] args) throws Exception {
3636
TestPlanStats stats = testPlan(
3737
threadGroup(1, 1,
38-
DslWebsocketFactory.websocketConnect("wss://ws.postman-echo.com/raw"),
39-
DslWebsocketFactory.websocketWrite("Hello WebSocket!"),
40-
DslWebsocketFactory.websocketRead()
38+
websocketConnect("wss://ws.postman-echo.com/raw"),
39+
websocketWrite("Hello WebSocket!"),
40+
websocketRead()
4141
.children(
4242
responseAssertion()
4343
.equalsToStrings("Hello WebSocket!")
4444
),
45-
DslWebsocketFactory.websocketDisconnect()
45+
websocketDisconnect()
4646
)
4747
).run();
4848
}
@@ -54,15 +54,15 @@ Only `ws://` and `wss://` protocols are supported. Using any other scheme will t
5454
:::
5555

5656
::: tip
57-
You can use a non blocking read if it is necessary in the following way
57+
You can use a non-blocking read if necessary in the following way:
5858

5959
```java
60-
DslWebsocketFactory.websocketRead().waitForResponse(false)
60+
websocketRead().waitForResponse(false)
6161
```
6262

63-
In this case is not recommended to add an assertion due the response could be empty
63+
In this case, it is not recommended to add an assertion because the response could be empty.
6464
:::
6565

6666
::: warning
67-
Web Socket plugin only supports one connection for threads at a time. If you want to change Web Socket server during execution you should add a disconnect sampler and then establish a new connection.
67+
The WebSocket plugin only supports one connection per thread at a time. If you want to change the WebSocket server during execution, you should add a disconnect sampler and then establish a new connection.
6868
:::

jmeter-java-dsl-cli/src/main/java/us/abstracta/jmeter/javadsl/cli/Jmx2DslCommand.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import us.abstracta.jmeter.javadsl.graphql.DslGraphqlSampler;
1212
import us.abstracta.jmeter.javadsl.jdbc.JdbcJmeterDsl;
1313
import us.abstracta.jmeter.javadsl.parallel.ParallelController;
14-
import us.abstracta.jmeter.javadsl.websocket.DslWebsocketFactory;
14+
import us.abstracta.jmeter.javadsl.websocket.WebsocketJMeterDsl;
1515
import us.abstracta.jmeter.javadsl.wrapper.WrapperJmeterDsl;
1616

1717
@Command(name = "jmx2dsl", header = "Converts a JMX file to DSL code",
@@ -49,7 +49,7 @@ public Integer call() throws Exception {
4949
addBuildersFrom(ElasticsearchBackendListener.class, "jmeter-java-dsl-elasticsearch-listener",
5050
codeGenerator);
5151
addBuildersFrom(DatadogBackendListener.class, "jmeter-java-dsl-datadog", codeGenerator);
52-
addBuildersFrom(DslWebsocketFactory.class, "jmeter-java-dsl-websocket", codeGenerator);
52+
addBuildersFrom(WebsocketJMeterDsl.class, "jmeter-java-dsl-websocket", codeGenerator);
5353
System.out.println(codeGenerator.generateCodeFromJmx(jmxFile));
5454
return 0;
5555
}

jmeter-java-dsl-websocket/src/main/java/us/abstracta/jmeter/javadsl/websocket/DslWebsocketFactory.java renamed to jmeter-java-dsl-websocket/src/main/java/us/abstracta/jmeter/javadsl/websocket/WebsocketJMeterDsl.java

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.lang.reflect.Method;
1414
import java.net.URI;
1515
import java.net.URISyntaxException;
16+
import java.util.Arrays;
1617
import java.util.List;
1718
import org.apache.jmeter.testelement.TestElement;
1819
import us.abstracta.jmeter.javadsl.codegeneration.MethodCall;
@@ -65,9 +66,9 @@
6566
*
6667
* @since 2.2
6768
*/
68-
public class DslWebsocketFactory {
69+
public class WebsocketJMeterDsl {
6970

70-
private DslWebsocketFactory() {
71+
private WebsocketJMeterDsl() {
7172
}
7273

7374
/**
@@ -139,29 +140,6 @@ public static DslReadSampler websocketRead() {
139140
return new DslReadSampler();
140141
}
141142

142-
public enum StatusCode implements EnumParam.EnumPropertyValue {
143-
NORMAL_CLOSURE("1000"),
144-
GOING_AWAY("1001"),
145-
PROTOCOL_ERROR("1002"),
146-
UNSUPPORTED_DATA("1003"),
147-
NO_STATUS_CODE_PRESENT("1005"),
148-
MESSAGE_TYPE_ERROR("1007"),
149-
POLICY_VIOLATION("1008"),
150-
MESSAGE_TOO_BIG_ERROR("1009"),
151-
TLS_HANDSHAKE_ERROR("1015");
152-
153-
private final String propertyValue;
154-
155-
StatusCode(String propertyValue) {
156-
this.propertyValue = propertyValue;
157-
}
158-
159-
@Override
160-
public String propertyValue() {
161-
return propertyValue;
162-
}
163-
}
164-
165143
public static class DslConnectSampler extends BaseSampler<DslConnectSampler> {
166144
private String connectionTimeoutMillis;
167145
private String responseTimeoutMillis;
@@ -300,14 +278,43 @@ protected MethodCall buildMethodCall(OpenWebSocketSampler testElement,
300278
String protocol = tls.getExpression().equals("true") ? "wss" : "ws";
301279
String url = protocol + "://" + server.getExpression() + ":" + port.getExpression()
302280
+ path.getExpression();
303-
return new MethodCall("DslWebsocketFactory.websocketConnect", DslConnectSampler.class,
281+
return new MethodCall("websocketConnect", DslConnectSampler.class,
304282
new StringParam(url))
305283
.chain("connectionTimeout", paramBuilder.intParam("connectTimeout", 20000))
306284
.chain("responseTimeout", paramBuilder.intParam("readTimeout", 6000));
307285
}
308286
}
309287
}
310288

289+
public enum StatusCode implements EnumParam.EnumPropertyValue {
290+
NORMAL_CLOSURE("1000"),
291+
GOING_AWAY("1001"),
292+
PROTOCOL_ERROR("1002"),
293+
UNSUPPORTED_DATA("1003"),
294+
NO_STATUS_CODE_PRESENT("1005"),
295+
MESSAGE_TYPE_ERROR("1007"),
296+
POLICY_VIOLATION("1008"),
297+
MESSAGE_TOO_BIG_ERROR("1009"),
298+
TLS_HANDSHAKE_ERROR("1015");
299+
300+
private final String propertyValue;
301+
302+
StatusCode(String propertyValue) {
303+
this.propertyValue = propertyValue;
304+
}
305+
306+
@Override
307+
public String propertyValue() {
308+
return propertyValue;
309+
}
310+
311+
public static boolean isValidStatusCode(String value) {
312+
return Arrays.stream(StatusCode.values())
313+
.anyMatch(code -> code.propertyValue().equals(value));
314+
}
315+
316+
}
317+
311318
public static class DslDisconnectSampler extends BaseSampler<DslDisconnectSampler> {
312319
private String responseTimeoutMillis;
313320
private String statusCode;
@@ -404,13 +411,11 @@ public CodeBuilder(List<Method> builderMethods) {
404411
protected MethodCall buildMethodCall(CloseWebSocketSampler testElement,
405412
MethodCallContext context) {
406413
TestElementParamBuilder paramBuilder = new TestElementParamBuilder(testElement);
407-
MethodParam statusCode;
408-
try {
414+
MethodParam statusCode = paramBuilder.stringParam("statusCode", "1000");
415+
if (StatusCode.isValidStatusCode(statusCode.getExpression())) {
409416
statusCode = paramBuilder.enumParam("statusCode", StatusCode.NORMAL_CLOSURE);
410-
} catch (UnsupportedOperationException e) {
411-
statusCode = paramBuilder.stringParam("statusCode", "1000");
412417
}
413-
return new MethodCall("DslWebsocketFactory.websocketDisconnect", DslDisconnectSampler.class)
418+
return new MethodCall("websocketDisconnect", DslDisconnectSampler.class)
414419
.chain("responseTimeout", paramBuilder.intParam("readTimeout", 6000))
415420
.chain("statusCode", statusCode);
416421
}
@@ -446,7 +451,7 @@ protected MethodCall buildMethodCall(SingleWriteWebSocketSampler testElement,
446451
MethodCallContext context) {
447452
TestElementParamBuilder paramBuilder = new TestElementParamBuilder(testElement);
448453
MethodParam requestData = paramBuilder.stringParam("requestData", "");
449-
return new MethodCall("DslWebsocketFactory.websocketWrite", DslWriteSampler.class,
454+
return new MethodCall("websocketWrite", DslWriteSampler.class,
450455
new StringParam(requestData.getExpression()));
451456
}
452457
}
@@ -530,7 +535,7 @@ protected MethodCall buildMethodCall(SingleReadWebSocketSampler testElement,
530535
TestElementParamBuilder paramBuilder = new TestElementParamBuilder(testElement);
531536
boolean optionalParam = !paramBuilder.boolParam("optional", false)
532537
.getExpression().equals("true");
533-
return new MethodCall("DslWebsocketFactory.websocketRead", DslReadSampler.class)
538+
return new MethodCall("websocketRead", DslReadSampler.class)
534539
.chain("responseTimeout", paramBuilder.intParam("readTimeout", 6000))
535540
.chain("waitForResponse", new BoolParam(optionalParam, true))
536541
.chain("createNewConnection", paramBuilder.boolParam("createNewConnection", false));

jmeter-java-dsl-websocket/src/test/java/DslWebsocketSamplerTest.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import static us.abstracta.jmeter.javadsl.JmeterDsl.responseAssertion;
55
import static us.abstracta.jmeter.javadsl.JmeterDsl.testPlan;
66
import static us.abstracta.jmeter.javadsl.JmeterDsl.threadGroup;
7-
import us.abstracta.jmeter.javadsl.websocket.DslWebsocketFactory;
7+
import static us.abstracta.jmeter.javadsl.websocket.WebsocketJMeterDsl.*;
88

99
import org.junit.jupiter.api.Test;
1010
import us.abstracta.jmeter.javadsl.core.TestPlanStats;
@@ -19,29 +19,29 @@ public void shouldConnectAndEchoMessageWhenWebSocketTestPlanWithEchoServer() thr
1919
String wsUri = echoServer.getUri();
2020
TestPlanStats stats = testPlan(
2121
threadGroup(1, 1,
22-
DslWebsocketFactory.websocketConnect(wsUri),
23-
DslWebsocketFactory.websocketWrite("Hello WebSocket Test!"),
24-
DslWebsocketFactory.websocketRead()
22+
websocketConnect(wsUri),
23+
websocketWrite("Hello WebSocket Test!"),
24+
websocketRead()
2525
.children(
2626
responseAssertion()
2727
.containsSubstrings("Hello WebSocket Test!")),
28-
DslWebsocketFactory.websocketDisconnect()))
28+
websocketDisconnect()))
2929
.run();
3030
assertThat(stats.overall().errorsCount()).isEqualTo(0);
3131
}
3232

3333
@Test
3434
public void shouldThrowIllegalArgumentExceptionWhenConnectWithInvalidUrl() {
3535
assertThrows(IllegalArgumentException.class, () -> {
36-
DslWebsocketFactory.websocketConnect("http://localhost:80/test");
36+
websocketConnect("http://localhost:80/test");
3737
});
3838
}
3939

4040
@Test
4141
public void shouldErrorSamplerWhenConnectToUnavailableServer() throws Exception {
4242
TestPlanStats stats = testPlan(
4343
threadGroup(1, 1,
44-
DslWebsocketFactory.websocketConnect("ws://localhost:9999/nonexistent")))
44+
websocketConnect("ws://localhost:9999/nonexistent")))
4545
.run();
4646
assertThat(stats.overall().errorsCount()).isEqualTo(1);
4747
}
@@ -50,8 +50,7 @@ public void shouldErrorSamplerWhenConnectToUnavailableServer() throws Exception
5050
public void shouldErrorSamplerWhenConnectWithVeryShortTimeout() throws Exception {
5151
TestPlanStats stats = testPlan(
5252
threadGroup(1, 1,
53-
DslWebsocketFactory
54-
.websocketConnect("ws://localhost:8080/test")
53+
websocketConnect("ws://localhost:8080/test")
5554
.connectionTimeout(1)
5655
.responseTimeout(1)))
5756
.run();
@@ -62,7 +61,7 @@ public void shouldErrorSamplerWhenConnectWithVeryShortTimeout() throws Exception
6261
public void shouldErrorSamplerWhenWriteOperationWhenNoPreviousConnection() throws Exception {
6362
TestPlanStats stats = testPlan(
6463
threadGroup(1, 1,
65-
DslWebsocketFactory.websocketWrite("Test message")))
64+
websocketWrite("Test message")))
6665
.run();
6766
assertThat(stats.overall().errorsCount()).isEqualTo(1);
6867
}
@@ -71,8 +70,7 @@ public void shouldErrorSamplerWhenWriteOperationWhenNoPreviousConnection() throw
7170
public void shouldErrorSamplerWhenReadOperationWhenNoPreviousConnection() throws Exception {
7271
TestPlanStats stats = testPlan(
7372
threadGroup(1, 1,
74-
DslWebsocketFactory
75-
.websocketRead()))
73+
websocketRead()))
7674
.run();
7775
assertThat(stats.overall().errorsCount()).isEqualTo(1);
7876
}
@@ -81,8 +79,7 @@ public void shouldErrorSamplerWhenReadOperationWhenNoPreviousConnection() throws
8179
public void shouldErrorSamplerWhenDisconnectOperationWhenNoPreviousConnection() throws Exception {
8280
TestPlanStats stats = testPlan(
8381
threadGroup(1, 1,
84-
DslWebsocketFactory
85-
.websocketDisconnect()))
82+
websocketDisconnect()))
8683
.run();
8784
assertThat(stats.overall().errorsCount()).isEqualTo(1);
8885
}

jmeter-java-dsl-websocket/src/test/java/WebsocketCodeGeneratorTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import us.abstracta.jmeter.javadsl.codegeneration.TestClassTemplate;
1414
import us.abstracta.jmeter.javadsl.core.util.StringTemplate;
1515
import us.abstracta.jmeter.javadsl.util.TestResource;
16-
import us.abstracta.jmeter.javadsl.websocket.DslWebsocketFactory;
16+
import us.abstracta.jmeter.javadsl.websocket.WebsocketJMeterDsl;
1717

1818
public class WebsocketCodeGeneratorTest {
1919

@@ -23,7 +23,7 @@ public class WebsocketCodeGeneratorTest {
2323
public void shouldGenerateExpectedCodeWhenSimpleWebSocketJmxIsProvided(@TempDir Path tempDir)
2424
throws Exception {
2525
File solvedTemplate = solveTemplateResource("websocket-test-plan.template.jmx", tempDir);
26-
assertThat(new DslCodeGenerator().addBuildersFrom(DslWebsocketFactory.class).generateCodeFromJmx(solvedTemplate))
26+
assertThat(new DslCodeGenerator().addBuildersFrom(WebsocketJMeterDsl.class).generateCodeFromJmx(solvedTemplate))
2727
.isEqualToNormalizingNewlines(
2828
solveTestClassTemplate(Collections.emptySet(),
2929
"SimpleWebSocketTest.java"));
@@ -32,7 +32,7 @@ public void shouldGenerateExpectedCodeWhenSimpleWebSocketJmxIsProvided(@TempDir
3232
@Test
3333
public void shouldGenerateExpectedCodeWhenComplexWebSocketJmxIsProvided(@TempDir Path tempDir) throws Exception {
3434
File solvedTemplate = solveTemplateResource("/complex-websocket.jmx", tempDir);
35-
assertThat(new DslCodeGenerator().addBuildersFrom(DslWebsocketFactory.class).generateCodeFromJmx(solvedTemplate))
35+
assertThat(new DslCodeGenerator().addBuildersFrom(WebsocketJMeterDsl.class).generateCodeFromJmx(solvedTemplate))
3636
.isEqualToNormalizingNewlines(
3737
solveTestClassTemplate(Collections.emptySet(),
3838
"ComplexWebSocketTest.java"));
@@ -43,8 +43,8 @@ public void shouldGenerateExpectedCodeWhenWebSocketWithVariablesJmxIsProvided(@T
4343
throws Exception {
4444
assertThat(new DslCodeGenerator()
4545

46-
.addBuildersFrom(DslWebsocketFactory.class)
47-
.addDependency(DslWebsocketFactory.class, "us.abstracta.jmeter:jmeter-java-dsl-websocket")
46+
.addBuildersFrom(WebsocketJMeterDsl.class)
47+
.addDependency(WebsocketJMeterDsl.class, "us.abstracta.jmeter:jmeter-java-dsl-websocket")
4848
.generateCodeFromJmx(new TestResource(RESOURCES_FOLDER + "/websocket-with-variables.jmx").file()))
4949
.isEqualToNormalizingNewlines(solveTestClassTemplate(Collections.emptySet(),
5050
"WebSocketWithVariablesTest.java"));

jmeter-java-dsl-websocket/src/test/resources/websocket-codegeneration/ComplexWebSocketTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
testPlan(
22
threadGroup(1, 1,
3-
DslWebsocketFactory.websocketConnect("ws://echo.websocket.org:80/")
3+
websocketConnect("ws://echo.websocket.org:80/")
44
.connectionTimeout(15000)
55
.responseTimeout(10000),
6-
DslWebsocketFactory.websocketWrite("Hello from JMeter WebSocket Test"),
7-
DslWebsocketFactory.websocketRead()
6+
websocketWrite("Hello from JMeter WebSocket Test"),
7+
websocketRead()
88
.responseTimeout(10000)
99
.waitForResponse(false),
10-
DslWebsocketFactory.websocketDisconnect()
10+
websocketDisconnect()
1111
.responseTimeout(2000)
1212
.statusCode("3000")
1313
)
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
testPlan(
22
threadGroup(1, 1,
3-
DslWebsocketFactory.websocketConnect("ws://ws.postman-echo.com:80/raw"),
4-
DslWebsocketFactory.websocketWrite("Hello WebSocket Test!"),
5-
DslWebsocketFactory.websocketRead(),
6-
DslWebsocketFactory.websocketDisconnect()
3+
websocketConnect("ws://ws.postman-echo.com:80/raw"),
4+
websocketWrite("Hello WebSocket Test!"),
5+
websocketRead(),
6+
websocketDisconnect()
77
)
88
)

jmeter-java-dsl-websocket/src/test/resources/websocket-codegeneration/WebSocketWithVariablesTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
testPlan(
22
threadGroup(1, 1,
3-
DslWebsocketFactory.websocketConnect("ws://${WEBSOCKET_SERVER}:${WEBSOCKET_PORT}/raw")
3+
websocketConnect("ws://${WEBSOCKET_SERVER}:${WEBSOCKET_PORT}/raw")
44
.connectionTimeout("${timeout}")
55
.responseTimeout("${timeout}"),
6-
DslWebsocketFactory.websocketWrite("${MESSAGE}"),
7-
DslWebsocketFactory.websocketRead()
6+
websocketWrite("${MESSAGE}"),
7+
websocketRead()
88
.responseTimeout("${timeout}"),
9-
DslWebsocketFactory.websocketDisconnect()
9+
websocketDisconnect()
1010
.responseTimeout("${timeout}")
1111
.statusCode("${statusCode}")
1212
)

0 commit comments

Comments
 (0)