1
0
Fork 0

Added further OOM tests for ShortestPath computation

This commit is contained in:
Michael Hackstein 2015-06-16 11:27:21 +02:00
parent df75ae48f9
commit 933e4c353a
2 changed files with 116 additions and 0 deletions

View File

@ -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();

View File

@ -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);
}