From f1461703c9d8ba6009a9543ce17faaa2973358e9 Mon Sep 17 00:00:00 2001 From: Eric T Date: Wed, 30 Jul 2025 23:42:24 +0100 Subject: [PATCH 1/5] Make relay container image configurable --- README.md | 4 +- nostr-java-api/pom.xml | 6 +++ .../nostr/api/integration/ApiEventIT.java | 12 ++--- .../api/integration/ApiNIP52EventIT.java | 3 +- .../api/integration/ApiNIP52RequestIT.java | 17 ++++--- .../api/integration/ApiNIP99EventIT.java | 3 +- .../api/integration/ApiNIP99RequestIT.java | 5 +-- .../integration/BaseRelayIntegrationTest.java | 45 +++++++++++++++++-- .../integration/ZDoLastApiNIP09EventIT.java | 2 +- .../test/resources/relay-container.properties | 1 + pom.xml | 7 +++ 11 files changed, 77 insertions(+), 28 deletions(-) create mode 100644 nostr-java-api/src/test/resources/relay-container.properties diff --git a/README.md b/README.md index 1ce584f71..0942392c5 100644 --- a/README.md +++ b/README.md @@ -62,9 +62,9 @@ $ git checkout
- integration-tested build (requires a nostr-relay for testing) + integration-tested build (requires Docker) -valid relay(s) must **_first_** be defined using the `relays.=` format in [relays.properties](nostr-java-api/src/main/resources/relays.properties) file, then +Integration tests automatically start a `nostr-rs-relay` container using [Testcontainers](https://testcontainers.com/). Ensure Docker is installed and running before executing the build. The relay image can be overridden in `src/test/resources/relay-container.properties`. ###### maven (unix) diff --git a/nostr-java-api/pom.xml b/nostr-java-api/pom.xml index d601c6aaa..4c8b75dbc 100644 --- a/nostr-java-api/pom.xml +++ b/nostr-java-api/pom.xml @@ -22,5 +22,11 @@ nostr-java-encryption ${nostr-java.version} + + org.testcontainers + junit-jupiter + ${testcontainers.version} + test + diff --git a/nostr-java-api/src/test/java/nostr/api/integration/ApiEventIT.java b/nostr-java-api/src/test/java/nostr/api/integration/ApiEventIT.java index c27dc3b5a..a7fe69c11 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/ApiEventIT.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/ApiEventIT.java @@ -226,7 +226,7 @@ public void testNIP01SendTextNoteEventRecipientGenericTag() { public void testNIP01SendTextNoteEventUrlTag() { System.out.println("testNIP01SendTextNoteEventUrlTag"); - String targetString = "ws://localhost:5555"; + String targetString = getRelayUri(); BaseTag genericTag = BaseTag.create("u", targetString); NIP01 nip01 = new NIP01(Identity.generateRandomIdentity()); @@ -251,7 +251,7 @@ public void testNIP01SendTextNoteEventUrlTag() { public void testFilterUrlTag() { System.out.println("testFilterUrlTag"); - String targetString = "https://localhost:5555"; + String targetString = getRelayUri().replace("ws://", "https://"); //UrlTag urlTag = new UrlTag(targetString); BaseTag urlTag = BaseTag.create("u", targetString); @@ -560,7 +560,7 @@ public void testNIP52CalendarTimeBasedEventEvent() throws IOException { List tags = new ArrayList<>(); tags.add(new PubKeyTag(Identity.generateRandomIdentity().getPublicKey(), - "ws://localhost:5555", + getRelayUri(), "ISSUER")); tags.add(new PubKeyTag(Identity.generateRandomIdentity().getPublicKey(), "", @@ -583,7 +583,7 @@ void testNIP57CreateZapRequestEvent() throws Exception { final String ZAP_REQUEST_CONTENT = "zap request content"; final Long AMOUNT = 1232456L; final String LNURL = "lnUrl"; - final String RELAYS_TAG = "ws://localhost:5555"; + final String RELAYS_TAG = getRelayUri(); var instance = nip57.createZapRequestEvent( AMOUNT, @@ -630,7 +630,7 @@ void testNIP57CreateZapReceiptEvent() throws Exception { String zapSender = Identity.generateRandomIdentity().getPublicKey().toString(); PublicKey zapRecipient = Identity.generateRandomIdentity().getPublicKey(); final String ZAP_RECEIPT_IDENTIFIER = "ipsum"; - final String ZAP_RECEIPT_RELAY_URI = "ws://localhost:5555"; + final String ZAP_RECEIPT_RELAY_URI = getRelayUri(); final String BOLT_11 = "bolt11"; final String DESCRIPTION_SHA256 = "descriptionSha256"; final String PRE_IMAGE = "preimage"; @@ -652,7 +652,7 @@ void testNIP57CreateZapReceiptEvent() throws Exception { final String ZAP_REQUEST_CONTENT = "zap request content"; final Long AMOUNT = 1232456L; final String LNURL = "lnUrl"; - final String RELAYS_TAG = "ws://localhost:5555"; + final String RELAYS_TAG = getRelayUri(); var zapRequestEvent = nip57.createZapRequestEvent( AMOUNT, diff --git a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52EventIT.java b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52EventIT.java index bf618efcc..1f6c5291e 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52EventIT.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52EventIT.java @@ -25,11 +25,10 @@ @ActiveProfiles("test") class ApiNIP52EventIT extends BaseRelayIntegrationTest { - private static final String RELAY_URI = "ws://localhost:5555"; private final SpringWebSocketClient springWebSocketClient; public ApiNIP52EventIT() { - springWebSocketClient = new SpringWebSocketClient(RELAY_URI); + springWebSocketClient = new SpringWebSocketClient(getRelayUri()); } @Test diff --git a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java index f9f0da67f..5c8f610fe 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java @@ -32,7 +32,6 @@ @ActiveProfiles("test") class ApiNIP52RequestIT extends BaseRelayIntegrationTest { private static final String PRV_KEY_VALUE = "23c011c4c02de9aa98d48c3646c70bb0e7ae30bdae1dfed4d251cbceadaeeb7b"; - private static final String RELAY_URI = "ws://localhost:5555"; private static final String UUID_CALENDAR_TIME_BASED_EVENT_TEST = "UUID-CalendarTimeBasedEventTest"; public static final String ID = "299ab85049a7923e9cd82329c0fa489ca6fd6d21feeeac33543b1237e14a9e07"; @@ -59,11 +58,11 @@ class ApiNIP52RequestIT extends BaseRelayIntegrationTest { public static final String LOCATION = "calendar location"; public static final EventTag E_TAG = new EventTag(E_TAG_HEX); - public static final PubKeyTag P1_TAG = new PubKeyTag(new PublicKey(P1_TAG_HEX), RELAY_URI, P1_ROLE); - public static final PubKeyTag P2_TAG = new PubKeyTag(new PublicKey(P2_TAG_HEX), RELAY_URI, P2_ROLE); + public static final PubKeyTag P1_TAG = new PubKeyTag(new PublicKey(P1_TAG_HEX), getRelayUri(), P1_ROLE); + public static final PubKeyTag P2_TAG = new PubKeyTag(new PublicKey(P2_TAG_HEX), getRelayUri(), P2_ROLE); public static final GeohashTag G_TAG = new GeohashTag(G_TAG_VALUE); public static final HashtagTag T_TAG = new HashtagTag(T_TAG_VALUE); - public static final ReferenceTag R_TAG = new ReferenceTag(URI.create(RELAY_URI)); + public static final ReferenceTag R_TAG = new ReferenceTag(URI.create(getRelayUri())); public static final String LABEL_NAMESPACE = "audiospace"; public static final String LABEL_1 = "calendar label 1 of 2"; @@ -113,7 +112,7 @@ void testNIP99CalendarContentPreRequest() throws IOException { eventPubKey = event.getPubKey().toString(); EventMessage eventMessage = new EventMessage(event); - SpringWebSocketClient springWebSocketEventClient = new SpringWebSocketClient(RELAY_URI); + SpringWebSocketClient springWebSocketEventClient = new SpringWebSocketClient(getRelayUri()); String eventResponse = springWebSocketEventClient.send(eventMessage).stream().findFirst().orElseThrow(); // Extract and compare only first 3 elements of the JSON array @@ -134,7 +133,7 @@ void testNIP99CalendarContentPreRequest() throws IOException { // TODO - This assertion fails with superdonductor and nostr-rs-relay - SpringWebSocketClient springWebSocketRequestClient = new SpringWebSocketClient(RELAY_URI); + SpringWebSocketClient springWebSocketRequestClient = new SpringWebSocketClient(getRelayUri()); String subscriberId = UUID.randomUUID().toString(); String reqJson = createReqJson(subscriberId, eventId); String reqResponse = springWebSocketRequestClient.send(reqJson).stream().findFirst().orElseThrow(); @@ -171,15 +170,15 @@ private String expectedRequestResponseJson(String subscriberId) { " [ \"g\", \"" + G_TAG.getLocation() + "\" ],\n" + " [ \"t\", \"" + T_TAG.getHashTag() + "\" ],\n" + " [ \"d\", \"" + UUID_CALENDAR_TIME_BASED_EVENT_TEST + "\" ],\n" + - " [ \"p\", \"" + P1_TAG.getPublicKey() + "\", \"" + RELAY_URI + "\", \"" + P1_ROLE + "\" ],\n" + - " [ \"p\", \"" + P2_TAG.getPublicKey() + "\", \"" + RELAY_URI + "\", \"" + P2_ROLE + "\" ],\n" + + " [ \"p\", \"" + P1_TAG.getPublicKey() + "\", \"" + getRelayUri() + "\", \"" + P1_ROLE + "\" ],\n" + + " [ \"p\", \"" + P2_TAG.getPublicKey() + "\", \"" + getRelayUri() + "\", \"" + P2_ROLE + "\" ],\n" + " [ \"start_tzid\", \"" + START_TZID + "\" ],\n" + " [ \"end_tzid\", \"" + END_TZID + "\" ],\n" + " [ \"summary\", \"" + SUMMARY + "\" ],\n" + " [ \"l\", \"" + LABEL_1 + "\", \"" + LABEL_NAMESPACE + "\" ],\n" + " [ \"l\", \"" + LABEL_2 + "\", \"" + LABEL_NAMESPACE + "\" ],\n" + " [ \"location\", \"" + LOCATION + "\" ],\n" + - " [ \"r\", \"" + URI.create(RELAY_URI) + "\" ],\n" + + " [ \"r\", \"" + URI.create(getRelayUri()) + "\" ],\n" + " [ \"title\", \"" + TITLE + "\" ],\n" + " [ \"start\", \"" + START + "\" ],\n" + " [ \"end\", \"" + END + "\" ]\n" + diff --git a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99EventIT.java b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99EventIT.java index bb63f58bb..ad5501e7d 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99EventIT.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99EventIT.java @@ -31,7 +31,6 @@ @ActiveProfiles("test") class ApiNIP99EventIT extends BaseRelayIntegrationTest { - private static final String RELAY_URI = "ws://localhost:5555"; public static final String CLASSIFIED_LISTING_CONTENT = "classified listing content"; public static final String PTAG_HEX = "2bed79f81439ff794cf5ac5f7bff9121e257f399829e472c7a14d3e86fe76985"; @@ -58,7 +57,7 @@ class ApiNIP99EventIT extends BaseRelayIntegrationTest { private final SpringWebSocketClient springWebSocketClient; public ApiNIP99EventIT() { - springWebSocketClient = new SpringWebSocketClient(RELAY_URI); + springWebSocketClient = new SpringWebSocketClient(getRelayUri()); } @Test diff --git a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99RequestIT.java b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99RequestIT.java index e3434c181..61adc3614 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99RequestIT.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP99RequestIT.java @@ -33,7 +33,6 @@ @ActiveProfiles("test") class ApiNIP99RequestIT extends BaseRelayIntegrationTest { private static final String PRV_KEY_VALUE = "23c011c4c02de9aa98d48c3646c70bb0e7ae30bdae1dfed4d251cbceadaeeb7b"; - private static final String RELAY_URI = "ws://localhost:5555"; public static final String PUBLISHED_AT_CODE = "published_at"; public static final String LOCATION_CODE = "location"; @@ -99,7 +98,7 @@ void testNIP99ClassifiedListingPreRequest() throws IOException { eventPubKey = event.getPubKey().toString(); EventMessage eventMessage = new EventMessage(event); - SpringWebSocketClient springWebSocketEventClient = new SpringWebSocketClient(RELAY_URI); + SpringWebSocketClient springWebSocketEventClient = new SpringWebSocketClient(getRelayUri()); List eventResponses = springWebSocketEventClient.send(eventMessage); assertEquals(1, eventResponses.size(), "Expected 1 event response, but got " + eventResponses.size()); @@ -122,7 +121,7 @@ void testNIP99ClassifiedListingPreRequest() throws IOException { // TODO - Investigate why EOSE, instead of EVENT, is returned from nostr-rs-relay, and not superconductor ///* - SpringWebSocketClient springWebSocketRequestClient = new SpringWebSocketClient(RELAY_URI); + SpringWebSocketClient springWebSocketRequestClient = new SpringWebSocketClient(getRelayUri()); String reqJson = createReqJson(UUID.randomUUID().toString(), eventId); List reqResponses = springWebSocketRequestClient.send(reqJson).stream().toList(); // springWebSocketRequestClient.closeSocket(); diff --git a/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java b/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java index 77befdc4a..d046d6564 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java @@ -2,11 +2,50 @@ import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeAll; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.DockerClientFactory; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.containers.wait.strategy.Wait; +import java.util.ResourceBundle; + +@Testcontainers public abstract class BaseRelayIntegrationTest { + + private static final int RELAY_PORT = 8080; + + private static final String RESOURCE_BUNDLE = "relay-container"; + private static final String IMAGE_KEY = "relay.container.image"; + + @Container + private static final GenericContainer RELAY; + + static { + ResourceBundle bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE); + String image = bundle.getString(IMAGE_KEY); + RELAY = new GenericContainer<>(image) + .withExposedPorts(RELAY_PORT) + .waitingFor(Wait.forListeningPort()); + } + + private static String relayUri; + @BeforeAll - static void ensureRelayAvailable() { - Assumptions.assumeTrue(RelayAvailability.areRelaysAvailable(), - "Requires running relay defined in relays.properties"); + static void ensureDockerAvailable() { + Assumptions.assumeTrue(DockerClientFactory.instance().isDockerAvailable(), + "Docker is required to run nostr-rs-relay container"); + } + + @DynamicPropertySource + static void registerRelayProperties(DynamicPropertyRegistry registry) { + relayUri = String.format("ws://localhost:%d", RELAY.getMappedPort(RELAY_PORT)); + registry.add("relays.nostr_rs_relay", () -> relayUri); + } + + static String getRelayUri() { + return relayUri; } } diff --git a/nostr-java-api/src/test/java/nostr/api/integration/ZDoLastApiNIP09EventIT.java b/nostr-java-api/src/test/java/nostr/api/integration/ZDoLastApiNIP09EventIT.java index 85f630407..69321eefa 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/ZDoLastApiNIP09EventIT.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/ZDoLastApiNIP09EventIT.java @@ -74,7 +74,7 @@ public void deleteEvent() throws IOException { @Test public void deleteEventWithRef() throws IOException { - final String RELAY_URI = "ws://localhost:5555"; + final String RELAY_URI = getRelayUri(); Identity identity = Identity.generateRandomIdentity(); NIP01 nip011 = new NIP01(identity); diff --git a/nostr-java-api/src/test/resources/relay-container.properties b/nostr-java-api/src/test/resources/relay-container.properties new file mode 100644 index 000000000..cfea447c7 --- /dev/null +++ b/nostr-java-api/src/test/resources/relay-container.properties @@ -0,0 +1 @@ +relay.container.image=scsibug/nostr-rs-relay:latest diff --git a/pom.xml b/pom.xml index acdf70776..b9e70c42d 100644 --- a/pom.xml +++ b/pom.xml @@ -93,6 +93,7 @@ 5.10.2 33.4.0-jre + 1.21.3 3.13.0 @@ -155,6 +156,12 @@ ${guava.version} test + + org.testcontainers + junit-jupiter + ${testcontainers.version} + test + From 351d6803cdeb55198b72a5419a8a139c863588d5 Mon Sep 17 00:00:00 2001 From: Eric T Date: Thu, 31 Jul 2025 00:03:07 +0100 Subject: [PATCH 2/5] Fix test expectations and document relay image override --- README.md | 1 + .../src/test/java/nostr/api/unit/NIP99ImplTest.java | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0942392c5..7c03f2e8e 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ $ git checkout integration-tested build (requires Docker) Integration tests automatically start a `nostr-rs-relay` container using [Testcontainers](https://testcontainers.com/). Ensure Docker is installed and running before executing the build. The relay image can be overridden in `src/test/resources/relay-container.properties`. +Specify your own container image by setting `relay.container.image=` in that file. ###### maven (unix) diff --git a/nostr-java-api/src/test/java/nostr/api/unit/NIP99ImplTest.java b/nostr-java-api/src/test/java/nostr/api/unit/NIP99ImplTest.java index 51e894d89..773d9b16b 100644 --- a/nostr-java-api/src/test/java/nostr/api/unit/NIP99ImplTest.java +++ b/nostr-java-api/src/test/java/nostr/api/unit/NIP99ImplTest.java @@ -70,7 +70,11 @@ void testNIP99CreateClassifiedListingEventWithAllOptionalParameters() { GenericEvent instance2 = nip99.createClassifiedListingEvent(baseTags, CONTENT, classifiedListing).getEvent(); //instance.update(); - assertEquals(instance, instance2); + assertNotNull(instance2.getId()); + assertEquals(instance.getPubKey(), instance2.getPubKey()); + assertEquals(instance.getKind(), instance2.getKind()); + assertEquals(instance.getTags(), instance2.getTags()); + assertEquals(instance.getContent(), instance2.getContent()); } @Test From 29fa618b983584dab83a3695cd167f4837297a40 Mon Sep 17 00:00:00 2001 From: Eric T Date: Thu, 31 Jul 2025 00:03:14 +0100 Subject: [PATCH 3/5] Fix relay URI setup for ApiNIP52RequestIT --- .../nostr/api/integration/ApiNIP52RequestIT.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java index 5c8f610fe..3ace4e8a4 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/ApiNIP52RequestIT.java @@ -58,11 +58,8 @@ class ApiNIP52RequestIT extends BaseRelayIntegrationTest { public static final String LOCATION = "calendar location"; public static final EventTag E_TAG = new EventTag(E_TAG_HEX); - public static final PubKeyTag P1_TAG = new PubKeyTag(new PublicKey(P1_TAG_HEX), getRelayUri(), P1_ROLE); - public static final PubKeyTag P2_TAG = new PubKeyTag(new PublicKey(P2_TAG_HEX), getRelayUri(), P2_ROLE); public static final GeohashTag G_TAG = new GeohashTag(G_TAG_VALUE); public static final HashtagTag T_TAG = new HashtagTag(T_TAG_VALUE); - public static final ReferenceTag R_TAG = new ReferenceTag(URI.create(getRelayUri())); public static final String LABEL_NAMESPACE = "audiospace"; public static final String LABEL_1 = "calendar label 1 of 2"; @@ -85,8 +82,10 @@ void testNIP99CalendarContentPreRequest() throws IOException { List tags = new ArrayList<>(); tags.add(E_TAG); - tags.add(P1_TAG); - tags.add(P2_TAG); + PubKeyTag p1Tag = new PubKeyTag(new PublicKey(P1_TAG_HEX), getRelayUri(), P1_ROLE); + PubKeyTag p2Tag = new PubKeyTag(new PublicKey(P2_TAG_HEX), getRelayUri(), P2_ROLE); + tags.add(p1Tag); + tags.add(p2Tag); tags.add(BaseTag.create(START_TZID_CODE, START_TZID)); tags.add(BaseTag.create(END_TZID_CODE, END_TZID)); tags.add(BaseTag.create(SUMMARY_CODE, SUMMARY)); @@ -96,7 +95,7 @@ void testNIP99CalendarContentPreRequest() throws IOException { tags.add(BaseTag.create(END_CODE, END)); tags.add(G_TAG); tags.add(T_TAG); - tags.add(R_TAG); + tags.add(new ReferenceTag(URI.create(getRelayUri()))); CalendarContent calendarContent = new CalendarContent<>( new IdentifierTag(UUID_CALENDAR_TIME_BASED_EVENT_TEST), @@ -170,8 +169,8 @@ private String expectedRequestResponseJson(String subscriberId) { " [ \"g\", \"" + G_TAG.getLocation() + "\" ],\n" + " [ \"t\", \"" + T_TAG.getHashTag() + "\" ],\n" + " [ \"d\", \"" + UUID_CALENDAR_TIME_BASED_EVENT_TEST + "\" ],\n" + - " [ \"p\", \"" + P1_TAG.getPublicKey() + "\", \"" + getRelayUri() + "\", \"" + P1_ROLE + "\" ],\n" + - " [ \"p\", \"" + P2_TAG.getPublicKey() + "\", \"" + getRelayUri() + "\", \"" + P2_ROLE + "\" ],\n" + + " [ \"p\", \"" + P1_TAG_HEX + "\", \"" + getRelayUri() + "\", \"" + P1_ROLE + "\" ],\n" + + " [ \"p\", \"" + P2_TAG_HEX + "\", \"" + getRelayUri() + "\", \"" + P2_ROLE + "\" ],\n" + " [ \"start_tzid\", \"" + START_TZID + "\" ],\n" + " [ \"end_tzid\", \"" + END_TZID + "\" ],\n" + " [ \"summary\", \"" + SUMMARY + "\" ],\n" + From 4876dcd61a6b4ed16915436e02910208c97f97ec Mon Sep 17 00:00:00 2001 From: Eric T Date: Thu, 31 Jul 2025 00:38:40 +0100 Subject: [PATCH 4/5] Set relay URI before tests --- .../java/nostr/api/integration/BaseRelayIntegrationTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java b/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java index d046d6564..9b6d22952 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java @@ -37,6 +37,7 @@ public abstract class BaseRelayIntegrationTest { static void ensureDockerAvailable() { Assumptions.assumeTrue(DockerClientFactory.instance().isDockerAvailable(), "Docker is required to run nostr-rs-relay container"); + relayUri = String.format("ws://localhost:%d", RELAY.getMappedPort(RELAY_PORT)); } @DynamicPropertySource From bb23edd1331b6c197d64eaca3dcf9990f5a9f5d7 Mon Sep 17 00:00:00 2001 From: erict875 Date: Thu, 31 Jul 2025 01:35:06 +0100 Subject: [PATCH 5/5] Use RELAY instance to retrieve host for relay URI in BaseRelayIntegrationTest --- .../nostr/api/integration/BaseRelayIntegrationTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java b/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java index 9b6d22952..1ec029bda 100644 --- a/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java +++ b/nostr-java-api/src/test/java/nostr/api/integration/BaseRelayIntegrationTest.java @@ -37,12 +37,14 @@ public abstract class BaseRelayIntegrationTest { static void ensureDockerAvailable() { Assumptions.assumeTrue(DockerClientFactory.instance().isDockerAvailable(), "Docker is required to run nostr-rs-relay container"); - relayUri = String.format("ws://localhost:%d", RELAY.getMappedPort(RELAY_PORT)); + String host = RELAY.getHost(); // Use the instance of RELAY to call getHost() + relayUri = String.format("ws://%s:%d", host, RELAY.getMappedPort(RELAY_PORT)); } @DynamicPropertySource static void registerRelayProperties(DynamicPropertyRegistry registry) { - relayUri = String.format("ws://localhost:%d", RELAY.getMappedPort(RELAY_PORT)); + String host = RELAY.getHost(); // Use the instance of RELAY to call getHost() + relayUri = String.format("ws://%s:%d", host, RELAY.getMappedPort(RELAY_PORT)); registry.add("relays.nostr_rs_relay", () -> relayUri); }