Skip to content

Commit cba76a8

Browse files
authored
[4HrPR2Rm] Use internal function instead of procedure for compatibility check. (#219)
1 parent 68367b3 commit cba76a8

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed

core/src/main/java/apoc/cypher/CypherInitializer.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@
1414
import org.neo4j.logging.Log;
1515

1616
import java.util.Collection;
17-
import java.util.Collections;
1817

1918
import java.util.ConcurrentModificationException;
20-
import java.util.List;
2119
import java.util.Map;
2220
import java.util.TreeMap;
2321

@@ -66,13 +64,12 @@ public void available() {
6664
if (isSystemDatabase) {
6765
try {
6866
awaitDbmsComponentsProcedureRegistered();
69-
final List<String> versions = db.executeTransactionally("CALL dbms.components", Collections.emptyMap(),
70-
r -> (List<String>) r.next().get("versions"));
67+
String neo4jVersion = org.neo4j.kernel.internal.Version.getNeo4jVersion();
7168
final String apocVersion = Version.class.getPackage().getImplementationVersion();
72-
if (isVersionDifferent(versions, apocVersion)) {
69+
if (isVersionDifferent(neo4jVersion, apocVersion)) {
7370
userLog.warn("The apoc version (%s) and the Neo4j DBMS versions %s are incompatible. \n" +
7471
"The two first numbers of both versions needs to be the same.",
75-
apocVersion, versions.toString());
72+
apocVersion, neo4jVersion);
7673
}
7774
} catch (Exception ignored) {
7875
userLog.info("Cannot check APOC version compatibility because of a transient error. Retrying your request at a later time may succeed");
@@ -97,15 +94,13 @@ public void available() {
9794
}
9895

9996
// the visibility is public only for testing purpose, it could be private otherwise
100-
public static boolean isVersionDifferent(List<String> versions, String apocVersion) {
97+
public static boolean isVersionDifferent(String neo4jVersion, String apocVersion) {
10198
final String[] apocSplit = splitVersion(apocVersion);
102-
return versions.stream()
103-
.noneMatch(kernelVersion -> {
104-
final String[] kernelSplit = splitVersion(kernelVersion);
105-
return apocSplit != null && kernelSplit != null
106-
&& apocSplit[0].equals(kernelSplit[0])
107-
&& apocSplit[1].equals(kernelSplit[1]);
108-
});
99+
final String[] neo4jSplit = splitVersion(neo4jVersion);
100+
101+
return !(apocSplit != null && neo4jSplit != null
102+
&& apocSplit[0].equals(neo4jSplit[0])
103+
&& apocSplit[1].equals(neo4jSplit[1]));
109104
}
110105

111106
private static String[] splitVersion(String completeVersion) {

core/src/test/java/apoc/cypher/CypherIsVersionDifferentTest.java

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import org.junit.Test;
44

5-
import java.util.List;
6-
75
import static apoc.cypher.CypherInitializer.isVersionDifferent;
86
import static org.junit.Assert.assertFalse;
97
import static org.junit.Assert.assertTrue;
@@ -12,30 +10,33 @@ public class CypherIsVersionDifferentTest {
1210

1311
@Test
1412
public void shouldReturnFalseOnlyWithCompatibleVersion() {
15-
assertTrue(isVersionDifferent(List.of("3.5"), "4.4.0.2"));
16-
assertTrue(isVersionDifferent(List.of("5_0"), "4.4.0.2"));
17-
assertFalse(isVersionDifferent(List.of("3.5.12"), "3.5.0.9"));
18-
assertFalse(isVersionDifferent(List.of("3.5.12"), "3.5.1.9"));
19-
assertFalse(isVersionDifferent(List.of("4.4.5"), "4.4.0.4"));
20-
assertFalse(isVersionDifferent(List.of("5.1.1"), "5.1.0"));
21-
assertTrue(isVersionDifferent(List.of("5.1.0"), "5.2.0"));
13+
assertTrue(isVersionDifferent("3.5", "4.4.0.2"));
14+
assertTrue(isVersionDifferent("5_0", "4.4.0.2"));
15+
assertFalse(isVersionDifferent("3.5.12", "3.5.0.9"));
16+
assertFalse(isVersionDifferent("3.5.12", "3.5.1.9"));
17+
assertFalse(isVersionDifferent("4.4.5", "4.4.0.4"));
18+
assertFalse(isVersionDifferent("5.1.1", "5.1.0"));
19+
assertTrue(isVersionDifferent("5.1.0", "5.2.0"));
20+
assertFalse(isVersionDifferent("5.1-aura", "5.1.0"));
21+
assertTrue(isVersionDifferent("4.4-aura", "5.1.0"));
22+
assertTrue(isVersionDifferent("5.2-aura", "5.1.0"));
2223

2324
// we expect that APOC versioning is always consistent to Neo4j versioning
24-
assertTrue(isVersionDifferent(List.of(""), "5_2_0_1"));
25-
assertTrue(isVersionDifferent(List.of("5_1_0"), "5_0_0_1"));
26-
assertTrue(isVersionDifferent(List.of("5_1_0"), "5_2_0_1"));
27-
assertTrue(isVersionDifferent(List.of("5_22_1"), "5_2_0_1"));
28-
assertTrue(isVersionDifferent(List.of("5_2_1"), "5_22_0_1"));
29-
assertTrue(isVersionDifferent(List.of("55_2_1"), "5_2_1"));
30-
assertTrue(isVersionDifferent(List.of("55_2_1"), "5_2_1_0_1"));
31-
assertTrue(isVersionDifferent(List.of("51-1-9-9"), "5-1-1-9"));
25+
assertTrue(isVersionDifferent("", "5_2_0_1"));
26+
assertTrue(isVersionDifferent("5_1_0", "5_0_0_1"));
27+
assertTrue(isVersionDifferent("5_1_0", "5_2_0_1"));
28+
assertTrue(isVersionDifferent("5_22_1", "5_2_0_1"));
29+
assertTrue(isVersionDifferent("5_2_1", "5_22_0_1"));
30+
assertTrue(isVersionDifferent("55_2_1", "5_2_1"));
31+
assertTrue(isVersionDifferent("55_2_1", "5_2_1_0_1"));
32+
assertTrue(isVersionDifferent("51-1-9-9", "5-1-1-9"));
3233

33-
assertFalse(isVersionDifferent(List.of("4_4_5"), "4.4.0.4"));
34-
assertFalse(isVersionDifferent(List.of("5_1_0"), "5-1-0-1"));
35-
assertFalse(isVersionDifferent(List.of("5_22_1"), "5_22_0_1"));
36-
assertFalse(isVersionDifferent(List.of("5_0"), "5_0_0_1"));
37-
assertFalse(isVersionDifferent(List.of("5_0_1"), "5_0_0_1"));
34+
assertFalse(isVersionDifferent("4_4_5", "4.4.0.4"));
35+
assertFalse(isVersionDifferent("5_1_0", "5-1-0-1"));
36+
assertFalse(isVersionDifferent("5_22_1", "5_22_0_1"));
37+
assertFalse(isVersionDifferent("5_0", "5_0_0_1"));
38+
assertFalse(isVersionDifferent("5_0_1", "5_0_0_1"));
3839

39-
assertFalse(isVersionDifferent(List.of("5-1-9-9"), "5-1-0-1"));
40+
assertFalse(isVersionDifferent("5-1-9-9", "5-1-0-1"));
4041
}
4142
}

test-utils/src/main/java/apoc/periodic/PeriodicTestUtils.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package apoc.periodic;
22

33
import apoc.util.collection.Iterators;
4+
import java.util.concurrent.TimeUnit;
45
import org.neo4j.common.DependencyResolver;
56
import org.neo4j.kernel.api.exceptions.Status;
67
import org.neo4j.kernel.impl.api.KernelTransactions;
@@ -43,10 +44,13 @@ public static boolean terminateQuery(String pattern, GraphDatabaseAPI db) {
4344
public static void testTerminatePeriodicQuery(DbmsRule db, String periodicQuery) {
4445
killPeriodicQueryAsync(db);
4546
try {
46-
testResult(db, periodicQuery, result -> {
47-
Map<String, Object> row = Iterators.single(result);
48-
assertEquals( periodicQuery + " result: " + row.toString(), true, row.get("wasTerminated"));
49-
});
47+
org.neo4j.test.assertion.Assert.assertEventually( () ->
48+
db.executeTransactionally(periodicQuery, Map.of(),
49+
result -> {
50+
Map<String, Object> row = Iterators.single(result);
51+
return row.get("wasTerminated");
52+
}),
53+
(value) -> true, 10L, TimeUnit.SECONDS);
5054
fail("Should have terminated");
5155
} catch(Exception tfe) {
5256
assertEquals(tfe.getMessage(),true, tfe.getMessage().contains("terminated"));

0 commit comments

Comments
 (0)