Skip to content

Commit 020eef8

Browse files
committed
test: fix Java 11 test compatibility and CI failures
Enable required annotation processors, silence Java 11 compiler warnings, and improve CCM cleanup logging so integration failures are easier to diagnose. Update tests for newer Mockito behavior by avoiding shared MockitoJUnitRunner usage in parallel integration tests and by verifying cache interactions explicitly where the mock behavior changed. Fix CI failures exposed by the updated validation matrix: provide Micrometer histogram bounds in the no-SLA test, register config-change listeners before manual reloads, avoid assuming a transient one-connection node state before reconnection wins the race, and validate prepared-statement invalidation through observable cache behavior instead of a test-only removal-listener latch.
1 parent 7dbf5fa commit 020eef8

13 files changed

Lines changed: 148 additions & 24 deletions

File tree

core/src/test/java/com/datastax/oss/driver/internal/core/metadata/MetadataManagerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,9 +389,9 @@ public void refreshSchema_should_drain_queued_refresh_after_newInstance_failure(
389389
CompletionStage<MetadataManager.RefreshSchemaResult> result2 =
390390
metadataManager.refreshSchema("bar", true, true);
391391

392-
// Now complete the agreement check - first refresh will fail at newInstance(),
393-
// and onSchemaRefreshComplete should drain the queued second refresh
394-
agreementFuture.complete(true);
392+
// Now complete the agreement check on the admin event loop - first refresh will fail at
393+
// newInstance(), and onSchemaRefreshComplete should drain the queued second refresh.
394+
adminEventLoopGroup.next().execute(() -> agreementFuture.complete(true));
395395

396396
// Then both requests should complete (not hang forever)
397397
waitForPendingAdminTasks(

examples/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@
151151
<source>11</source>
152152
<target>11</target>
153153
<annotationProcessorPaths>
154+
<path>
155+
<groupId>com.google.errorprone</groupId>
156+
<artifactId>error_prone_core</artifactId>
157+
<version>2.31.0</version>
158+
</path>
154159
<path>
155160
<groupId>com.scylladb</groupId>
156161
<artifactId>java-driver-mapper-processor</artifactId>

examples/src/main/java/com/datastax/oss/driver/examples/paging/ForwardPagingRestUi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private static void populateSchema(CqlSession session) {
119119
int videoid = i * 100 + j;
120120
session.execute(
121121
prepare.bind(
122-
i, "user " + i, Instant.ofEpochMilli(j * 100000), videoid, "video " + videoid));
122+
i, "user " + i, Instant.ofEpochMilli(j * 100000L), videoid, "video " + videoid));
123123
}
124124
}
125125
}

examples/src/main/java/com/datastax/oss/driver/examples/paging/RandomPagingRestUi.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private static void populateSchema(CqlSession session) {
129129
int videoid = i * 100 + j;
130130
session.execute(
131131
prepare.bind(
132-
i, "user " + i, Instant.ofEpochMilli(j * 100000), videoid, "video " + videoid));
132+
i, "user " + i, Instant.ofEpochMilli(j * 100000L), videoid, "video " + videoid));
133133
}
134134
}
135135
}

integration-tests/pom.xml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,42 @@
231231
</dependencies>
232232
<build>
233233
<plugins>
234+
<plugin>
235+
<artifactId>maven-compiler-plugin</artifactId>
236+
<configuration>
237+
<compilerArgs combine.children="append">
238+
<compilerArg>-processor</compilerArg>
239+
<compilerArg>com.datastax.oss.driver.internal.mapper.processor.MapperProcessor,com.datastax.oss.driver.internal.gremlin.PatchedGremlinDslProcessor</compilerArg>
240+
</compilerArgs>
241+
<annotationProcessorPaths>
242+
<path>
243+
<groupId>com.google.errorprone</groupId>
244+
<artifactId>error_prone_core</artifactId>
245+
<version>2.31.0</version>
246+
</path>
247+
<path>
248+
<groupId>com.scylladb</groupId>
249+
<artifactId>java-driver-test-infra</artifactId>
250+
<version>${project.version}</version>
251+
</path>
252+
<path>
253+
<groupId>com.scylladb</groupId>
254+
<artifactId>java-driver-mapper-processor</artifactId>
255+
<version>${project.version}</version>
256+
</path>
257+
<path>
258+
<groupId>com.scylladb</groupId>
259+
<artifactId>java-driver-mapper-runtime</artifactId>
260+
<version>${project.version}</version>
261+
</path>
262+
<path>
263+
<groupId>org.apache.tinkerpop</groupId>
264+
<artifactId>gremlin-core</artifactId>
265+
<version>${tinkerpop.version}</version>
266+
</path>
267+
</annotationProcessorPaths>
268+
</configuration>
269+
</plugin>
234270
<plugin>
235271
<groupId>org.apache.maven.plugins</groupId>
236272
<artifactId>maven-failsafe-plugin</artifactId>

