Skip to content

Commit

Permalink
[rF3PTDby] try with parallel false
Browse files Browse the repository at this point in the history
  • Loading branch information
vga91 committed May 16, 2023
1 parent 0aeb52a commit af73a9d
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 153 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ subprojects {
archiveClassifier = 'javadoc'
}
test {
include '**/DiffFullTest.class'//, '**/AtomicTest.class'
//exclude '**/CypherProceduresClusterTest.class'//, '**/AtomicTest.class'

// neo4jDockerImage system property is used in TestContainerUtil
systemProperties 'user.language' : 'en' ,
Expand Down
3 changes: 1 addition & 2 deletions full/src/main/java/apoc/diff/DiffFull.java
Original file line number Diff line number Diff line change
Expand Up @@ -324,8 +324,7 @@ private Node findNode(Iterable<Node> it, Node node, SubGraph graph, DiffConfig c
return config.isFindById() ? findEntityById(it, node.getId()) : null;
}
Map<String, Object> keys = getNodeKeys(node, constraintDefinition);
// --> parallel: false??...
return StreamSupport.stream(it.spliterator(), true)
return StreamSupport.stream(it.spliterator(), false)
.filter(entity -> entity.getProperties(Iterables.asArray(String.class, keys.keySet())).equals(keys))
.findFirst()
.orElse(null);
Expand Down
244 changes: 94 additions & 150 deletions full/src/test/java/apoc/diff/DiffFullTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
import apoc.util.Neo4jContainerExtension;
import apoc.util.TestContainerUtil;
import apoc.util.TestUtil;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Ignore;
import org.junit.Test;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Driver;
Expand Down Expand Up @@ -72,59 +74,58 @@ public class DiffFullTest {

@BeforeClass
public static void setup() throws Exception {
// neo4jContainer = createEnterpriseDB(true)
// .withInitScript("init_neo4j_diff.cypher")
// .withLogging()
// .withoutAuthentication();
// neo4jContainer.start();
//
neo4jContainer = createEnterpriseDB(true)
.withInitScript("init_neo4j_diff.cypher")
.withLogging()
.withoutAuthentication();
neo4jContainer.start();

apocConfig().setProperty(APOC_IMPORT_FILE_ENABLED, true);
TestUtil.registerProcedure(db, Bolt.class, DiffFull.class);
//
// Driver driver = GraphDatabase.driver(neo4jContainer.getBoltUrl(), AuthTokens.none());
// session = neo4jContainer.getSession();
//
// try (Session session = driver.session()) {
// session.writeTransaction(tx -> tx.run(String.format("CREATE DATABASE %s;", secondDb)));
// }
// try (Session session = driver.session(SessionConfig.forDatabase(secondDb))) {
// session.writeTransaction(tx -> tx.run("CREATE CONSTRAINT IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;"));
// session.writeTransaction(tx -> tx.run("CREATE (m:Person:Other {name: 'Michael Jordan', age: 54}), \n" +
// "(q:Person {name: 'Jerry Burton', age: 23}), \n" +
// "(p:Person {name: 'Jack William', age: 22}), \n" +
// "(q)-[:KNOWS{since:1999, time:time('125035.556+0100')}]->(p);"));
// }

Driver driver = GraphDatabase.driver(neo4jContainer.getBoltUrl(), AuthTokens.none());
session = neo4jContainer.getSession();

try (Session session = driver.session()) {
session.writeTransaction(tx -> tx.run(String.format("CREATE DATABASE %s;", secondDb)));
}
try (Session session = driver.session(SessionConfig.forDatabase(secondDb))) {
session.writeTransaction(tx -> tx.run("CREATE CONSTRAINT IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;"));
session.writeTransaction(tx -> tx.run("CREATE (m:Person:Other {name: 'Michael Jordan', age: 54}), \n" +
"(q:Person {name: 'Jerry Burton', age: 23}), \n" +
"(p:Person {name: 'Jack William', age: 22}), \n" +
"(q)-[:KNOWS{since:1999, time:time('125035.556+0100')}]->(p);"));
}
}

@AfterClass
public static void tearDown() {
neo4jContainer.close();
}

@Before
public void before() throws Exception {
try (Scanner scanner = new Scanner(Thread
.currentThread()
.getContextClassLoader()
.getResourceAsStream("init_neo4j_diff.cypher"))
.useDelimiter(";")) {
while (scanner.hasNext()) {
String statement = scanner.next().trim();
if (statement.isEmpty()) {
continue;
}
db.executeTransactionally(statement);
}
}
}

@After
public void after() {
db.executeTransactionally("MATCH (n) DETACH DELETE n");
}
//
// @AfterClass
// public static void tearDown() {
// neo4jContainer.close();
// }
//
// @Before
// public void before() throws Exception {
// try (Scanner scanner = new Scanner(Thread
// .currentThread()
// .getContextClassLoader()
// .getResourceAsStream("init_neo4j_diff.cypher"))
// .useDelimiter(";")) {
// while (scanner.hasNext()) {
// String statement = scanner.next().trim();
// if (statement.isEmpty()) {
// continue;
// }
// db.executeTransactionally(statement);
// }
// }
// }
//
// @After
// public void after() {
// db.executeTransactionally("MATCH (n) DETACH DELETE n");
// }

@Test
@Ignore
public void shouldNotFindDifferencesInTheSameDbUsingDatabaseTypeAndFindById() {
TestUtil.testCallEmpty(db, "CALL apoc.diff.graphs($querySourceDest, $querySourceDest, $conf)",
map("querySourceDest", "MATCH p = (start)-[rel:KNOWS]->(end) RETURN start, rel, end",
Expand All @@ -134,7 +135,6 @@ public void shouldNotFindDifferencesInTheSameDbUsingDatabaseTypeAndFindById() {
}

@Test
@Ignore
public void shouldFindDifferencesUsingDatabaseTypeAndFindById() {
TestContainerUtil.testResult(session, "CALL apoc.diff.graphs($querySourceDest, $querySourceDest, $conf)",
map("querySourceDest", "MATCH p = ()-[:KNOWS]->() RETURN p",
Expand All @@ -145,15 +145,13 @@ public void shouldFindDifferencesUsingDatabaseTypeAndFindById() {
}

@Test
@Ignore
public void shouldNotFindDifferencesInTheSameDataset() {
TestUtil.testCallEmpty(db, "CALL apoc.diff.graphs($querySourceDest, $querySourceDest, $conf)",
map("querySourceDest", "MATCH p = ()-[:KNOWS]->() RETURN p",
"conf", map("dest", map("target", map("type", SourceDestConfig.SourceDestConfigType.URL.name(), "value", neo4jContainer.getBoltUrl())))));
}

@Test
@Ignore
public void shouldFindDifferencesInASecondDbUsingUrlConfig() {
TestUtil.testResult(db, "CALL apoc.diff.graphs($querySourceDest, $querySourceDest, $conf)",
map("querySourceDest", "MATCH p = ()-[:KNOWS]->() RETURN p",
Expand Down Expand Up @@ -195,108 +193,59 @@ private void secondDbAssertions(Iterator<Map<String, Object>> r) {
}

@Test
@Ignore
public void shouldFindLabelDifferences() {
for (int i = 0; i < 20; i++) {
Neo4jContainerExtension neo4jContainer1 = createEnterpriseDB(true)
.withInitScript("init_neo4j_diff.cypher")
.withLogging()
.withoutAuthentication();
neo4jContainer1.start();

apocConfig().setProperty(APOC_IMPORT_FILE_ENABLED, true);
TestUtil.registerProcedure(db, Bolt.class, DiffFull.class);

Driver driver = GraphDatabase.driver(neo4jContainer1.getBoltUrl(), AuthTokens.none());
session = neo4jContainer1.getSession();

try (Session session = driver.session()) {
session.writeTransaction(tx -> tx.run(String.format("CREATE DATABASE %s;", secondDb)));
}
try (Session session = driver.session(SessionConfig.forDatabase(secondDb))) {
session.writeTransaction(tx -> tx.run("CREATE CONSTRAINT IF NOT EXISTS FOR (p:Person) REQUIRE p.name IS UNIQUE;"));
session.writeTransaction(tx -> tx.run("CREATE (m:Person:Other {name: 'Michael Jordan', age: 54}), \n" +
"(q:Person {name: 'Jerry Burton', age: 23}), \n" +
"(p:Person {name: 'Jack William', age: 22}), \n" +
"(q)-[:KNOWS{since:1999, time:time('125035.556+0100')}]->(p);"));
}
TestUtil.testResult(db, "CALL apoc.diff.graphs($querySourceDest, $querySourceDest, $conf)",
map("querySourceDest", "MATCH (node:Person {name: 'Michael Jordan'}) RETURN node",
"conf", map("boltConfig", map("databaseName", secondDb),
"dest", map("target", map("type", SourceDestConfig.SourceDestConfigType.URL.name(), "value", neo4jContainer1.getBoltUrl()))
)),
r -> {
Map<String, Object> row = r.next();
final Map<String, Object> expectedTotalCont = map("entityType", NODE, "sourceLabel", null, "difference", TOTAL_COUNT, "id", null, "source", 1L, "dest", 2L, "destLabel", null);
assertEquals(expectedTotalCont, row);
row = r.next();
final Map<String, Object> expectedCountLabel = map("entityType", NODE, "sourceLabel", null,
"difference", COUNT_BY_LABEL,
"id", null,
"source", map("Person", 1L),
"dest", map("Person", 1L, "Other", 1L),
"destLabel", null);
assertEquals(expectedCountLabel, row);
row = r.next();
assertEquals(NODE, row.get("entityType"));
assertEquals(DIFFERENT_LABELS, row.get("difference"));
assertEquals("Person", row.get("sourceLabel"));
assertEquals("Person", row.get("destLabel"));
assertEquals(List.of("Person"), row.get("source"));
assertEquals(List.of("Other", "Person"), row.get("dest"));
assertTrue(row.get("id") instanceof Long);
assertFalse(r.hasNext());
});


neo4jContainer1.close();
}
TestUtil.testResult(db, "CALL apoc.diff.graphs($querySourceDest, $querySourceDest, $conf)",
map("querySourceDest", "MATCH (node:Person {name: 'Michael Jordan'}) RETURN node",
"conf", map("boltConfig", map("databaseName", secondDb),
"dest", map("target", map("type", SourceDestConfig.SourceDestConfigType.URL.name(), "value", neo4jContainer.getBoltUrl()))
)),
r -> {
Map<String, Object> row = r.next();
final Map<String, Object> expectedTotalCont = map("entityType", NODE, "sourceLabel", null, "difference", TOTAL_COUNT, "id", null, "source", 1L, "dest", 2L, "destLabel", null);
assertEquals(expectedTotalCont, row);
row = r.next();
final Map<String, Object> expectedCountLabel = map("entityType", NODE, "sourceLabel", null,
"difference", COUNT_BY_LABEL,
"id", null,
"source", map("Person", 1L),
"dest", map("Person", 1L, "Other", 1L),
"destLabel", null);
assertEquals(expectedCountLabel, row);
row = r.next();
assertEquals(NODE, row.get("entityType"));
assertEquals(DIFFERENT_LABELS, row.get("difference"));
assertEquals("Person", row.get("sourceLabel"));
assertEquals("Person", row.get("destLabel"));
assertEquals(List.of("Person"), row.get("source"));
assertEquals(List.of("Other", "Person"), row.get("dest"));
assertTrue(row.get("id") instanceof Long);
assertFalse(r.hasNext());
});
}

@Test
public void shouldFindDifferencesInTheSameDb() {
for (int i = 0; i < 50; i++) {
System.out.println("i = " + i);

try (Scanner scanner = new Scanner(Thread
.currentThread()
.getContextClassLoader()
.getResourceAsStream("init_neo4j_diff.cypher"))
.useDelimiter(";")) {
while (scanner.hasNext()) {
String statement = scanner.next().trim();
if (statement.isEmpty()) {
continue;
}
db.executeTransactionally(statement);
}
}

db.executeTransactionally("MATCH (n:Person {name: 'Michael Jordan'}) SET n:Other");

TestUtil.testResult(db, "CALL apoc.diff.graphs($querySource, $queryDest, {})",
map("querySource", "MATCH (node:Other) RETURN node",
"queryDest", "MATCH (node:Person) RETURN node"),
r -> {
Map<String, Object> row = r.next();
final Map<String, Object> expectedTotCount = map("entityType", NODE, "sourceLabel", null, "difference", TOTAL_COUNT, "id", null, "source", 2L, "dest", 4L, "destLabel", null);
assertEquals(expectedTotCount, row);
row = r.next();
final Map<String, Object> expectedCountLabel = map("entityType", NODE, "sourceLabel", null, "difference", COUNT_BY_LABEL, "id", null,
"source", map("Person", 1L, "Other", 1L),
"dest", map("Person", 3L, "Other", 1L), "destLabel", null);
assertEquals(expectedCountLabel, row);
assertFalse(r.hasNext());
});

db.executeTransactionally("MATCH (n:Person:Other) REMOVE n:Other");
db.executeTransactionally("MATCH (n:Person {name: 'Michael Jordan'}) SET n:Other");

TestUtil.testResult(db, "CALL apoc.diff.graphs($querySource, $queryDest, {})",
map("querySource", "MATCH (node:Other) RETURN node",
"queryDest", "MATCH (node:Person) RETURN node"),
r -> {
Map<String, Object> row = r.next();
final Map<String, Object> expectedTotCount = map("entityType", NODE, "sourceLabel", null, "difference", TOTAL_COUNT, "id", null, "source", 2L, "dest", 4L, "destLabel", null);
assertEquals(expectedTotCount, row);
row = r.next();
final Map<String, Object> expectedCountLabel = map("entityType", NODE, "sourceLabel", null, "difference", COUNT_BY_LABEL, "id", null,
"source", map("Person", 1L, "Other", 1L),
"dest", map("Person", 3L, "Other", 1L), "destLabel", null);
assertEquals(expectedCountLabel, row);
assertFalse(r.hasNext());
});

db.executeTransactionally("MATCH (n) DETACH DELETE n");
}
db.executeTransactionally("MATCH (n:Person:Other) REMOVE n:Other");
}

@Test
@Ignore
public void shouldCompareTwoEqualGraphsByQuery() {
// when
final String query = "MATCH (n) OPTIONAL MATCH (n)-[r]->(m) RETURN n, r, m";
Expand Down Expand Up @@ -325,7 +274,6 @@ public void shouldCompareTwoEqualGraphsByQuery() {


@Test
@Ignore
public void shouldCompareTwoDifferentGraphsByQuery() {
// when
final String query = "MATCH (n) OPTIONAL MATCH (n)-[r]->(m) RETURN n, r, m";
Expand Down Expand Up @@ -370,7 +318,6 @@ public void shouldCompareTwoDifferentGraphsByQuery() {
}

@Test
@Ignore
public void shouldCompareTwoDifferentNodesByQuery() {
db.executeTransactionally("MERGE (n:Person{name: 'Michael Jordan'}) ON MATCH SET n.age = 55");

Expand Down Expand Up @@ -402,7 +349,6 @@ public void shouldCompareTwoDifferentNodesByQuery() {
}

@Test
@Ignore
public void shouldCompareTwoDifferentPathsByQuery() {
db.executeTransactionally("MATCH ()-[r:KNOWS]-() SET r.since = 2000");

Expand Down Expand Up @@ -436,7 +382,6 @@ public void shouldCompareTwoDifferentPathsByQuery() {
}

@Test
@Ignore
public void shouldCompareTwoDifferentPathsByBoltQueryUrl() {
db.executeTransactionally("MATCH ()-[r:KNOWS]-() SET r.since = 2000");

Expand All @@ -462,7 +407,6 @@ public void shouldCompareTwoDifferentPathsByBoltQueryUrl() {
}

@Test
@Ignore
public void shouldInjectQueryParams() {
db.executeTransactionally("MATCH ()-[r:KNOWS]-() SET r.since = 2000");

Expand Down

0 comments on commit af73a9d

Please sign in to comment.