requestCaptor = ArgumentCaptor.forClass(Nip46Request.class);
+ when(adminClient.sendRequest(requestCaptor.capture()))
+ .thenReturn(CompletableFuture.completedFuture(Nip46Response.success("1", "ok")));
+
+ // Act
+ boolean result = keyManager.unlockKey("key-unencrypted", null).join();
+
+ // Assert
+ assertThat(result).isTrue();
+ Nip46Request request = requestCaptor.getValue();
+ assertThat(request.getParams()).containsExactlyElementsOf(List.of("key-unencrypted", ""));
+ }
+
/**
* Ensures NIP-46 errors are surfaced as AdminException through the future.
*/
diff --git a/nsecbunker-client/pom.xml b/nsecbunker-client/pom.xml
index bbc8833..2e98e8c 100644
--- a/nsecbunker-client/pom.xml
+++ b/nsecbunker-client/pom.xml
@@ -8,7 +8,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
nsecbunker-client
diff --git a/nsecbunker-connection/pom.xml b/nsecbunker-connection/pom.xml
index 99f1516..4ea604e 100644
--- a/nsecbunker-connection/pom.xml
+++ b/nsecbunker-connection/pom.xml
@@ -8,7 +8,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
nsecbunker-connection
diff --git a/nsecbunker-core/pom.xml b/nsecbunker-core/pom.xml
index 2484c19..c58de7b 100644
--- a/nsecbunker-core/pom.xml
+++ b/nsecbunker-core/pom.xml
@@ -8,7 +8,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
nsecbunker-core
diff --git a/nsecbunker-monitoring/pom.xml b/nsecbunker-monitoring/pom.xml
index a7dd48b..587a720 100644
--- a/nsecbunker-monitoring/pom.xml
+++ b/nsecbunker-monitoring/pom.xml
@@ -8,7 +8,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
nsecbunker-monitoring
diff --git a/nsecbunker-protocol/pom.xml b/nsecbunker-protocol/pom.xml
index ff65d98..5570120 100644
--- a/nsecbunker-protocol/pom.xml
+++ b/nsecbunker-protocol/pom.xml
@@ -8,7 +8,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
nsecbunker-protocol
diff --git a/nsecbunker-spring-boot-starter/pom.xml b/nsecbunker-spring-boot-starter/pom.xml
index eb44dc5..6115842 100644
--- a/nsecbunker-spring-boot-starter/pom.xml
+++ b/nsecbunker-spring-boot-starter/pom.xml
@@ -8,7 +8,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
nsecbunker-spring-boot-starter
diff --git a/nsecbunker-tests/nsecbunker-chaos/pom.xml b/nsecbunker-tests/nsecbunker-chaos/pom.xml
index f085853..4a62193 100644
--- a/nsecbunker-tests/nsecbunker-chaos/pom.xml
+++ b/nsecbunker-tests/nsecbunker-chaos/pom.xml
@@ -7,7 +7,7 @@
xyz.tcheeric
nsecbunker-tests
- 0.1.0
+ 0.1.1
nsecbunker-chaos
diff --git a/nsecbunker-tests/nsecbunker-chaos/src/test/java/xyz/tcheeric/nsecbunker/chaos/RelayConnectionChaosTest.java b/nsecbunker-tests/nsecbunker-chaos/src/test/java/xyz/tcheeric/nsecbunker/chaos/RelayConnectionChaosTest.java
index c0d1c43..c7a746f 100644
--- a/nsecbunker-tests/nsecbunker-chaos/src/test/java/xyz/tcheeric/nsecbunker/chaos/RelayConnectionChaosTest.java
+++ b/nsecbunker-tests/nsecbunker-chaos/src/test/java/xyz/tcheeric/nsecbunker/chaos/RelayConnectionChaosTest.java
@@ -89,9 +89,34 @@ void shouldStopAfterMaxReconnectAttempts() throws Exception {
}
/**
- * No-op WebSocket listener for MockWebServer upgrades.
+ * WebSocket listener for MockWebServer upgrades that properly handles lifecycle.
+ *
+ * A completely empty listener causes NPE in OkHttp's RealWebSocket.loopReader
+ * because the reader loop expects proper lifecycle handling. This implementation
+ * handles onOpen, onMessage, and onClosing to prevent the MockWebServer crash.
*/
private static final class NoopWebSocketListener extends okhttp3.WebSocketListener {
+
+ @Override
+ public void onOpen(okhttp3.WebSocket webSocket, okhttp3.Response response) {
+ // Connection opened - no action needed for test
+ }
+
+ @Override
+ public void onMessage(okhttp3.WebSocket webSocket, String text) {
+ // Message received - no action needed for test
+ }
+
+ @Override
+ public void onClosing(okhttp3.WebSocket webSocket, int code, String reason) {
+ // Server closing - echo back close to complete handshake
+ webSocket.close(code, reason);
+ }
+
+ @Override
+ public void onFailure(okhttp3.WebSocket webSocket, Throwable t, okhttp3.Response response) {
+ // Connection failed - no action needed for test
+ }
}
/**
diff --git a/nsecbunker-tests/nsecbunker-e2e/pom.xml b/nsecbunker-tests/nsecbunker-e2e/pom.xml
index 1b5071d..d922128 100644
--- a/nsecbunker-tests/nsecbunker-e2e/pom.xml
+++ b/nsecbunker-tests/nsecbunker-e2e/pom.xml
@@ -7,7 +7,7 @@
xyz.tcheeric
nsecbunker-tests
- 0.1.0
+ 0.1.1
nsecbunker-e2e
diff --git a/nsecbunker-tests/nsecbunker-it/pom.xml b/nsecbunker-tests/nsecbunker-it/pom.xml
index 48bc51a..e826aa0 100644
--- a/nsecbunker-tests/nsecbunker-it/pom.xml
+++ b/nsecbunker-tests/nsecbunker-it/pom.xml
@@ -7,7 +7,7 @@
xyz.tcheeric
nsecbunker-tests
- 0.1.0
+ 0.1.1
nsecbunker-it
diff --git a/nsecbunker-tests/nsecbunker-it/src/test/java/xyz/tcheeric/nsecbunker/admin/integration/AdminConnectionLifecycleTest.java b/nsecbunker-tests/nsecbunker-it/src/test/java/xyz/tcheeric/nsecbunker/admin/integration/AdminConnectionLifecycleTest.java
index c7ba252..3909575 100644
--- a/nsecbunker-tests/nsecbunker-it/src/test/java/xyz/tcheeric/nsecbunker/admin/integration/AdminConnectionLifecycleTest.java
+++ b/nsecbunker-tests/nsecbunker-it/src/test/java/xyz/tcheeric/nsecbunker/admin/integration/AdminConnectionLifecycleTest.java
@@ -86,6 +86,8 @@ void connectIsIdempotentWhenConnected() throws Exception {
client.connect();
assertThat(client.isConnected()).isTrue();
+ // Wait for server to register the connection
+ assertThat(mockRelay.awaitConnection(5, TimeUnit.SECONDS)).isTrue();
// Second connect should not throw
client.connect();
diff --git a/nsecbunker-tests/nsecbunker-perf/pom.xml b/nsecbunker-tests/nsecbunker-perf/pom.xml
index a7863f6..d279be8 100644
--- a/nsecbunker-tests/nsecbunker-perf/pom.xml
+++ b/nsecbunker-tests/nsecbunker-perf/pom.xml
@@ -7,7 +7,7 @@
xyz.tcheeric
nsecbunker-tests
- 0.1.0
+ 0.1.1
nsecbunker-perf
diff --git a/nsecbunker-tests/nsecbunker-security/pom.xml b/nsecbunker-tests/nsecbunker-security/pom.xml
index babd250..d8536bc 100644
--- a/nsecbunker-tests/nsecbunker-security/pom.xml
+++ b/nsecbunker-tests/nsecbunker-security/pom.xml
@@ -7,7 +7,7 @@
xyz.tcheeric
nsecbunker-tests
- 0.1.0
+ 0.1.1
nsecbunker-security
diff --git a/nsecbunker-tests/pom.xml b/nsecbunker-tests/pom.xml
index 82b6f47..f4c2c17 100644
--- a/nsecbunker-tests/pom.xml
+++ b/nsecbunker-tests/pom.xml
@@ -7,7 +7,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
nsecbunker-tests
diff --git a/pom.xml b/pom.xml
index a3c3c22..8fb1850 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
xyz.tcheeric
nsecbunker-java
- 0.1.0
+ 0.1.1
pom
nsecBunker Java Library