void sendConnect(String serverURI) throws IOException { try { NatsServerInfo info = this.serverInfo.get(); StringBuilder connectString = new StringBuilder(); connectString.append(NatsConnection.OP_CONNECT); connectString.append(" "); String connectOptions = this.options.buildProtocolConnectOptionsString(serverURI, info.isAuthRequired(), info.getNonce()); connectString.append(connectOptions); NatsMessage msg = new NatsMessage(connectString.toString()); queueInternalOutgoing(msg); } catch (Exception exp) { exp.printStackTrace(); throw new IOException("Error sending connect string", exp); } }
void sendConnect(String serverURI) throws IOException { try { NatsServerInfo info = this.serverInfo.get(); StringBuilder connectString = new StringBuilder(); connectString.append(NatsConnection.OP_CONNECT); connectString.append(" "); String connectOptions = this.options.buildProtocolConnectOptionsString(serverURI, info.isAuthRequired(), info.getNonce()); connectString.append(connectOptions); NatsMessage msg = new NatsMessage(connectString.toString()); queueInternalOutgoing(msg); } catch (Exception exp) { exp.printStackTrace(); throw new IOException("Error sending connect string", exp); } }
@Test public void testAuthConnectOptions() { Options o = new Options.Builder().userInfo("hello", "world").build(); String expectedNoAuth = "{\"lang\":\"java\",\"version\":\"" + Nats.CLIENT_VERSION + "\"" + ",\"protocol\":1,\"verbose\":false,\"pedantic\":false,\"tls_required\":false,\"echo\":true}"; String expectedWithAuth = "{\"lang\":\"java\",\"version\":\"" + Nats.CLIENT_VERSION + "\"" + ",\"protocol\":1,\"verbose\":false,\"pedantic\":false,\"tls_required\":false,\"echo\":true" + ",\"user\":\"hello\",\"pass\":\"world\"}"; assertEquals("no auth connect options", expectedNoAuth, o.buildProtocolConnectOptionsString("nats://localhost:4222", false, null)); assertEquals("auth connect options", expectedWithAuth, o.buildProtocolConnectOptionsString("nats://localhost:4222", true, null)); }
@Test public void testUserPassInURL() { String serverURI = "nats://derek:password@localhost:2222"; Options o = new Options.Builder().server(serverURI).build(); String connectString = o.buildProtocolConnectOptionsString(serverURI, true, null); assertTrue(connectString.contains("\"user\":\"derek\"")); assertTrue(connectString.contains("\"pass\":\"password\"")); assertFalse(connectString.contains("\"token\":")); }
@Test public void testTokenInURL() { String serverURI = "nats://alberto@localhost:2222"; Options o = new Options.Builder().server(serverURI).build(); String connectString = o.buildProtocolConnectOptionsString(serverURI, true, null); assertTrue(connectString.contains("\"auth_token\":\"alberto\"")); assertFalse(connectString.contains("\"user\":")); assertFalse(connectString.contains("\"pass\":")); }
@Test public void testNKeyConnectOptions() throws Exception { TestAuthHandler th = new TestAuthHandler(); byte[] nonce = "abcdefg".getBytes(StandardCharsets.UTF_8); String sig = Base64.getUrlEncoder().withoutPadding().encodeToString(th.sign(nonce)); Options o = new Options.Builder().authHandler(th).build(); String expectedNoAuth = "{\"lang\":\"java\",\"version\":\"" + Nats.CLIENT_VERSION + "\"" + ",\"protocol\":1,\"verbose\":false,\"pedantic\":false,\"tls_required\":false,\"echo\":true}"; String expectedWithAuth = "{\"lang\":\"java\",\"version\":\"" + Nats.CLIENT_VERSION + "\"" + ",\"protocol\":1,\"verbose\":false,\"pedantic\":false,\"tls_required\":false,\"echo\":true" + ",\"nkey\":\""+new String(th.getID())+"\",\"sig\":\""+sig+"\",\"jwt\":\"\"}"; assertEquals("no auth connect options", expectedNoAuth, o.buildProtocolConnectOptionsString("nats://localhost:4222", false, nonce)); assertEquals("auth connect options", expectedWithAuth, o.buildProtocolConnectOptionsString("nats://localhost:4222", true, nonce)); }
@Test public void testDefaultConnectOptions() { Options o = new Options.Builder().build(); String expected = "{\"lang\":\"java\",\"version\":\"" + Nats.CLIENT_VERSION + "\"" + ",\"protocol\":1,\"verbose\":false,\"pedantic\":false,\"tls_required\":false,\"echo\":true}"; assertEquals("default connect options", expected, o.buildProtocolConnectOptionsString("nats://localhost:4222", false, null)); }
@Test public void testConnectOptionsWithNameAndContext() throws Exception { SSLContext ctx = TestSSLUtils.createTestSSLContext(); Options o = new Options.Builder().sslContext(ctx).connectionName("c1").build(); String expected = "{\"lang\":\"java\",\"version\":\"" + Nats.CLIENT_VERSION + "\",\"name\":\"c1\"" + ",\"protocol\":1,\"verbose\":false,\"pedantic\":false,\"tls_required\":true,\"echo\":true}"; assertEquals("default connect options", expected, o.buildProtocolConnectOptionsString("nats://localhost:4222", false, null)); }