70 lines
1.9 KiB
JavaScript
70 lines
1.9 KiB
JavaScript
var neo4j = require('neo4j-driver');
|
|
var driver = neo4j.driver("bolt://localhost:7687",
|
|
neo4j.auth.basic("", ""),
|
|
{ encrypted: 'ENCRYPTION_OFF', maxTransactionRetryTime: 30000 });
|
|
var session = driver.session();
|
|
|
|
var node_count = 50;
|
|
|
|
function die() {
|
|
session.close();
|
|
driver.close();
|
|
process.exit(1);
|
|
}
|
|
|
|
async function run_query(query, callback) {
|
|
var run = session.run(query, {});
|
|
run.then(callback).catch(function (error) {
|
|
console.log(error);
|
|
die();
|
|
});
|
|
}
|
|
|
|
async function run_query_with_sess(sess, query, callback) {
|
|
const result = await sess.executeWrite(async tx => {
|
|
return await tx.run(query);
|
|
});
|
|
console.log("Transaction got through!");
|
|
sess.close();
|
|
return result;
|
|
}
|
|
|
|
async function run_conflicting_queries(query, number, callback) {
|
|
const promises = [];
|
|
for (let i = 0; i < number; i++) {
|
|
var sess = driver.session();
|
|
promises.push(run_query_with_sess(sess, query));
|
|
}
|
|
await Promise.all(promises).then(callback);
|
|
}
|
|
|
|
async function assert_node_count(expectedCount) {
|
|
try {
|
|
const run = await session.run("MATCH (n) RETURN count(n) AS cnt", {});
|
|
const result = run.records[0].get("cnt").toNumber();
|
|
if (result !== expectedCount) {
|
|
console.log("Count result is not correct! (" + result + ")");
|
|
die();
|
|
} else {
|
|
console.log("Count result is correct! (" + result + ")");
|
|
console.log("All ok!");
|
|
}
|
|
} catch (error) {
|
|
console.log(error);
|
|
die();
|
|
} finally {
|
|
session.close();
|
|
driver.close();
|
|
}
|
|
}
|
|
|
|
run_query("MATCH (n) DETACH DELETE n;", function (result) {
|
|
console.log("Database cleared.");
|
|
run_query("MERGE (root:Root);", function (result) {
|
|
console.log("Root created.");
|
|
run_conflicting_queries("MATCH (root:Root) CREATE (n:Node) CREATE (n)-[:TROUBLING_EDGE]->(root)", node_count - 1, function (result) {
|
|
assert_node_count(node_count);
|
|
});
|
|
});
|
|
});
|