Skip to content

Commit a94bd58

Browse files
committed
Update testcontainers to 2.0.2
1 parent db7ff8f commit a94bd58

File tree

3 files changed

+56
-54
lines changed

3 files changed

+56
-54
lines changed

build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,12 @@ testing {
8888
implementation(libs.assertj)
8989
implementation(libs.awaitility)
9090
implementation(libs.hivemq.mqttClient)
91-
implementation(libs.testcontainers.junitJupiter)
91+
implementation(libs.testcontainers)
9292
implementation(libs.testcontainers.hivemq)
9393
implementation(libs.testcontainers.influxdb)
94+
implementation(libs.testcontainers.junitJupiter)
9495
implementation(libs.gradleOci.junitJupiter)
95-
implementation(libs.influxdb)
96+
implementation(libs.influxdb.client)
9697
runtimeOnly(libs.logback.classic)
9798
}
9899
oci.of(this) {

gradle/libs.versions.toml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ commonsLang = "3.20.0"
55
gradleOci-junitJupiter = "0.8.0"
66
hivemq-extensionSdk = "4.1.0"
77
hivemq-mqttClient = "1.3.10"
8-
influxdb = "2.25"
8+
influxdb-client = "7.4.0"
99
jetbrains-annotations = "26.0.2-1"
1010
junit-jupiter = "5.10.0"
1111
logback = "1.5.21"
1212
metrics-influxdb = "1.3.4"
1313
mockito = "5.20.0"
14-
testcontainers = "1.21.3"
14+
testcontainers = "2.0.2"
1515
wiremock = "3.13.2"
1616

1717
[libraries]
@@ -20,14 +20,15 @@ awaitility = { module = "org.awaitility:awaitility", version.ref = "awaitility"
2020
commonsLang = { module = "org.apache.commons:commons-lang3", version.ref = "commonsLang" }
2121
gradleOci-junitJupiter = { module = "io.github.sgtsilvio:gradle-oci-junit-jupiter", version.ref = "gradleOci-junitJupiter" }
2222
hivemq-mqttClient = { module = "com.hivemq:hivemq-mqtt-client", version.ref = "hivemq-mqttClient" }
23-
influxdb = { module = "org.influxdb:influxdb-java", version.ref = "influxdb" }
23+
influxdb-client = { module = "com.influxdb:influxdb-client-java", version.ref = "influxdb-client" }
2424
jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrains-annotations" }
2525
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
2626
metrics-influxdb = { module = "com.izettle:metrics-influxdb", version.ref = "metrics-influxdb" }
2727
mockito = { module = "org.mockito:mockito-core", version.ref = "mockito" }
28-
testcontainers-hivemq = { module = "org.testcontainers:hivemq", version.ref = "testcontainers" }
29-
testcontainers-influxdb = { module = "org.testcontainers:influxdb", version.ref = "testcontainers" }
30-
testcontainers-junitJupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainers" }
28+
testcontainers = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" }
29+
testcontainers-hivemq = { module = "org.testcontainers:testcontainers-hivemq", version.ref = "testcontainers" }
30+
testcontainers-influxdb = { module = "org.testcontainers:testcontainers-influxdb", version.ref = "testcontainers" }
31+
testcontainers-junitJupiter = { module = "org.testcontainers:testcontainers-junit-jupiter", version.ref = "testcontainers" }
3132
wiremock = { module = "org.wiremock:wiremock", version.ref = "wiremock" }
3233

3334
[plugins]

src/integrationTest/java/com/hivemq/extensions/influxdb/InfluxDbExtensionIT.java

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
package com.hivemq.extensions.influxdb;
1717

1818
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client;
19+
import com.influxdb.client.InfluxDBClient;
20+
import com.influxdb.client.InfluxDBClientFactory;
21+
import com.influxdb.client.domain.InfluxQLQuery;
1922
import io.github.sgtsilvio.gradle.oci.junit.jupiter.OciImages;
20-
import org.influxdb.InfluxDB;
21-
import org.influxdb.dto.Query;
2223
import org.jetbrains.annotations.NotNull;
24+
import org.jetbrains.annotations.Nullable;
2325
import org.junit.jupiter.api.Test;
24-
import org.slf4j.Logger;
25-
import org.slf4j.LoggerFactory;
2626
import org.testcontainers.containers.InfluxDBContainer;
2727
import org.testcontainers.containers.Network;
2828
import org.testcontainers.hivemq.HiveMQContainer;
@@ -31,15 +31,12 @@
3131
import org.testcontainers.utility.MountableFile;
3232

3333
import static org.awaitility.Awaitility.await;
34-
import static org.influxdb.querybuilder.BuiltQuery.QueryBuilder.select;
3534

3635
@SuppressWarnings({"resource"})
3736
@Testcontainers
3837
public class InfluxDbExtensionIT {
3938

40-
private static final @NotNull String INFLUXDB_NAME = "hivemq";
41-
42-
private static final @NotNull Logger LOG = LoggerFactory.getLogger(InfluxDbExtensionIT.class);
39+
private static final @NotNull String INFLUXDB_DATABASE = "hivemq";
4340

4441
private final @NotNull Network network = Network.newNetwork();
4542

@@ -50,7 +47,8 @@ public class InfluxDbExtensionIT {
5047
.withNetwork(network)
5148
.withCopyToContainer(MountableFile.forClasspathResource("influxdb.properties"),
5249
"/opt/hivemq/extensions/hivemq-influxdb-extension/influxdb.properties")
53-
.withLogConsumer(outputFrame -> System.out.print("HIVEMQ: " + outputFrame.getUtf8String()));
50+
.withLogConsumer(outputFrame -> System.out.print("HIVEMQ: " + outputFrame.getUtf8String()))
51+
.withEnv("HIVEMQ_DISABLE_STATISTICS", "true");
5452

5553
@Container
5654
private final @NotNull InfluxDBContainer<?> influxDB =
@@ -60,49 +58,51 @@ public class InfluxDbExtensionIT {
6058

6159
@Test
6260
void testMetricsAreForwardedToInfluxDB() {
63-
final var influxDbClient = influxDB.getNewInfluxDB();
64-
influxDbClient.setDatabase("hivemq");
65-
66-
final var query = influxDbClient.query(new Query("CREATE DATABASE \"" + INFLUXDB_NAME + "\""));
67-
LOG.info("created database with query result: {}", query);
68-
influxDbClient.setDatabase(INFLUXDB_NAME);
61+
try (final var influxDBClient = InfluxDBClientFactory.create(influxDB.getUrl())) {
62+
final var createDbQuery = new InfluxQLQuery("CREATE DATABASE \"%s\"".formatted(INFLUXDB_DATABASE), "");
63+
influxDBClient.getInfluxQLQueryApi().query(createDbQuery);
6964

70-
final var mqttClient =
71-
Mqtt5Client.builder().serverHost(hivemq.getHost()).serverPort(hivemq.getMqttPort()).buildBlocking();
72-
mqttClient.connect();
73-
mqttClient.publishWith().topic("my/topic1").send();
74-
mqttClient.publishWith().topic("my/topic2").send();
75-
mqttClient.publishWith().topic("my/topic3").send();
76-
mqttClient.disconnect();
65+
final var mqttClient =
66+
Mqtt5Client.builder().serverHost(hivemq.getHost()).serverPort(hivemq.getMqttPort()).buildBlocking();
67+
mqttClient.connect();
68+
mqttClient.publishWith().topic("my/topic1").send();
69+
mqttClient.publishWith().topic("my/topic2").send();
70+
mqttClient.publishWith().topic("my/topic3").send();
71+
mqttClient.disconnect();
7772

78-
await().until(() -> getMetricMax(influxDbClient, "com.hivemq.messages.incoming.publish.count") == 3);
79-
await().until(() -> getMetricMax(influxDbClient, "com.hivemq.messages.incoming.connect.count") == 1);
73+
await().until(() -> getMetricMax(influxDBClient, "com.hivemq.messages.incoming.publish.count") == 3);
74+
await().until(() -> getMetricMax(influxDBClient, "com.hivemq.messages.incoming.connect.count") == 1);
75+
}
8076
}
8177

82-
private long getMetricMax(final @NotNull InfluxDB client, final @NotNull String metric) {
83-
var acc = 0L;
84-
final var queryResult = client.query(select("count").from(INFLUXDB_NAME, metric));
85-
for (final var result : queryResult.getResults()) {
86-
final var series = result.getSeries();
87-
if (series == null) {
88-
break;
89-
}
90-
final var values = series.get(series.size() - 1).getValues();
91-
if (values == null) {
92-
break;
93-
}
94-
long max = 0;
95-
for (final var value : values) {
96-
if (value == null) {
97-
break;
98-
}
99-
final var val = (double) value.get(1);
100-
if (max < val) {
101-
max = (long) val;
78+
private long getMetricMax(final @NotNull InfluxDBClient client, final @NotNull String metric) {
79+
final var influxQL = String.format("SELECT MAX(count) FROM \"%s\"", metric);
80+
final var query = new InfluxQLQuery(influxQL, INFLUXDB_DATABASE);
81+
final var result = client.getInfluxQLQueryApi().query(query);
82+
long max = 0;
83+
for (final var queryResult : result.getResults()) {
84+
for (final var series : queryResult.getSeries()) {
85+
for (final var record : series.getValues()) {
86+
final var value = getValue(record.getValueByKey("max"));
87+
if (value > max) {
88+
max = value;
89+
}
10290
}
10391
}
104-
acc += max;
10592
}
106-
return acc;
93+
return max;
94+
}
95+
96+
private static long getValue(final @Nullable Object valueField) {
97+
if (valueField instanceof Number) {
98+
return ((Number) valueField).longValue();
99+
} else if (valueField != null) {
100+
try {
101+
// try to parse as double if it's a string
102+
return (long) Double.parseDouble(valueField.toString());
103+
} catch (final NumberFormatException ignored) {
104+
}
105+
}
106+
return Long.MIN_VALUE;
107107
}
108108
}

0 commit comments

Comments
 (0)