This is an automated email from the ASF dual-hosted git repository.
tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-protonj2.git
The following commit(s) were added to refs/heads/main by this push:
new 28b2c100 PROTON-2698 Simplify test client connect with SASL plain and
anonymous
28b2c100 is described below
commit 28b2c100e1bb796d6b62d51391dd5568b39c6c73
Author: Timothy Bish <[email protected]>
AuthorDate: Fri Apr 7 15:50:11 2023 -0400
PROTON-2698 Simplify test client connect with SASL plain and anonymous
Provide some simple APIs in the script writer for scripting a normal
client connect with SASL plain or anonymous.
---
.../qpid/protonj2/test/driver/ScriptWriter.java | 74 ++++++++++++++++++
.../protonj2/test/driver/ProtonTestClientTest.java | 88 ++++++++++++++++++++++
2 files changed, 162 insertions(+)
diff --git
a/protonj2-test-driver/src/main/java/org/apache/qpid/protonj2/test/driver/ScriptWriter.java
b/protonj2-test-driver/src/main/java/org/apache/qpid/protonj2/test/driver/ScriptWriter.java
index 85281ec1..ea52b321 100644
---
a/protonj2-test-driver/src/main/java/org/apache/qpid/protonj2/test/driver/ScriptWriter.java
+++
b/protonj2-test-driver/src/main/java/org/apache/qpid/protonj2/test/driver/ScriptWriter.java
@@ -550,6 +550,80 @@ public abstract class ScriptWriter {
remoteSaslOutcome().withCode(SaslCode.AUTH).queue();
}
+ /**
+ * Used to queue the sequence of frames that would occur during a typical
client
+ * connection to a remote peer with SASL anonymous. This should be called
before a
+ * client connect attempt as the queued headers won't fire if queued after
the
+ * connection has already been established.
+ */
+ public void queueClientSaslAnonymousConnect() {
+ remoteSASLHeader().queue();
+ expectSASLHeader();
+ expectSaslMechanisms().withSaslServerMechanism("ANONYMOUS");
+ remoteSaslInit().withMechanism("ANONYMOUS").queue();
+ expectSaslOutcome().withCode(SaslCode.OK);
+ remoteAMQPHeader().queue();
+ }
+
+ /**
+ * Used to trigger the sequence of frames that would occur during a
typical client
+ * connection to a remote peer with SASL anonymous. This should be called
after a
+ * client connects to the remote as the fired frames would fail until
there is a
+ * connection in place.
+ */
+ public void triggerClientSaslAnonymousConnect() {
+ expectSASLHeader();
+ expectSaslMechanisms().withSaslServerMechanism("ANONYMOUS");
+ remoteSaslInit().withMechanism("ANONYMOUS").queue();
+ expectSaslOutcome().withCode(SaslCode.OK);
+ remoteAMQPHeader().queue();
+
+ // This trigger the exchange of frames.
+ remoteSASLHeader().now();
+ }
+
+ /**
+ * Used to queue the sequence of frames that would occur during a typical
client
+ * connection to a remote peer with SASL plain. This should be called
before a
+ * client connect attempt as the queued headers won't fire if queued after
the
+ * connection has already been established.
+ *
+ * @param username
+ * The user name that is expected in the SASL Plain initial response.
+ * @param password
+ * The password that is expected in the SASL Plain initial response.
+ */
+ public void queueClientSaslPlainConnect(String username, String password) {
+ remoteSASLHeader().queue();
+ expectSASLHeader();
+ expectSaslMechanisms().withSaslServerMechanism("PLAIN");
+
remoteSaslInit().withMechanism("PLAIN").withInitialResponse(saslPlainInitialResponse(username,
password)).queue();
+ expectSaslOutcome().withCode(SaslCode.OK);
+ remoteAMQPHeader().queue();
+ }
+
+ /**
+ * Used to trigger the sequence of frames that would occur during a
typical client
+ * connection to a remote peer with SASL plain. This should be called
after a
+ * client connects to the remote as the fired frames would fail until
there is a
+ * connection in place.
+ *
+ * @param username
+ * The user name that is expected in the SASL Plain initial response.
+ * @param password
+ * The password that is expected in the SASL Plain initial response.
+ */
+ public void triggerClientSaslPlainConnect(String username, String
password) {
+ expectSASLHeader();
+ expectSaslMechanisms().withSaslServerMechanism("PLAIN");
+
remoteSaslInit().withMechanism("PLAIN").withInitialResponse(saslPlainInitialResponse(username,
password)).queue();
+ expectSaslOutcome().withCode(SaslCode.OK);
+ remoteAMQPHeader().queue();
+
+ // This trigger the exchange of frames.
+ remoteSASLHeader().now();
+ }
+
//----- Utility methods for tests writing raw scripted SASL tests
public byte[] saslPlainInitialResponse(String username, String password) {
diff --git
a/protonj2-test-driver/src/test/java/org/apache/qpid/protonj2/test/driver/ProtonTestClientTest.java
b/protonj2-test-driver/src/test/java/org/apache/qpid/protonj2/test/driver/ProtonTestClientTest.java
index d15e9396..2cc9caa2 100644
---
a/protonj2-test-driver/src/test/java/org/apache/qpid/protonj2/test/driver/ProtonTestClientTest.java
+++
b/protonj2-test-driver/src/test/java/org/apache/qpid/protonj2/test/driver/ProtonTestClientTest.java
@@ -224,4 +224,92 @@ class ProtonTestClientTest extends TestPeerTestsBase {
peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
}
}
+
+ @Test
+ public void testScriptedClientSASLAnonymousBeforeConnect() throws
Exception {
+ try (ProtonTestServer peer = new ProtonTestServer()) {
+ peer.expectSASLAnonymousConnect("PLAIN", "ANONYMOUS");
+ peer.start();
+
+ URI remoteURI = peer.getServerURI();
+
+ ProtonTestClient client = new ProtonTestClient();
+
+ client.queueClientSaslAnonymousConnect();
+ client.connect(remoteURI.getHost(), remoteURI.getPort());
+
+ client.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ client.close();
+
+ LOG.info("Test started, peer listening on: {}", remoteURI);
+
+ peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ }
+ }
+
+ @Test
+ public void testScriptedClientSASLAnonymousAfterConnect() throws Exception
{
+ try (ProtonTestServer peer = new ProtonTestServer()) {
+ peer.expectSASLAnonymousConnect("PLAIN", "ANONYMOUS");
+ peer.start();
+
+ URI remoteURI = peer.getServerURI();
+
+ ProtonTestClient client = new ProtonTestClient();
+
+ client.connect(remoteURI.getHost(), remoteURI.getPort());
+ client.triggerClientSaslAnonymousConnect();
+
+ client.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ client.close();
+
+ LOG.info("Test started, peer listening on: {}", remoteURI);
+
+ peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ }
+ }
+
+ @Test
+ public void testScriptedClientSASLPlainBeforeConnect() throws Exception {
+ try (ProtonTestServer peer = new ProtonTestServer()) {
+ peer.expectSASLPlainConnect("test", "test");
+ peer.start();
+
+ URI remoteURI = peer.getServerURI();
+
+ ProtonTestClient client = new ProtonTestClient();
+
+ client.queueClientSaslPlainConnect("test", "test");
+ client.connect(remoteURI.getHost(), remoteURI.getPort());
+
+ client.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ client.close();
+
+ LOG.info("Test started, peer listening on: {}", remoteURI);
+
+ peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ }
+ }
+
+ @Test
+ public void testScriptedClientSASLPlainAfterConnect() throws Exception {
+ try (ProtonTestServer peer = new ProtonTestServer()) {
+ peer.expectSASLPlainConnect("test", "test");
+ peer.start();
+
+ URI remoteURI = peer.getServerURI();
+
+ ProtonTestClient client = new ProtonTestClient();
+
+ client.connect(remoteURI.getHost(), remoteURI.getPort());
+ client.triggerClientSaslPlainConnect("test", "test");
+
+ client.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ client.close();
+
+ LOG.info("Test started, peer listening on: {}", remoteURI);
+
+ peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]