mirror of https://gitee.com/bigwinds/arangodb
Added further OOM tests for ShortestPath computation
This commit is contained in:
parent
df75ae48f9
commit
933e4c353a
|
@ -1737,6 +1737,7 @@ function ahuacatlQueryNeighborsErrorsSuite () {
|
|||
// Positive Check
|
||||
assertEqual(actual, [ v2, v3 ]);
|
||||
|
||||
internal.debugClearFailAt();
|
||||
internal.debugSetFailAt("VertexCollectionDitchOOM");
|
||||
|
||||
// Negative Check
|
||||
|
@ -1762,6 +1763,100 @@ function ahuacatlQueryNeighborsErrorsSuite () {
|
|||
};
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief test suite for ShortestPath with intentional failures
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function ahuacatlQueryShortestpathErrorsSuite () {
|
||||
var vn = "UnitTestsTraversalVertices";
|
||||
var en = "UnitTestsTraversalEdges";
|
||||
var vertexCollection;
|
||||
var edgeCollection;
|
||||
|
||||
return {
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief set up
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
setUp : function () {
|
||||
db._drop(vn);
|
||||
db._drop(en);
|
||||
internal.debugClearFailAt();
|
||||
|
||||
vertexCollection = db._create(vn);
|
||||
edgeCollection = db._createEdgeCollection(en);
|
||||
|
||||
[ "A", "B", "C", "D" ].forEach(function (item) {
|
||||
vertexCollection.save({ _key: item, name: item });
|
||||
});
|
||||
|
||||
[ [ "A", "B" ], [ "B", "C" ], [ "A", "D" ], [ "D", "C" ], [ "C", "A" ] ].forEach(function (item) {
|
||||
var l = item[0];
|
||||
var r = item[1];
|
||||
edgeCollection.save(vn + "/" + l, vn + "/" + r, { _key: l + r, what : l + "->" + r });
|
||||
});
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief tear down
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
tearDown : function () {
|
||||
db._drop(vn);
|
||||
db._drop(en);
|
||||
internal.debugClearFailAt();
|
||||
},
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief checks error handling in SHORTEST_PATH()
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
testShortestPathOOM : function () {
|
||||
var s = vn + "/A";
|
||||
var m = vn + "/B";
|
||||
var t = vn + "/C";
|
||||
|
||||
var query = "RETURN SHORTEST_PATH(" + vn + " , " + en + ", '"
|
||||
+ s + "', '" + t + "', 'outbound')";
|
||||
|
||||
var actual = getQueryResults(query)[0];
|
||||
// Positive Check
|
||||
assertEqual(actual.vertices, [s, m, t]);
|
||||
assertEqual(actual.distance, 2);
|
||||
|
||||
internal.debugSetFailAt("TraversalOOMInitialize");
|
||||
|
||||
// Negative Check
|
||||
try {
|
||||
actual = getQueryResults(query);
|
||||
fail();
|
||||
} catch (e) {
|
||||
assertEqual(e.errorNum, errors.ERROR_DEBUG.code);
|
||||
}
|
||||
|
||||
internal.debugClearFailAt();
|
||||
|
||||
// Redo the positive check. Make sure the former fail is gone
|
||||
actual = getQueryResults(query)[0];
|
||||
assertEqual(actual.vertices, [s, m, t]);
|
||||
assertEqual(actual.distance, 2);
|
||||
|
||||
internal.debugSetFailAt("TraversalOOMPath");
|
||||
// Negative Check
|
||||
try {
|
||||
actual = getQueryResults(query);
|
||||
fail();
|
||||
} catch (e) {
|
||||
assertEqual(e.errorNum, errors.ERROR_DEBUG.code);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief executes the test suite
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1774,6 +1869,7 @@ jsunity.run(ahuacatlQueryTraversalTestSuite);
|
|||
jsunity.run(ahuacatlQueryTraversalTreeTestSuite);
|
||||
if (internal.debugCanUseFailAt()) {
|
||||
jsunity.run(ahuacatlQueryNeighborsErrorsSuite);
|
||||
jsunity.run(ahuacatlQueryShortestpathErrorsSuite);
|
||||
}
|
||||
|
||||
return jsunity.done();
|
||||
|
|
|
@ -944,6 +944,11 @@ namespace triagens {
|
|||
backwardSearcher.reset(new Searcher(this, backward, forward, target,
|
||||
_backwardExpander, "Backward"));
|
||||
}
|
||||
|
||||
TRI_IF_FAILURE("TraversalOOMInitialize") {
|
||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||
}
|
||||
|
||||
while (! _bingo) {
|
||||
if (! forwardSearcher.oneStep()) {
|
||||
break;
|
||||
|
@ -980,6 +985,11 @@ namespace triagens {
|
|||
r_vertices.push_back(s->_predecessor);
|
||||
s = backward._pq.find(s->_predecessor);
|
||||
}
|
||||
|
||||
TRI_IF_FAILURE("TraversalOOMPath") {
|
||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||
}
|
||||
|
||||
return new Path(r_vertices, r_edges, _highscore);
|
||||
}
|
||||
|
||||
|
@ -1022,6 +1032,11 @@ namespace triagens {
|
|||
target, _backwardExpander,
|
||||
"Backward"));
|
||||
}
|
||||
|
||||
TRI_IF_FAILURE("TraversalOOMInitialize") {
|
||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||
}
|
||||
|
||||
forwardSearcher.start();
|
||||
if (_bidirectional) {
|
||||
backwardSearcher->start();
|
||||
|
@ -1066,6 +1081,11 @@ namespace triagens {
|
|||
r_vertices.push_back(s->_predecessor);
|
||||
s = backward._pq.find(s->_predecessor);
|
||||
}
|
||||
|
||||
TRI_IF_FAILURE("TraversalOOMPath") {
|
||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||
}
|
||||
|
||||
return new Path(r_vertices, r_edges, _highscore);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue