Skip to content

Commit 51fc9d6

Browse files
authored
Better testing checks against server versions (#932)
1 parent 884893b commit 51fc9d6

File tree

8 files changed

+88
-65
lines changed

8 files changed

+88
-65
lines changed

src/main/java/io/nats/client/support/ServerVersion.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public ServerVersion(String v) {
3434
}
3535
mjr = Integer.parseInt(split[0]);
3636
mnr = Integer.parseInt(split[1]);
37-
ptch = Integer.parseInt(split[2]);
37+
ptch = split.length < 3 ? -1 : Integer.parseInt(split[2]);
3838

3939
for (int i = 3; i < split.length; i++) {
4040
if (i == 3) {
@@ -50,9 +50,9 @@ public ServerVersion(String v) {
5050
mjr = -1;
5151
}
5252
if (mjr == -1) {
53-
major = 0;
54-
minor = 0;
55-
patch = 0;
53+
major = -1;
54+
minor = -1;
55+
patch = -1;
5656
extra = null;
5757
}
5858
else {

src/test/java/io/nats/client/api/ServerInfoTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ public void testServerVersionComparisonsWork() {
9898
assertTrue(si234.isNewerVersionThan("not-a-number.2.3"));
9999
assertTrue(si234.isNewerVersionThan("1.not-a-number.3"));
100100
assertTrue(si234.isNewerVersionThan("1.2.not-a-number"));
101+
assertTrue(si234.isNewerVersionThan("2.3"));
102+
assertFalse(si234.isOlderThanVersion("2.3"));
103+
assertTrue(si235A1.isNewerVersionThan("2.3"));
104+
assertFalse(si235A1.isOlderThanVersion("2.3"));
101105

102106
ServerInfo siPadded1 = new ServerInfo(json.replace("1.2.3", "1.20.30"));
103107
ServerInfo siPadded2 = new ServerInfo(json.replace("1.2.3", "40.500.6000"));

src/test/java/io/nats/client/api/StreamConfigurationTests.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,19 @@ private StreamConfiguration getTestConfiguration() {
3939

4040
@Test
4141
public void testRoundTrip() throws Exception {
42-
runInJsServer(nc -> {
43-
if (nc.getServerInfo().isNewerVersionThan("2.8.4")) {
44-
StreamConfiguration sc = StreamConfiguration.builder(getTestConfiguration())
45-
.mirror(null)
46-
.sources()
47-
.replicas(1)
48-
.templateOwner(null)
49-
.allowRollup(false)
50-
.allowDirect(false)
51-
.mirrorDirect(false)
52-
.sealed(false)
53-
.build();
54-
JetStreamManagement jsm = nc.jetStreamManagement();
55-
validate(jsm.addStream(sc).getConfiguration(), true);
56-
}
42+
runInJsServer(si -> si.isNewerVersionThan("2.8.4"), nc -> {
43+
StreamConfiguration sc = StreamConfiguration.builder(getTestConfiguration())
44+
.mirror(null)
45+
.sources()
46+
.replicas(1)
47+
.templateOwner(null)
48+
.allowRollup(false)
49+
.allowDirect(false)
50+
.mirrorDirect(false)
51+
.sealed(false)
52+
.build();
53+
JetStreamManagement jsm = nc.jetStreamManagement();
54+
validate(jsm.addStream(sc).getConfiguration(), true);
5755
});
5856
}
5957

src/test/java/io/nats/client/impl/JetStreamGeneralTests.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public void testMiscMetaDataCoverage() {
107107
@Test
108108
public void testJetStreamSubscribe() throws Exception {
109109
runInJsServer(nc -> {
110-
boolean atLeast290 = ((NatsConnection)nc).getInfo().isSameOrNewerThanVersion("2.9.0");
110+
boolean atLeast2dot9 = ((NatsConnection)nc).getInfo().isSameOrNewerThanVersion("2.9");
111111

112112
JetStream js = nc.jetStream();
113113
JetStreamManagement jsm = nc.jetStreamManagement();
@@ -177,8 +177,7 @@ public void testJetStreamSubscribe() throws Exception {
177177
unsubscribeEnsureNotBound(dispatcher, sub);
178178
js.subscribe("", queue(102), dispatcher, mh -> {}, false, psoBind);
179179

180-
// test 2.9.0
181-
if (atLeast290) {
180+
if (atLeast2dot9) {
182181
ConsumerConfiguration cc = builder().name(name(1)).build();
183182
pso = PushSubscribeOptions.builder().configuration(cc).build();
184183
sub = js.subscribe(SUBJECT, pso);
@@ -819,16 +818,16 @@ public void testSubscribeDurableConsumerMustMatch() throws Exception {
819818

820819
// metadata
821820
Map<String, String> metadataA = new HashMap<>(); metadataA.put("a", "A");
822-
Map<String, String> metadataB = new HashMap<>(); metadataA.put("b", "B");
821+
Map<String, String> metadataB = new HashMap<>(); metadataB.put("b", "B");
823822

824-
if (nc.getServerInfo().isNewerVersionThan("2.9.99")) {
823+
if (nc.getServerInfo().isSameOrNewerThanVersion("2.10")) {
825824
// metadata server null versus new not null
826825
nc.jetStreamManagement().addOrUpdateConsumer(STREAM, pushDurableBuilder().build());
827826
changeExPush(js, pushDurableBuilder().metadata(metadataA), "metadata");
828827

829828
// metadata server not null versus new null
830829
nc.jetStreamManagement().addOrUpdateConsumer(STREAM, pushDurableBuilder().metadata(metadataA).build());
831-
changeExPush(js, pushDurableBuilder(), "metadata");
830+
changeOkPush(js, pushDurableBuilder());
832831

833832
// metadata server not null versus new not null but different
834833
changeExPush(js, pushDurableBuilder().metadata(metadataB), "metadata");

src/test/java/io/nats/client/impl/JetStreamManagementTests.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public void testStreamMetadata() throws Exception {
100100
StreamInfo si = jsm.addStream(sc);
101101
assertNotNull(si.getConfiguration());
102102
sc = si.getConfiguration();
103-
if (nc.getServerInfo().isNewerVersionThan("2.9.99")) {
103+
if (nc.getServerInfo().isSameOrNewerThanVersion("2.10")) {
104104
assertEquals(1, sc.getMetadata().size());
105105
assertEquals("meta-bar", sc.getMetadata().get("meta-foo"));
106106
}
@@ -639,7 +639,7 @@ public void testPurgeStreamAndOptions() throws Exception {
639639
@Test
640640
public void testAddDeleteConsumer() throws Exception {
641641
runInJsServer(nc -> {
642-
boolean atLeast290 = ((NatsConnection)nc).getInfo().isSameOrNewerThanVersion("2.9.0");
642+
boolean atLeast2dot9 = ((NatsConnection)nc).getInfo().isSameOrNewerThanVersion("2.9");
643643

644644
JetStreamManagement jsm = nc.jetStreamManagement();
645645

@@ -669,11 +669,11 @@ public void testAddDeleteConsumer() throws Exception {
669669
createMemoryStream(jsm, STREAM, subjectDot(">"));
670670

671671
// with and w/o deliver subject for push/pull
672-
addConsumer(jsm, atLeast290, 1, false, null, ConsumerConfiguration.builder()
672+
addConsumer(jsm, atLeast2dot9, 1, false, null, ConsumerConfiguration.builder()
673673
.durable(durable(1))
674674
.build());
675675

676-
addConsumer(jsm, atLeast290, 2, true, null, ConsumerConfiguration.builder()
676+
addConsumer(jsm, atLeast2dot9, 2, true, null, ConsumerConfiguration.builder()
677677
.durable(durable(2))
678678
.deliverSubject(deliver(2))
679679
.build());
@@ -687,7 +687,7 @@ public void testAddDeleteConsumer() throws Exception {
687687
assertThrows(JetStreamApiException.class, () -> jsm.deleteConsumer(STREAM, durable(1)));
688688

689689
// some testing of new name
690-
if (atLeast290) {
690+
if (atLeast2dot9) {
691691
addConsumer(jsm, true, 3, false, null, ConsumerConfiguration.builder()
692692
.durable(durable(3))
693693
.name(durable(3))
@@ -717,10 +717,10 @@ public void testAddDeleteConsumer() throws Exception {
717717
});
718718
}
719719

720-
private static void addConsumer(JetStreamManagement jsm, boolean atLeast290, int id, boolean deliver, String fs, ConsumerConfiguration cc) throws IOException, JetStreamApiException {
720+
private static void addConsumer(JetStreamManagement jsm, boolean atLeast2dot9, int id, boolean deliver, String fs, ConsumerConfiguration cc) throws IOException, JetStreamApiException {
721721
ConsumerInfo ci = jsm.addOrUpdateConsumer(STREAM, cc);
722722
assertEquals(durable(id), ci.getName());
723-
if (atLeast290) {
723+
if (atLeast2dot9) {
724724
assertEquals(durable(id), ci.getConsumerConfiguration().getName());
725725
}
726726
assertEquals(durable(id), ci.getConsumerConfiguration().getDurable());
@@ -838,7 +838,7 @@ public void testConsumerMetadata() throws Exception {
838838
.build();
839839

840840
ConsumerInfo ci = jsm.addOrUpdateConsumer(STREAM, cc);
841-
if (nc.getServerInfo().isNewerVersionThan("2.9.99")) {
841+
if (nc.getServerInfo().isSameOrNewerThanVersion("2.10")) {
842842
assertEquals(1, ci.getConsumerConfiguration().getMetadata().size());
843843
assertEquals("meta-bar", ci.getConsumerConfiguration().getMetadata().get("meta-foo"));
844844
}
@@ -862,7 +862,7 @@ public void testCreateConsumersWithFilters() throws Exception {
862862
List<ConsumerInfo> cis = jsm.getConsumers(STREAM);
863863
assertEquals(SUBJECT, cis.get(0).getConsumerConfiguration().getFilterSubject());
864864

865-
if (nc.getServerInfo().isNewerVersionThan("2.9.99")) {
865+
if (nc.getServerInfo().isSameOrNewerThanVersion("2.10")) {
866866
// 2.10 and later you can set the filter to something that does not match
867867
jsm.addOrUpdateConsumer(STREAM, builder.filterSubject(subjectDot("two-ten-allows-not-matching")).build());
868868
cis = jsm.getConsumers(STREAM);

src/test/java/io/nats/client/impl/KeyValueTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,7 +1351,7 @@ public void testKeyValueMirrorCrossDomains() throws Exception {
13511351

13521352
sleep(200); // make sure things get a chance to propagate
13531353
StreamInfo si = leaf.jetStreamManagement().getStreamInfo("KV_MIRROR");
1354-
if (hub.getServerInfo().isSameOrNewerThanVersion("2.9.0")) {
1354+
if (hub.getServerInfo().isSameOrNewerThanVersion("2.9")) {
13551355
assertTrue(si.getConfiguration().getMirrorDirect());
13561356
}
13571357
assertEquals(3, si.getStreamState().getMsgCount());

src/test/java/io/nats/client/impl/SimplificationTests.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@
1414
package io.nats.client.impl;
1515

1616
import io.nats.client.*;
17-
import io.nats.client.api.ConsumerConfiguration;
18-
import io.nats.client.api.ConsumerInfo;
19-
import io.nats.client.api.MessageInfo;
20-
import io.nats.client.api.StreamInfoOptions;
17+
import io.nats.client.api.*;
2118
import org.junit.jupiter.api.Test;
2219

2320
import java.io.IOException;
@@ -30,9 +27,13 @@
3027

3128
public class SimplificationTests extends JetStreamTestBase {
3229

30+
private boolean runTest(ServerInfo si) {
31+
return si.isSameOrNewerThanVersion("2.9.1");
32+
}
33+
3334
@Test
3435
public void testStreamContext() throws Exception {
35-
runInJsServer(nc -> {
36+
runInJsServer(this::runTest, nc -> {
3637
JetStreamManagement jsm = nc.jetStreamManagement();
3738
JetStream js = nc.jetStream();
3839

@@ -116,7 +117,7 @@ private static void _testStreamContext(JetStream js, StreamContext streamContext
116117

117118
@Test
118119
public void testFetch() throws Exception {
119-
runInJsServer(nc -> {
120+
runInJsServer(this::runTest, nc -> {
120121
createDefaultTestStream(nc);
121122
JetStream js = nc.jetStream();
122123
for (int x = 1; x <= 20; x++) {
@@ -225,7 +226,7 @@ private static String generateConsumerName(int maxMessages, int maxBytes) {
225226

226227
@Test
227228
public void testIterableConsumer() throws Exception {
228-
runInJsServer(nc -> {
229+
runInJsServer(this::runTest, nc -> {
229230
JetStreamManagement jsm = nc.jetStreamManagement();
230231

231232
createDefaultTestStream(jsm);
@@ -288,7 +289,7 @@ public void testIterableConsumer() throws Exception {
288289

289290
@Test
290291
public void testConsumeWithHandler() throws Exception {
291-
runInJsServer(nc -> {
292+
runInJsServer(this::runTest, nc -> {
292293
JetStreamManagement jsm = nc.jetStreamManagement();
293294

294295
createDefaultTestStream(jsm);
@@ -323,7 +324,7 @@ public void testConsumeWithHandler() throws Exception {
323324

324325
@Test
325326
public void testNext() throws Exception {
326-
runInJsServer(nc -> {
327+
runInJsServer(this::runTest, nc -> {
327328
JetStreamManagement jsm = nc.jetStreamManagement();
328329

329330
createDefaultTestStream(jsm);
@@ -348,7 +349,7 @@ public void testNext() throws Exception {
348349

349350
@Test
350351
public void testCoverage() throws Exception {
351-
runInJsServer(nc -> {
352+
runInJsServer(this::runTest, nc -> {
352353
JetStreamManagement jsm = nc.jetStreamManagement();
353354

354355
createDefaultTestStream(jsm);

src/test/java/io/nats/client/utils/TestBase.java

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package io.nats.client.utils;
1515

1616
import io.nats.client.*;
17+
import io.nats.client.api.ServerInfo;
1718
import io.nats.client.impl.NatsMessage;
1819
import io.nats.client.impl.TestHandler;
1920
import io.nats.client.support.NatsJetStreamClientError;
@@ -75,54 +76,74 @@ public interface TwoServerTest {
7576
void test(Connection nc1, Connection nc2) throws Exception;
7677
}
7778

79+
public interface VersionCheck {
80+
boolean runTest(ServerInfo si);
81+
}
82+
7883
public static void runInServer(InServerTest inServerTest) throws Exception {
79-
runInServer(false, false, inServerTest);
84+
runInServer(false, false, null, null, inServerTest);
8085
}
8186

8287
public static void runInServer(Options.Builder builder, InServerTest inServerTest) throws Exception {
83-
runInServer(false, false, builder, inServerTest);
88+
runInServer(false, false, builder, null, inServerTest);
8489
}
8590

8691
public static void runInServer(boolean debug, InServerTest inServerTest) throws Exception {
87-
runInServer(debug, false, inServerTest);
92+
runInServer(debug, false, null, null, inServerTest);
8893
}
8994

9095
public static void runInJsServer(InServerTest inServerTest) throws Exception {
91-
runInServer(false, true, inServerTest);
96+
runInServer(false, true, null, null, inServerTest);
9297
}
9398

9499
public static void runInJsServer(ErrorListener el, InServerTest inServerTest) throws Exception {
95-
Options.Builder builder = new Options.Builder().errorListener(el);
96-
runInServer(false, true, builder, inServerTest);
100+
runInServer(false, true, new Options.Builder().errorListener(el), null, inServerTest);
97101
}
98102

99103
public static void runInJsServer(Options.Builder builder, InServerTest inServerTest) throws Exception {
100-
runInServer(false, true, builder, inServerTest);
104+
runInServer(false, true, builder, null, inServerTest);
105+
}
106+
107+
public static void runInJsServer(VersionCheck vc, InServerTest inServerTest) throws Exception {
108+
runInServer(false, true, null, vc, inServerTest);
101109
}
102110

103111
public static void runInJsServer(boolean debug, InServerTest inServerTest) throws Exception {
104-
runInServer(debug, true, inServerTest);
112+
runInServer(debug, true, null, null, inServerTest);
105113
}
106114

107115
public static void runInServer(boolean debug, boolean jetstream, InServerTest inServerTest) throws Exception {
108-
try (NatsTestServer ts = new NatsTestServer(debug, jetstream);
109-
Connection nc = standardConnection(ts.getURI()))
110-
{
111-
try {
112-
inServerTest.test(nc);
113-
}
114-
finally {
115-
if (jetstream) {
116-
cleanupJs(nc);
117-
}
118-
}
119-
}
116+
runInServer(debug, jetstream, null, null, inServerTest);
120117
}
121118

122119
public static void runInServer(boolean debug, boolean jetstream, Options.Builder builder, InServerTest inServerTest) throws Exception {
120+
runInServer(debug, jetstream, builder, null, inServerTest);
121+
}
122+
123+
private static ServerInfo runServerInfo;
124+
125+
public static void runInServer(boolean debug, boolean jetstream, Options.Builder builder, VersionCheck vc, InServerTest inServerTest) throws Exception {
126+
if (vc != null && runServerInfo != null) {
127+
if (!vc.runTest(runServerInfo)) {
128+
return;
129+
}
130+
vc = null; // since we've already determined it should run, null this out so we don't check below
131+
}
132+
133+
if (builder == null) {
134+
builder = new Options.Builder();
135+
}
136+
123137
try (NatsTestServer ts = new NatsTestServer(debug, jetstream);
124138
Connection nc = standardConnection(builder.server(ts.getURI()).build()))
125139
{
140+
if (vc != null) {
141+
runServerInfo = nc.getServerInfo();
142+
if (!vc.runTest(runServerInfo)) {
143+
return;
144+
}
145+
}
146+
126147
try {
127148
inServerTest.test(nc);
128149
}

0 commit comments

Comments
 (0)