Skip to content

Commit 2adde82

Browse files
committed
- Use the GradleOCI plugin instead of JIB
- Support arm64v8 platforms - Use original HiveMQ Testcontainers plugin
1 parent cf40e4a commit 2adde82

18 files changed

+259
-229
lines changed

build.gradle.kts

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ plugins {
2323
alias(libs.plugins.defaults)
2424
alias(libs.plugins.nebula.ospackage)
2525
alias(libs.plugins.launch4j)
26+
alias(libs.plugins.oci)
2627
alias(libs.plugins.openapi.generator)
27-
alias(libs.plugins.jib)
2828
alias(libs.plugins.license)
2929
alias(libs.plugins.forbiddenApis)
3030
alias(libs.plugins.githubRelease)
@@ -242,9 +242,10 @@ testing {
242242

243243
dependencies {
244244
implementation(libs.awaitility)
245-
implementation(libs.hivemq.testcontainer.junit5)
245+
implementation(libs.gradleOci.junitJupiter)
246246
implementation(libs.mockito)
247-
implementation(libs.testcontainers)
247+
implementation(libs.testcontainers.junitJupiter)
248+
implementation(libs.testcontainers.hivemq)
248249

249250
implementation(libs.dagger)
250251
implementation(libs.gson)
@@ -255,6 +256,10 @@ testing {
255256
implementation(libs.tinylog.api)
256257
implementation(project())
257258
}
259+
260+
ociImageDependencies {
261+
runtime("hivemq:hivemq4:latest") { isChanging = true }
262+
}
258263
}
259264

260265
val systemTest by registering(JvmTestSuite::class) {
@@ -283,17 +288,22 @@ testing {
283288

284289
dependencies {
285290
implementation(libs.awaitility)
291+
implementation(libs.gradleOci.junitJupiter)
286292
implementation(libs.hivemq.communityEditionEmbedded)
287-
implementation(libs.hivemq.testcontainer.junit5)
288293
implementation(libs.junit.pioneer)
289294
implementation(libs.junit.platformLauncher)
290-
implementation(libs.testcontainers)
295+
implementation(libs.testcontainers.hivemq)
296+
implementation(libs.testcontainers.junitJupiter)
291297

292298
implementation(libs.apache.commonsIO)
293299
implementation(libs.gson)
294300
implementation(libs.guava)
295301
implementation(libs.hivemq.mqttClient)
296302
}
303+
304+
ociImageDependencies {
305+
runtime(project).tag("latest")
306+
}
297307
}
298308

299309
tasks.named("check") {
@@ -595,17 +605,49 @@ gitPublish {
595605

596606
/* ******************** docker ******************** */
597607

598-
jib {
599-
from {
600-
image = "openjdk:11-jre-slim-buster"
608+
oci {
609+
registries {
610+
dockerHub {
611+
optionalCredentials()
612+
}
601613
}
602-
to {
603-
image = "hivemq/mqtt-cli"
604-
tags = setOf(project.version.toString())
605-
auth {
606-
username = System.getenv("DOCKER_USER") ?: ""
607-
password = System.getenv("DOCKER_PASSWORD") ?: ""
614+
imageDefinitions.register("main") {
615+
allPlatforms {
616+
parentImages {
617+
add("library:eclipse-temurin:sha256!603d23272e30bbefa9e7c436a7165c6303b9c67e27aae07472d8ddc748fe96a2") // 21.0.2_13-jre-jammy
618+
}
619+
config {
620+
entryPoint.add("java")
621+
entryPoint.addAll(application.applicationDefaultJvmArgs)
622+
entryPoint.addAll(
623+
"-cp",
624+
"/app/classpath/*:/app/libs/*",
625+
)
626+
entryPoint.add(application.mainClass)
627+
}
628+
layers {
629+
layer("libs") {
630+
contents {
631+
from(configurations.runtimeClasspath)
632+
into("app/libs")
633+
}
634+
}
635+
layer("jar") {
636+
contents {
637+
from(tasks.jar)
638+
into("app/classpath")
639+
rename(".*", "${project.name}-${project.version}.jar")
640+
}
641+
}
642+
layer("resources") {
643+
contents {
644+
from("src/distribution")
645+
}
646+
}
647+
}
608648
}
649+
specificPlatform(platform("linux", "amd64"))
650+
specificPlatform(platform("linux", "arm64", "v8"))
609651
}
610652
}
611653

gradle/libs.versions.toml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ awaitility = "4.2.1"
66
bouncycastle = "1.78.1"
77
dagger = "2.51.1"
88
graalvm-nativeImage-svm = "24.0.1"
9+
gradleOci-junitJupiter = "0.5.0"
910
gson = "2.11.0"
1011
gsonFire = "1.9.0"
1112
guava = "33.2.1-jre"
@@ -39,14 +40,14 @@ bouncycastle-prov = { module = "org.bouncycastle:bcprov-jdk18on", version.ref =
3940
dagger = { module = "com.google.dagger:dagger", version.ref = "dagger" }
4041
dagger-compiler = { module = "com.google.dagger:dagger-compiler", version.ref = "dagger" }
4142
graalvm-nativeImage-svm = { module = "org.graalvm.nativeimage:svm", version.ref = "graalvm-nativeImage-svm" }
43+
gradleOci-junitJupiter = { module = "io.github.sgtsilvio:gradle-oci-junit-jupiter", version.ref = "gradleOci-junitJupiter" }
4244
gson = { module = "com.google.code.gson:gson", version.ref = "gson" }
4345
gsonFire = { module = "io.gsonfire:gson-fire", version.ref = "gsonFire" }
4446
guava = { module = "com.google.guava:guava", version.ref = "guava" }
4547
hivemq-communityEditionEmbedded = { module = "com.hivemq:hivemq-community-edition-embedded", version.ref = "hivemq-communityEditionEmbedded" }
4648
hivemq-enterprise = { module = "com.hivemq:hivemq-enterprise" }
4749
hivemq-mqttClient = { module = "com.hivemq:hivemq-mqtt-client", version.ref = "hivemq-mqttClient" }
4850
hivemq-swarm = { module = "com.hivemq:hivemq-swarm" }
49-
hivemq-testcontainer-junit5 = { module = "com.hivemq:hivemq-testcontainer-junit5", version.ref = "hivemq-testcontainer" }
5051
javax-annotation-api = { module = "javax.annotation:javax.annotation-api", version.ref = "javax-annotation-api" }
5152
jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrains-annotations" }
5253
jline = { module = "org.jline:jline", version.ref = "jline" }
@@ -67,7 +68,8 @@ picocli = { module = "info.picocli:picocli", version.ref = "picocli" }
6768
picocli-codegen = { module = "info.picocli:picocli-codegen", version.ref = "picocli" }
6869
picocli-shellJline = { module = "info.picocli:picocli-shell-jline3", version.ref = "picocli" }
6970
swagger-annotations = { module = "io.swagger:swagger-annotations", version.ref = "swagger-annotations" }
70-
testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" }
71+
testcontainers-hivemq = { module = "org.testcontainers:hivemq", version.ref = "testcontainers" }
72+
testcontainers-junitJupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers" }
7173
tinylog-api = { module = "org.tinylog:tinylog-api", version.ref = "tinylog" }
7274
tinylog-impl = { module = "org.tinylog:tinylog-impl", version.ref = "tinylog" }
7375

@@ -77,9 +79,9 @@ forbiddenApis = { id = "de.thetaphi.forbiddenapis", version = "3.7" }
7779
gitPublish = { id = "org.ajoberstar.git-publish", version = "4.2.2" }
7880
githubRelease = { id = "com.github.breadmoirai.github-release", version = "2.5.2" }
7981
graalvm-native = { id = "org.graalvm.buildtools.native", version = "0.10.2" }
80-
jib = { id = "com.google.cloud.tools.jib", version = "3.4.3" }
8182
launch4j = { id = "edu.sc.seis.launch4j", version = "3.0.5" }
8283
license = { id = "com.github.hierynomus.license", version = "0.16.1" }
8384
nebula-ospackage = { id = "com.netflix.nebula.ospackage", version = "11.9.1" }
85+
oci = { id = "io.github.sgtsilvio.gradle.oci", version = "0.10.0" }
8486
openapi-generator = { id = "org.openapi.generator", version = "4.3.1" } # >= 5.0.0 breaks the tasks
8587
shadow = { id = "com.github.johnrengelman.shadow", version = "8.1.1" }

src/integrationTest/java/com/hivemq/cli/commands/cli/TestBrokerCommandDefaultIT.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,29 @@
1818

1919
import com.hivemq.cli.MqttCLIMain;
2020
import com.hivemq.cli.utils.TestLoggerUtils;
21-
import com.hivemq.testcontainer.junit5.HiveMQTestContainerExtension;
21+
import io.github.sgtsilvio.gradle.oci.junit.jupiter.OciImages;
2222
import org.jetbrains.annotations.NotNull;
23-
import org.junit.jupiter.api.AfterAll;
24-
import org.junit.jupiter.api.BeforeAll;
2523
import org.junit.jupiter.api.BeforeEach;
2624
import org.junit.jupiter.api.Disabled;
2725
import org.junit.jupiter.api.Test;
28-
import org.testcontainers.utility.DockerImageName;
26+
import org.testcontainers.hivemq.HiveMQContainer;
27+
import org.testcontainers.junit.jupiter.Container;
28+
import org.testcontainers.junit.jupiter.Testcontainers;
2929

3030
import static org.junit.jupiter.api.Assertions.assertEquals;
3131

3232
@Disabled("Tests are only used to check output")
33+
@Testcontainers
3334
class TestBrokerCommandDefaultIT {
3435

35-
private static final @NotNull HiveMQTestContainerExtension hivemq =
36-
new HiveMQTestContainerExtension(DockerImageName.parse("hivemq/hivemq4"));
37-
38-
@BeforeAll
39-
static void beforeAll() {
40-
hivemq.start();
41-
}
36+
@Container
37+
private final @NotNull HiveMQContainer hivemq = new HiveMQContainer(OciImages.getImageName("hivemq/hivemq4"));
4238

4339
@BeforeEach
4440
void setUp() {
4541
TestLoggerUtils.resetLogger();
4642
}
4743

48-
@AfterAll
49-
static void afterAll() {
50-
hivemq.stop();
51-
}
52-
5344
@Test
5445
void mqtt3_failed_connect() {
5546
assertEquals(0, MqttCLIMain.mainWithExitCode("test", "-V", "3"));

src/integrationTest/java/com/hivemq/cli/commands/cli/TestBrokerCommandQos0IT.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,32 @@
1818

1919
import com.hivemq.cli.MqttCLIMain;
2020
import com.hivemq.cli.utils.TestLoggerUtils;
21-
import com.hivemq.testcontainer.junit5.HiveMQTestContainerExtension;
21+
import io.github.sgtsilvio.gradle.oci.junit.jupiter.OciImages;
2222
import org.jetbrains.annotations.NotNull;
23-
import org.junit.jupiter.api.AfterAll;
24-
import org.junit.jupiter.api.BeforeAll;
2523
import org.junit.jupiter.api.BeforeEach;
2624
import org.junit.jupiter.api.Disabled;
2725
import org.junit.jupiter.api.Test;
28-
import org.testcontainers.utility.DockerImageName;
26+
import org.testcontainers.hivemq.HiveMQContainer;
27+
import org.testcontainers.junit.jupiter.Container;
28+
import org.testcontainers.junit.jupiter.Testcontainers;
2929
import org.testcontainers.utility.MountableFile;
3030

3131
import static org.junit.jupiter.api.Assertions.assertEquals;
3232

3333
@Disabled("Tests are only used to check output")
34+
@Testcontainers
3435
class TestBrokerCommandQos0IT {
3536

36-
private static final @NotNull HiveMQTestContainerExtension hivemq =
37-
new HiveMQTestContainerExtension(DockerImageName.parse("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
37+
@Container
38+
private final @NotNull HiveMQContainer hivemq =
39+
new HiveMQContainer(OciImages.getImageName("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
3840
"mqtt/test/qos0-config.xml"));
3941

40-
@BeforeAll
41-
static void beforeAll() {
42-
hivemq.start();
43-
}
44-
4542
@BeforeEach
4643
void setUp() {
4744
TestLoggerUtils.resetLogger();
4845
}
4946

50-
@AfterAll
51-
static void afterAll() {
52-
hivemq.stop();
53-
}
54-
5547
@Test
5648
void qos0_restricted_mqtt3_features() {
5749
assertEquals(0, MqttCLIMain.mainWithExitCode("test", "-V", "3", "-p", String.valueOf(hivemq.getMqttPort())));

src/integrationTest/java/com/hivemq/cli/commands/cli/TestBrokerCommandQos1IT.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,32 @@
1818

1919
import com.hivemq.cli.MqttCLIMain;
2020
import com.hivemq.cli.utils.TestLoggerUtils;
21-
import com.hivemq.testcontainer.junit5.HiveMQTestContainerExtension;
21+
import io.github.sgtsilvio.gradle.oci.junit.jupiter.OciImages;
2222
import org.jetbrains.annotations.NotNull;
23-
import org.junit.jupiter.api.AfterAll;
24-
import org.junit.jupiter.api.BeforeAll;
2523
import org.junit.jupiter.api.BeforeEach;
2624
import org.junit.jupiter.api.Disabled;
2725
import org.junit.jupiter.api.Test;
28-
import org.testcontainers.utility.DockerImageName;
26+
import org.testcontainers.hivemq.HiveMQContainer;
27+
import org.testcontainers.junit.jupiter.Container;
28+
import org.testcontainers.junit.jupiter.Testcontainers;
2929
import org.testcontainers.utility.MountableFile;
3030

3131
import static org.junit.jupiter.api.Assertions.assertEquals;
3232

3333
@Disabled("Tests are only used to check output")
34+
@Testcontainers
3435
class TestBrokerCommandQos1IT {
3536

36-
static final @NotNull HiveMQTestContainerExtension hivemq =
37-
new HiveMQTestContainerExtension(DockerImageName.parse("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
37+
@Container
38+
private final @NotNull HiveMQContainer hivemq =
39+
new HiveMQContainer(OciImages.getImageName("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
3840
"mqtt/test/qos1-config.xml"));
3941

40-
@BeforeAll
41-
static void beforeAll() {
42-
hivemq.start();
43-
}
44-
4542
@BeforeEach
4643
void setUp() {
4744
TestLoggerUtils.resetLogger();
4845
}
4946

50-
@AfterAll
51-
static void afterAll() {
52-
hivemq.stop();
53-
}
54-
5547
@Test
5648
void qos1_restricted_mqtt3_features() {
5749
assertEquals(0, MqttCLIMain.mainWithExitCode("test", "-V", "3", "-p", String.valueOf(hivemq.getMqttPort())));

src/integrationTest/java/com/hivemq/cli/commands/cli/TestBrokerCommandRestrictedIT.java

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,32 @@
1818

1919
import com.hivemq.cli.MqttCLIMain;
2020
import com.hivemq.cli.utils.TestLoggerUtils;
21-
import com.hivemq.testcontainer.junit5.HiveMQTestContainerExtension;
21+
import io.github.sgtsilvio.gradle.oci.junit.jupiter.OciImages;
2222
import org.jetbrains.annotations.NotNull;
23-
import org.junit.jupiter.api.AfterAll;
24-
import org.junit.jupiter.api.BeforeAll;
2523
import org.junit.jupiter.api.BeforeEach;
2624
import org.junit.jupiter.api.Disabled;
2725
import org.junit.jupiter.api.Test;
28-
import org.testcontainers.utility.DockerImageName;
26+
import org.testcontainers.hivemq.HiveMQContainer;
27+
import org.testcontainers.junit.jupiter.Container;
28+
import org.testcontainers.junit.jupiter.Testcontainers;
2929
import org.testcontainers.utility.MountableFile;
3030

3131
import static org.junit.jupiter.api.Assertions.assertEquals;
3232

3333
@Disabled("Tests are only used to check output")
34+
@Testcontainers
3435
class TestBrokerCommandRestrictedIT {
3536

36-
static final @NotNull HiveMQTestContainerExtension hivemq =
37-
new HiveMQTestContainerExtension(DockerImageName.parse("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
37+
@Container
38+
private final @NotNull HiveMQContainer hivemq =
39+
new HiveMQContainer(OciImages.getImageName("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
3840
"mqtt/test/restricted-config.xml"));
3941

40-
@BeforeAll
41-
static void beforeAll() {
42-
hivemq.start();
43-
}
44-
4542
@BeforeEach
4643
void setUp() {
4744
TestLoggerUtils.resetLogger();
4845
}
4946

50-
@AfterAll
51-
static void afterAll() {
52-
hivemq.stop();
53-
}
54-
5547
@Test
5648
void restricted_mqtt3_features() {
5749
assertEquals(0, MqttCLIMain.mainWithExitCode("test", "-V", "3", "-p", String.valueOf(hivemq.getMqttPort())));

src/integrationTest/java/com/hivemq/cli/commands/hivemq/export/clients/ExportClientsCommandIT.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,19 @@
1919
import com.hivemq.cli.utils.TestLoggerUtils;
2020
import com.hivemq.client.mqtt.mqtt5.Mqtt5BlockingClient;
2121
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client;
22-
import com.hivemq.testcontainer.junit5.HiveMQTestContainerExtension;
2322
import com.opencsv.CSVParser;
2423
import com.opencsv.CSVParserBuilder;
2524
import com.opencsv.CSVReader;
2625
import com.opencsv.CSVReaderBuilder;
2726
import com.opencsv.exceptions.CsvException;
27+
import io.github.sgtsilvio.gradle.oci.junit.jupiter.OciImages;
2828
import org.jetbrains.annotations.NotNull;
2929
import org.junit.jupiter.api.AfterEach;
3030
import org.junit.jupiter.api.BeforeEach;
3131
import org.junit.jupiter.api.Test;
32-
import org.junit.jupiter.api.extension.RegisterExtension;
33-
import org.testcontainers.utility.DockerImageName;
32+
import org.testcontainers.hivemq.HiveMQContainer;
33+
import org.testcontainers.junit.jupiter.Container;
34+
import org.testcontainers.junit.jupiter.Testcontainers;
3435
import org.testcontainers.utility.MountableFile;
3536
import picocli.CommandLine;
3637

@@ -42,15 +43,15 @@
4243
import static org.junit.jupiter.api.Assertions.assertEquals;
4344
import static org.junit.jupiter.api.Assertions.assertTrue;
4445

46+
@Testcontainers
4547
class ExportClientsCommandIT {
4648

4749
public static final int HTTP_PORT = 8888;
4850

49-
@RegisterExtension
50-
final @NotNull HiveMQTestContainerExtension hivemq =
51-
new HiveMQTestContainerExtension(DockerImageName.parse("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
52-
"hivemq.configs/rest-api-config.xml"))
53-
.withExposedPorts(HiveMQTestContainerExtension.MQTT_PORT, HTTP_PORT);
51+
@Container
52+
private final @NotNull HiveMQContainer hivemq =
53+
new HiveMQContainer(OciImages.getImageName("hivemq/hivemq4")).withHiveMQConfig(MountableFile.forClasspathResource(
54+
"hivemq.configs/rest-api-config.xml")).withExposedPorts(1883, HTTP_PORT);
5455

5556
private @NotNull File file;
5657

0 commit comments

Comments
 (0)