1
0
Fork 0

added tests

This commit is contained in:
jsteemann 2018-07-25 17:08:41 +02:00
parent dc5f6b89d6
commit 9b28232b12
2 changed files with 102 additions and 22 deletions

View File

@ -1,5 +1,5 @@
/*jshint globalstrict:false, strict:false, maxlen: 500 */
/*global assertEqual, assertTrue, assertFalse, assertNull, assertMatch, fail, AQL_EXECUTE */
/*global assertEqual, assertTrue, assertFalse, assertNull, assertMatch, fail, AQL_EXECUTE, AQL_EXPLAIN */
////////////////////////////////////////////////////////////////////////////////
/// @brief tests for query language, bind parameters
@ -158,10 +158,14 @@ function ahuacatlRemoveSuite () {
testRemoveNothing : function () {
var expected = { writesExecuted: 0, writesIgnored: 0 };
var actual = getModifyQueryResults("FOR d IN " + cn1 + " FILTER d.value1 < 0 REMOVE d IN " + cn1);
let query = "FOR d IN " + cn1 + " FILTER d.value1 < 0 REMOVE d IN " + cn1;
var actual = getModifyQueryResults(query);
assertEqual(100, c1.count());
assertEqual(expected, sanitizeStats(actual));
let rules = AQL_EXPLAIN(query).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -170,10 +174,14 @@ function ahuacatlRemoveSuite () {
testRemoveNothingBind : function () {
var expected = { writesExecuted: 0, writesIgnored: 0 };
var actual = getModifyQueryResults("FOR d IN @@cn FILTER d.value1 < 0 REMOVE d IN @@cn", { "@cn": cn1 });
let query = "FOR d IN @@cn FILTER d.value1 < 0 REMOVE d IN @@cn";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(100, c1.count());
assertEqual(expected, sanitizeStats(actual));
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -209,7 +217,8 @@ function ahuacatlRemoveSuite () {
testRemoveReturn : function () {
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = AQL_EXECUTE("FOR d IN @@cn REMOVE d IN @@cn LET removed = OLD RETURN removed", { "@cn": cn1 });
let query = "FOR d IN @@cn REMOVE d IN @@cn LET removed = OLD RETURN removed";
var actual = AQL_EXECUTE(query, { "@cn": cn1 });
assertEqual(0, c1.count());
assertEqual(expected, sanitizeStats(actual.stats));
@ -226,6 +235,9 @@ function ahuacatlRemoveSuite () {
assertEqual(i, doc.value1);
assertEqual("test" + i, doc.value2);
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -234,10 +246,14 @@ function ahuacatlRemoveSuite () {
testRemoveIgnore1 : function () {
var expected = { writesExecuted: 0, writesIgnored: 100 };
var actual = getModifyQueryResults("FOR d IN @@cn REMOVE 'foo' IN @@cn OPTIONS { ignoreErrors: true }", { "@cn": cn1 });
let query = "FOR d IN @@cn REMOVE 'foo' IN @@cn OPTIONS { ignoreErrors: true }";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(100, c1.count());
assertEqual(expected, sanitizeStats(actual));
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -246,10 +262,14 @@ function ahuacatlRemoveSuite () {
testRemoveIgnore2 : function () {
var expected = { writesExecuted: 100, writesIgnored: 1 };
var actual = getModifyQueryResults("FOR i IN 0..100 REMOVE CONCAT('test', i) IN @@cn OPTIONS { ignoreErrors: true }", { "@cn": cn1 });
let query = "FOR i IN 0..100 REMOVE CONCAT('test', i) IN @@cn OPTIONS { ignoreErrors: true }";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(0, c1.count());
assertEqual(expected, sanitizeStats(actual));
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1289,7 +1309,8 @@ function ahuacatlUpdateSuite () {
testUpdateKeepNullTrue : function () {
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = getModifyQueryResults("FOR d IN @@cn UPDATE d._key WITH { value1: null, value3: 'foobar', value9: null } INTO @@cn OPTIONS { keepNull: true }", { "@cn": cn1 });
let query = "FOR d IN @@cn UPDATE d._key WITH { value1: null, value3: 'foobar', value9: null } INTO @@cn OPTIONS { keepNull: true }";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
for (var i = 0; i < 100; ++i) {
@ -1299,6 +1320,9 @@ function ahuacatlUpdateSuite () {
assertEqual("foobar", doc.value3);
assertNull(doc.value9);
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1307,7 +1331,8 @@ function ahuacatlUpdateSuite () {
testUpdateKeepNullFalse : function () {
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = getModifyQueryResults("FOR d IN @@cn UPDATE d._key WITH { value1: null, value3: 'foobar', value9: null } INTO @@cn OPTIONS { keepNull: false }", { "@cn": cn1 });
let query = "FOR d IN @@cn UPDATE d._key WITH { value1: null, value3: 'foobar', value9: null } INTO @@cn OPTIONS { keepNull: false }";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
for (var i = 0; i < 100; ++i) {
@ -1317,6 +1342,9 @@ function ahuacatlUpdateSuite () {
assertEqual("foobar", doc.value3);
assertFalse(doc.hasOwnProperty("value9"));
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1365,7 +1393,8 @@ function ahuacatlUpdateSuite () {
AQL_EXECUTE("FOR i IN 0..99 INSERT { _key: CONCAT('sometest', i), value: i, wantToFind: true } IN @@cn", { "@cn": cn1 });
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = getModifyQueryResults("FOR d IN @@cn FILTER d.wantToFind UPDATE d._key WITH { value2: d.value % 2 == 0 ? d.value : d.value + 1 } INTO @@cn", { "@cn": cn1 });
let query = "FOR d IN @@cn FILTER d.wantToFind UPDATE d._key WITH { value2: d.value % 2 == 0 ? d.value : d.value + 1 } INTO @@cn";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
for (var i = 0; i < 100; ++i) {
@ -1375,6 +1404,9 @@ function ahuacatlUpdateSuite () {
assertEqual(i % 2 === 0 ? i : i + 1, doc.value2);
assertEqual(i, doc.value);
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1383,7 +1415,8 @@ function ahuacatlUpdateSuite () {
testUpdateReturnOld : function () {
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = AQL_EXECUTE("FOR d IN @@cn UPDATE d WITH { value3: d.value1 + 5 } IN @@cn LET previous = OLD RETURN previous", { "@cn": cn1 });
let query = "FOR d IN @@cn UPDATE d WITH { value3: d.value1 + 5 } IN @@cn LET previous = OLD RETURN previous";
var actual = AQL_EXECUTE(query, { "@cn": cn1 });
assertEqual(100, c1.count());
assertEqual(expected, sanitizeStats(actual.stats));
@ -1401,6 +1434,9 @@ function ahuacatlUpdateSuite () {
assertEqual("test" + i, doc.value2);
assertFalse(doc.hasOwnProperty("value3"));
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1409,7 +1445,8 @@ function ahuacatlUpdateSuite () {
testUpdateReturnNew : function () {
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = AQL_EXECUTE("FOR d IN @@cn UPDATE d WITH { value3: d.value1 + 5 } IN @@cn LET now = NEW RETURN now", { "@cn": cn1 });
let query = "FOR d IN @@cn UPDATE d WITH { value3: d.value1 + 5 } IN @@cn LET now = NEW RETURN now";
var actual = AQL_EXECUTE(query, { "@cn": cn1 });
assertEqual(100, c1.count());
assertEqual(expected, sanitizeStats(actual.stats));
@ -1427,6 +1464,9 @@ function ahuacatlUpdateSuite () {
assertEqual("test" + i, doc.value2);
assertEqual(i + 5, doc.value3);
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1436,10 +1476,9 @@ function ahuacatlUpdateSuite () {
testReplace1 : function () {
var i;
var expected = { writesExecuted: 100, writesIgnored: 0 };
for (i = 0; i < 5; ++i) {
var actual = getModifyQueryResults("FOR d IN @@cn REPLACE d._key WITH { value4: 12 } INTO @@cn", { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
}
let query = "FOR d IN @@cn REPLACE d._key WITH { value4: 12 } INTO @@cn";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
for (i = 0; i < 100; ++i) {
var doc = c1.document("test" + i);
@ -1448,6 +1487,9 @@ function ahuacatlUpdateSuite () {
assertFalse(doc.hasOwnProperty("value3"));
assertEqual(12, doc.value4);
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1457,10 +1499,9 @@ function ahuacatlUpdateSuite () {
testReplace2 : function () {
var i;
var expected = { writesExecuted: 100, writesIgnored: 0 };
for (i = 0; i < 5; ++i) {
var actual = getModifyQueryResults("FOR d IN @@cn REPLACE { _key: d._key, value4: 13 } INTO @@cn", { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
}
let query = "FOR d IN @@cn REPLACE { _key: d._key, value4: 13 } INTO @@cn";
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
for (i = 0; i < 100; ++i) {
var doc = c1.document("test" + i);
@ -1469,6 +1510,9 @@ function ahuacatlUpdateSuite () {
assertFalse(doc.hasOwnProperty("value3"));
assertEqual(13, doc.value4);
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1478,8 +1522,9 @@ function ahuacatlUpdateSuite () {
testReplaceReplace : function () {
var i;
var expected = { writesExecuted: 100, writesIgnored: 0 };
let query = "FOR d IN @@cn REPLACE d._key WITH { value1: d.value1 + 1 } INTO @@cn";
for (i = 0; i < 5; ++i) {
var actual = getModifyQueryResults("FOR d IN @@cn REPLACE d._key WITH { value1: d.value1 + 1 } INTO @@cn", { "@cn": cn1 });
var actual = getModifyQueryResults(query, { "@cn": cn1 });
assertEqual(expected, sanitizeStats(actual));
}
@ -1488,6 +1533,9 @@ function ahuacatlUpdateSuite () {
assertEqual(i + 5, doc.value1);
assertFalse(doc.hasOwnProperty("value2"));
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1496,7 +1544,8 @@ function ahuacatlUpdateSuite () {
testReplaceReturnOld : function () {
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = AQL_EXECUTE("FOR d IN @@cn REPLACE d WITH { value3: d.value1 + 5 } IN @@cn LET previous = OLD RETURN previous", { "@cn": cn1 });
let query = "FOR d IN @@cn REPLACE d WITH { value3: d.value1 + 5 } IN @@cn LET previous = OLD RETURN previous";
var actual = AQL_EXECUTE(query, { "@cn": cn1 });
assertEqual(100, c1.count());
assertEqual(expected, sanitizeStats(actual.stats));
@ -1514,6 +1563,9 @@ function ahuacatlUpdateSuite () {
assertEqual("test" + i, doc.value2);
assertFalse(doc.hasOwnProperty("value3"));
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////
@ -1522,7 +1574,8 @@ function ahuacatlUpdateSuite () {
testReplaceReturnNew : function () {
var expected = { writesExecuted: 100, writesIgnored: 0 };
var actual = AQL_EXECUTE("FOR d IN @@cn REPLACE d WITH { value3: d.value1 + 5 } IN @@cn LET now = NEW RETURN now", { "@cn": cn1 });
let query = "FOR d IN @@cn REPLACE d WITH { value3: d.value1 + 5 } IN @@cn LET now = NEW RETURN now";
var actual = AQL_EXECUTE(query, { "@cn": cn1 });
assertEqual(100, c1.count());
assertEqual(expected, sanitizeStats(actual.stats));
@ -1540,6 +1593,9 @@ function ahuacatlUpdateSuite () {
assertFalse(doc.hasOwnProperty("value2"));
assertEqual(i + 5, doc.value3);
}
let rules = AQL_EXPLAIN(query, { "@cn": cn1 }).plan.rules;
assertEqual(-1, rules.indexOf("restrict-to-single-shard"));
},
////////////////////////////////////////////////////////////////////////////////

View File

@ -816,6 +816,30 @@ function ahuacatlModifySuite () {
let plan = AQL_EXPLAIN(query).plan;
assertFalse(hasDistributeNode(plan.nodes));
assertEqual(-1, plan.rules.indexOf("undistribute-remove-after-enum-coll"));
assertEqual(-1, plan.rules.indexOf("restrict-to-single-shard"));
}
assertEqual(99, c.count());
assertEqual(0, actual.json.length);
assertEqual(expected, sanitizeStats(actual.stats));
},
testRemoveMainLevelCustomShardKeyWithIdFixedSingleWithFilter : function () {
let c = db._create(cn, {numberOfShards:5, shardKeys: ["id"]});
c.ensureIndex({ type: "hash", fields: ["id"] });
for (let i = 0; i < 100; ++i) {
c.insert({ id: i });
}
let expected = { writesExecuted: 1, writesIgnored: 0 };
let query = "FOR d IN " + cn + " FILTER d.id == 42 REMOVE { _key: d._key, id: 42 } IN " + cn;
let actual = getModifyQueryResultsRaw(query);
if (isCluster) {
let plan = AQL_EXPLAIN(query).plan;
assertFalse(hasDistributeNode(plan.nodes));
assertEqual(-1, plan.rules.indexOf("undistribute-remove-after-enum-coll"));
assertNotEqual(-1, plan.rules.indexOf("restrict-to-single-shard"));
}
assertEqual(99, c.count());