integration-tests/src/test/java/com/datastax/oss/driver/core/config/DriverExecutionProfileReloadIT.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ public void should_reload_configuration_when_event_fired() {
125125

126126
// Bump up request timeout to 10 seconds and trigger a manual reload.
127127
configSource.set("basic.request.timeout = 10s");
128-
session.getContext().getConfigLoader().reload();
129-
waitForConfigChange(session, 500, TimeUnit.MILLISECONDS);
128+
waitForConfigChange(
129+
session, () -> session.getContext().getConfigLoader().reload(), 3, TimeUnit.SECONDS);
130130

131131
// Execute again, should not timeout.
132132
session.execute(query);
@@ -217,11 +217,17 @@ public void should_reload_profile_config_when_reloading_config() {
217217
}
218218

219219
private void waitForConfigChange(CqlSession session, long timeout, TimeUnit unit) {
220+
waitForConfigChange(session, () -> {}, timeout, unit);
221+
}
222+
223+
private void waitForConfigChange(
224+
CqlSession session, Runnable trigger, long timeout, TimeUnit unit) {
220225
CountDownLatch latch = new CountDownLatch(1);
221226
((InternalDriverContext) session.getContext())
222227
.getEventBus()
223228
.register(ConfigChangeEvent.class, (e) -> latch.countDown());
224229
try {
230+
trigger.run();
225231
boolean success = latch.await(timeout, unit);
226232
assertThat(success).isTrue();
227233
} catch (InterruptedException e) {

integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/NodeStateIT.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,9 @@
8181
import org.junit.experimental.categories.Category;
8282
import org.junit.rules.RuleChain;
8383
import org.junit.rules.TestRule;
84-
import org.junit.runner.RunWith;
8584
import org.mockito.InOrder;
86-
import org.mockito.junit.MockitoJUnitRunner;
8785

8886
@Category(ParallelizableTests.class)
89-
@RunWith(MockitoJUnitRunner.class)
9087
public class NodeStateIT {
9188

9289
private SimulacronRule simulacron = new SimulacronRule(ClusterSpec.builder().withNodes(2));
@@ -213,10 +210,13 @@ public void should_keep_regular_node_up_when_still_one_connection() {
213210
simulacron.cluster().closeConnection(report.getConnections().get(0), CloseType.DISCONNECT);
214211

215212
await()
216-
.alias("Reconnection started")
213+
.alias("Regular node stayed up after one connection closed")
217214
.pollInterval(500, TimeUnit.MILLISECONDS)
218215
.untilAsserted(
219-
() -> assertThat(metadataRegularNode).isUp().hasOpenConnections(1).isReconnecting());
216+
() -> {
217+
assertThat(metadataRegularNode).isUp();
218+
assertThat(metadataRegularNode.getOpenConnections()).isBetween(1, 2);
219+
});
220220
inOrder.verify(nodeStateListener, never()).onDown(metadataRegularNode);
221221
}
222222

integration-tests/src/test/java/com/datastax/oss/driver/core/session/ListenersIT.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,19 @@
4242
import java.util.Collections;
4343
import java.util.concurrent.CountDownLatch;
4444
import java.util.concurrent.TimeUnit;
45+
import org.junit.After;
46+
import org.junit.Before;
4547
import org.junit.ClassRule;
4648
import org.junit.Ignore;
4749
import org.junit.Test;
4850
import org.junit.experimental.categories.Category;
49-
import org.junit.runner.RunWith;
5051
import org.mockito.ArgumentCaptor;
5152
import org.mockito.Captor;
5253
import org.mockito.InOrder;
5354
import org.mockito.Mock;
54-
import org.mockito.junit.MockitoJUnitRunner;
55+
import org.mockito.MockitoAnnotations;
5556

5657
@Category(ParallelizableTests.class)
57-
@RunWith(MockitoJUnitRunner.class)
5858
public class ListenersIT {
5959

6060
@ClassRule
@@ -71,6 +71,18 @@ public class ListenersIT {
7171
@Captor private ArgumentCaptor<Node> nodeCaptor1;
7272
@Captor private ArgumentCaptor<Node> nodeCaptor2;
7373

74+
private AutoCloseable mocks;
75+
76+
@Before
77+
public void setup() {
78+
mocks = MockitoAnnotations.openMocks(this);
79+
}
80+
81+
@After
82+
public void teardown() throws Exception {
83+
mocks.close();
84+
}
85+
7486
@Test
7587
@Ignore(
7688
"@IntegrationTestDisabledFlaky") // sleep after build() fixes the flakiness, session readiness

integration-tests/src/test/java/com/datastax/oss/driver/core/tracker/RequestLoggerIT.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,14 @@
5959
import org.junit.experimental.categories.Category;
6060
import org.junit.rules.RuleChain;
6161
import org.junit.rules.TestRule;
62-
import org.junit.runner.RunWith;
6362
import org.mockito.ArgumentCaptor;
6463
import org.mockito.Captor;
6564
import org.mockito.Mock;
65+
import org.mockito.MockitoAnnotations;
6666
import org.mockito.internal.verification.VerificationModeFactory;
67-
import org.mockito.junit.MockitoJUnitRunner;
6867
import org.mockito.verification.Timeout;
6968
import org.slf4j.LoggerFactory;
7069

71-
@RunWith(MockitoJUnitRunner.class)
7270
@Category(ParallelizableTests.class)
7371
public class RequestLoggerIT {
7472
private static final Pattern LOG_PREFIX_PER_REQUEST = Pattern.compile("\\[s\\d*\\|\\d*]");
@@ -192,19 +190,26 @@ public class RequestLoggerIT {
192190
@Mock private Appender<ILoggingEvent> appender;
193191
private Logger logger;
194192
private Level oldLevel;
193+
private AutoCloseable mocks;
195194

196195
@Before
197196
public void setup() {
197+
mocks = MockitoAnnotations.openMocks(this);
198198
logger = (Logger) LoggerFactory.getLogger(RequestLogger.class);
199199
oldLevel = logger.getLevel();
200200
logger.setLevel(Level.INFO);
201201
logger.addAppender(appender);
202202
}
203203

204204
@After
205-
public void teardown() {
206-
logger.detachAppender(appender);
207-
logger.setLevel(oldLevel);
205+
public void teardown() throws Exception {
206+
if (logger != null) {
207+
logger.detachAppender(appender);
208+
logger.setLevel(oldLevel);
209+
}
210+
if (mocks != null) {
211+
mocks.close();
212+
}
208213
}
209214

210215
@Test

metrics/micrometer/src/main/java/com/datastax/oss/driver/internal/metrics/micrometer/MicrometerMetricUpdater.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,22 +55,22 @@ protected MicrometerMetricUpdater(
5555
@Override
5656
public void incrementCounter(MetricT metric, @Nullable String profileName, long amount) {
5757
if (isEnabled(metric, profileName)) {
58-
getOrCreateCounterFor(metric).increment(amount);
58+
getOrCreateCounterFor(metric).increment((double) amount);
5959
}
6060
}
6161

6262
@Override
6363
public void updateHistogram(MetricT metric, @Nullable String profileName, long value) {
6464
if (isEnabled(metric, profileName)) {
65-
getOrCreateDistributionSummaryFor(metric).record(value);
65+
getOrCreateDistributionSummaryFor(metric).record((double) value);
6666
}
6767
}
6868

6969
@Override
7070
public void markMeter(MetricT metric, @Nullable String profileName, long amount) {
7171
if (isEnabled(metric, profileName)) {
7272
// There is no meter type in Micrometer, so use a counter
73-
getOrCreateCounterFor(metric).increment(amount);
73+
getOrCreateCounterFor(metric).increment((double) amount);
7474
}
7575
}
7676

0 commit comments

Comments
 (0)