From 1c6f6f0e90ca4a5810e983f5571966484ec45ff9 Mon Sep 17 00:00:00 2001 From: Milenko Supic Date: Thu, 29 Jun 2023 10:09:38 +0200 Subject: [PATCH] Added metadata for io.nats:jnats:2.16.11 (#311) * Added metadata for io.nats:jnats:2.16.11 * Changed nats docker image version --- metadata/index.json | 7 ++ metadata/io.nats/jnats/2.16.11/index.json | 3 + .../io.nats/jnats/2.16.11/reflect-config.json | 16 ++++ metadata/io.nats/jnats/index.json | 10 ++ tests/src/index.json | 11 +++ tests/src/io.nats/jnats/2.16.11/.gitignore | 4 + tests/src/io.nats/jnats/2.16.11/build.gradle | 29 ++++++ .../io.nats/jnats/2.16.11/gradle.properties | 2 + .../jnats/2.16.11/metadata-extra-filter.json | 5 + .../2.16.11/metadata-user-code-filter.json | 5 + .../jnats/2.16.11/required-docker-images.txt | 1 + .../src/io.nats/jnats/2.16.11/settings.gradle | 13 +++ .../test/java/io_nats/jnats/JnatsTest.java | 95 +++++++++++++++++++ 13 files changed, 201 insertions(+) create mode 100644 metadata/io.nats/jnats/2.16.11/index.json create mode 100644 metadata/io.nats/jnats/2.16.11/reflect-config.json create mode 100644 metadata/io.nats/jnats/index.json create mode 100644 tests/src/io.nats/jnats/2.16.11/.gitignore create mode 100644 tests/src/io.nats/jnats/2.16.11/build.gradle create mode 100644 tests/src/io.nats/jnats/2.16.11/gradle.properties create mode 100644 tests/src/io.nats/jnats/2.16.11/metadata-extra-filter.json create mode 100644 tests/src/io.nats/jnats/2.16.11/metadata-user-code-filter.json create mode 100644 tests/src/io.nats/jnats/2.16.11/required-docker-images.txt create mode 100644 tests/src/io.nats/jnats/2.16.11/settings.gradle create mode 100644 tests/src/io.nats/jnats/2.16.11/src/test/java/io_nats/jnats/JnatsTest.java diff --git a/metadata/index.json b/metadata/index.json index 18af7ac0..fdc186f1 100644 --- a/metadata/index.json +++ b/metadata/index.json @@ -160,6 +160,13 @@ "io.netty" ] }, + { + "directory" : "io.nats/jnats", + "module" : "io.nats:jnats", + "allowed-packages" : [ + "io.nats" + ] + }, { "directory": "mysql/mysql-connector-java", "module": "mysql:mysql-connector-java", diff --git a/metadata/io.nats/jnats/2.16.11/index.json b/metadata/io.nats/jnats/2.16.11/index.json new file mode 100644 index 00000000..768b5502 --- /dev/null +++ b/metadata/io.nats/jnats/2.16.11/index.json @@ -0,0 +1,3 @@ +[ + "reflect-config.json" +] diff --git a/metadata/io.nats/jnats/2.16.11/reflect-config.json b/metadata/io.nats/jnats/2.16.11/reflect-config.json new file mode 100644 index 00000000..062de84c --- /dev/null +++ b/metadata/io.nats/jnats/2.16.11/reflect-config.json @@ -0,0 +1,16 @@ +[ + { + "name": "io.nats.client.impl.SocketDataPort", + "condition": { + "typeReachable": "io.nats.client.Options$Builder" + }, + "methods": [ + { + "name": "", + "parameterTypes": [ + + ] + } + ] + } +] diff --git a/metadata/io.nats/jnats/index.json b/metadata/io.nats/jnats/index.json new file mode 100644 index 00000000..69c72fc1 --- /dev/null +++ b/metadata/io.nats/jnats/index.json @@ -0,0 +1,10 @@ +[ + { + "latest": true, + "metadata-version": "2.16.11", + "module": "io.nats:jnats", + "tested-versions": [ + "2.16.11" + ] + } +] diff --git a/tests/src/index.json b/tests/src/index.json index db36351f..737db0e2 100644 --- a/tests/src/index.json +++ b/tests/src/index.json @@ -219,6 +219,17 @@ } ] }, + { + "test-project-path" : "io.nats/jnats/2.16.11", + "libraries" : [ + { + "name" : "io.nats:jnats", + "versions" : [ + "2.16.11" + ] + } + ] + }, { "test-project-path": "mysql/mysql-connector-java/8.0.29", "libraries": [ diff --git a/tests/src/io.nats/jnats/2.16.11/.gitignore b/tests/src/io.nats/jnats/2.16.11/.gitignore new file mode 100644 index 00000000..c98c7875 --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/.gitignore @@ -0,0 +1,4 @@ +gradlew.bat +gradlew +gradle/ +build/ diff --git a/tests/src/io.nats/jnats/2.16.11/build.gradle b/tests/src/io.nats/jnats/2.16.11/build.gradle new file mode 100644 index 00000000..fd2f61d2 --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/build.gradle @@ -0,0 +1,29 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ + +plugins { + id "org.graalvm.internal.tck" +} + +String libraryVersion = tck.testedLibraryVersion.get() + +dependencies { + testImplementation "io.nats:jnats:$libraryVersion" + testImplementation 'org.assertj:assertj-core:3.22.0' +} + +graalvmNative { + agent { + defaultMode = "conditional" + modes { + conditional { + userCodeFilterPath = "metadata-user-code-filter.json" + extraFilterPath = "metadata-extra-filter.json" + } + } + } +} diff --git a/tests/src/io.nats/jnats/2.16.11/gradle.properties b/tests/src/io.nats/jnats/2.16.11/gradle.properties new file mode 100644 index 00000000..27bc367d --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/gradle.properties @@ -0,0 +1,2 @@ +library.version = 2.16.11 +metadata.dir = io.nats/jnats/2.16.11/ diff --git a/tests/src/io.nats/jnats/2.16.11/metadata-extra-filter.json b/tests/src/io.nats/jnats/2.16.11/metadata-extra-filter.json new file mode 100644 index 00000000..6b97e0c6 --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/metadata-extra-filter.json @@ -0,0 +1,5 @@ +{ + "rules": [ + {"includeClasses": "io.nats.**"} + ] +} \ No newline at end of file diff --git a/tests/src/io.nats/jnats/2.16.11/metadata-user-code-filter.json b/tests/src/io.nats/jnats/2.16.11/metadata-user-code-filter.json new file mode 100644 index 00000000..6b97e0c6 --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/metadata-user-code-filter.json @@ -0,0 +1,5 @@ +{ + "rules": [ + {"includeClasses": "io.nats.**"} + ] +} \ No newline at end of file diff --git a/tests/src/io.nats/jnats/2.16.11/required-docker-images.txt b/tests/src/io.nats/jnats/2.16.11/required-docker-images.txt new file mode 100644 index 00000000..0d02d4fe --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/required-docker-images.txt @@ -0,0 +1 @@ +nats:2.9.19 \ No newline at end of file diff --git a/tests/src/io.nats/jnats/2.16.11/settings.gradle b/tests/src/io.nats/jnats/2.16.11/settings.gradle new file mode 100644 index 00000000..9e68eed6 --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/settings.gradle @@ -0,0 +1,13 @@ +pluginManagement { + def tckPath = Objects.requireNonNullElse( + System.getenv("GVM_TCK_TCKDIR"), + "../../../../tck-build-logic" + ) + includeBuild(tckPath) +} + +plugins { + id "org.graalvm.internal.tck-settings" version "1.0.0-SNAPSHOT" +} + +rootProject.name = 'io.nats.jnats_tests' diff --git a/tests/src/io.nats/jnats/2.16.11/src/test/java/io_nats/jnats/JnatsTest.java b/tests/src/io.nats/jnats/2.16.11/src/test/java/io_nats/jnats/JnatsTest.java new file mode 100644 index 00000000..7bcfc50c --- /dev/null +++ b/tests/src/io.nats/jnats/2.16.11/src/test/java/io_nats/jnats/JnatsTest.java @@ -0,0 +1,95 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ +package io_nats.jnats; + +import io.nats.client.Connection; +import io.nats.client.Dispatcher; +import io.nats.client.Nats; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +import static org.assertj.core.api.Assertions.assertThat; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class JnatsTest { + + private Process process; + + @BeforeAll + public void init() throws IOException { + System.out.println("Starting NATS ..."); + process = new ProcessBuilder("docker", "run", "--rm", "-p", "4222:4222", "nats:2.9.19").inheritIO().start(); + + waitUntil(() -> { + openConnection().close(); + return true; + }, 120, 1); + + System.out.println("NATS started"); + } + + @AfterAll + public void close() { + if (process != null && process.isAlive()) { + System.out.println("Shutting down NATS"); + process.destroy(); + } + } + + // not using Awaitility library because of `com.oracle.svm.core.jdk.UnsupportedFeatureError: ThreadMXBean methods` issue + // which happens if a condition is not fulfilled when a test is running in a native image + private void waitUntil(Callable conditionEvaluator, int timeoutSeconds, int sleepTimeSeconds) { + Exception lastException = null; + + long end = System.currentTimeMillis() + timeoutSeconds * 1000L; + while (System.currentTimeMillis() < end) { + try { + Thread.sleep(sleepTimeSeconds * 1000L); + } catch (InterruptedException e) { + // continue + } + try { + if (conditionEvaluator.call()) { + return; + } + } catch (Exception e) { + lastException = e; + } + } + String errorMessage = "Condition was not fulfilled within " + timeoutSeconds + " seconds"; + throw lastException == null ? new IllegalStateException(errorMessage) : new IllegalStateException(errorMessage, lastException); + } + + private Connection openConnection() throws Exception { + return Nats.connect(); + } + + @Test + void test() throws Exception { + try (Connection connection = openConnection()) { + final List receivedMessages = new ArrayList<>(); + Dispatcher dispatcher = connection.createDispatcher((msg) -> receivedMessages.add(new String(msg.getData(), StandardCharsets.UTF_8))); + dispatcher.subscribe("test-subject"); + + connection.publish("test-subject", "test-message".getBytes(StandardCharsets.UTF_8)); + + waitUntil(() -> !receivedMessages.isEmpty(), 10, 1); + + assertThat(receivedMessages) + .hasSize(1) + .containsExactly("test-message"); + } + } +}