1
0
Fork 0
arangodb/tests/js/server/shell/shell-cluster-agency.js

453 lines
17 KiB
JavaScript

/*jshint globalstrict:false, strict:false */
/*global fail, assertFalse, assertTrue, assertEqual, ArangoAgency */
////////////////////////////////////////////////////////////////////////////////
/// @brief test the agency communication layer
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 2010-2012 triagens GmbH, Cologne, Germany
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///
/// http://www.apache.org/licenses/LICENSE-2.0
///
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
/// Copyright holder is triAGENS GmbH, Cologne, Germany
///
/// @author Jan Steemann
/// @author Copyright 2013, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
var jsunity = require("jsunity");
////////////////////////////////////////////////////////////////////////////////
/// @brief test suite: agency
////////////////////////////////////////////////////////////////////////////////
function AgencySuite () {
'use strict';
var agency = ArangoAgency;
var cleanupLocks = function () {
agency.set("UnitTestsAgency/Target/Lock", "UNLOCKED");
agency.set("UnitTestsAgency/Plan/Lock", "UNLOCKED");
agency.set("UnitTestsAgency/Current/Lock", "UNLOCKED");
};
return {
setUp : function () {
try {
agency.remove("UnitTestsAgency", true);
}
catch (err) {
// dir may not exist. this is not a problem
}
agency.createDirectory("UnitTestsAgency");
},
tearDown : function () {
try {
agency.remove("UnitTestsAgency", true);
}
catch (err) {
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test set
////////////////////////////////////////////////////////////////////////////////
testSet : function () {
// insert
agency.set("UnitTestsAgency/foo", "test1");
var values = agency.get("UnitTestsAgency/foo");
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertTrue(values.arango.UnitTestsAgency.hasOwnProperty("foo"));
assertEqual(values.arango.UnitTestsAgency.foo, "test1");
// overwrite
agency.set("UnitTestsAgency/foo", "test2", 2);
values = agency.get("UnitTestsAgency/foo");
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertTrue(values.arango.UnitTestsAgency.hasOwnProperty("foo"));
assertEqual(values.arango.UnitTestsAgency.foo, "test2");
assertTrue(agency.remove("UnitTestsAgency/foo"));
// re-insert
agency.set("UnitTestsAgency/foo", "test3");
values = agency.get("UnitTestsAgency/foo");
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertTrue(values.arango.UnitTestsAgency.hasOwnProperty("foo"));
assertEqual(values.arango.UnitTestsAgency.foo, "test3");
// update with ttl
agency.set("UnitTestsAgency/foo", "test4", 2);
values = agency.get("UnitTestsAgency/foo");
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertTrue(values.arango.UnitTestsAgency.hasOwnProperty("foo"));
assertEqual(values.arango.UnitTestsAgency.foo, "test4");
require("internal").wait(3);
values = agency.get("UnitTestsAgency/foo");
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertFalse(values.arango.UnitTestsAgency.hasOwnProperty("foo"));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test cas
////////////////////////////////////////////////////////////////////////////////
testCas : function () {
assertTrue(agency.set("UnitTestsAgency/foo", "bar"));
assertTrue(agency.cas("UnitTestsAgency/foo", "bar", "baz"));
assertTrue(agency.cas("UnitTestsAgency/foo", "baz", "bart"));
assertFalse(agency.cas("UnitTestsAgency/foo", "foo", "bar"));
assertFalse(agency.cas("UnitTestsAgency/boo", "foo", "bar"));
try {
agency.cas("UnitTestsAgency/foo", "foo", "bar", 1, true);
fail();
}
catch (err) {
}
assertTrue(agency.cas("UnitTestsAgency/foo", "bart", "baz", 0, 1, true));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test createDir
////////////////////////////////////////////////////////////////////////////////
testCreateDir : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
assertTrue(agency.createDirectory("UnitTestsAgency/someDir2/bar"));
try {
// re-create an existing dir
agency.createDir("UnitTestsAgency/someDir");
fail();
}
catch (err1) {
}
try {
// re-create an existing dir
agency.createDir("UnitTestsAgency/someDir2/bar");
fail();
}
catch (err2) {
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test createDir / remove
////////////////////////////////////////////////////////////////////////////////
testCreateRemoveDir : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
assertTrue(agency.remove("UnitTestsAgency/someDir", true));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test removeDir
////////////////////////////////////////////////////////////////////////////////
testRemoveDirNonRecursive : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
try {
assertTrue(agency.remove("UnitTestsAgency/someDir", false));
fail();
}
catch (err) {
// not a file
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test removeDir
////////////////////////////////////////////////////////////////////////////////
testRemoveDirRecursive1 : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/2/1"));
agency.set("UnitTestsAgency/1/1/foo", "bar");
agency.set("UnitTestsAgency/2/1/foo", "baz");
assertTrue(agency.remove("UnitTestsAgency/1/1", true));
assertTrue(agency.remove("UnitTestsAgency/1/2", true));
assertTrue(agency.remove("UnitTestsAgency/1", true));
assertTrue(agency.remove("UnitTestsAgency/2", true));
var values = agency.get("UnitTestsAgency", true).arango.UnitTestsAgency;
assertEqual({ }, values); // empty
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test removeDir
////////////////////////////////////////////////////////////////////////////////
testRemoveDirRecursive2 : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/2/1"));
agency.set("UnitTestsAgency/1/1/foo", "bar");
agency.set("UnitTestsAgency/2/1/foo", "baz");
assertTrue(agency.remove("UnitTestsAgency/1", true));
var values = agency.get("UnitTestsAgency/1", true);
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertFalse(values.arango.UnitTestsAgency.hasOwnProperty("1"));
values = agency.get("UnitTestsAgency/2", true);
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertTrue(values.arango.UnitTestsAgency.hasOwnProperty("2"));
assertEqual(values.arango.UnitTestsAgency["2"], {"1":{"foo":"baz"}});
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test removeDir
////////////////////////////////////////////////////////////////////////////////
testRemoveDirRecursive3 : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2/1"));
assertTrue(agency.createDirectory("UnitTestsAgency/1/2/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/2"));
assertTrue(agency.createDirectory("UnitTestsAgency/2/1"));
agency.set("UnitTestsAgency/1/1/foo", "bar");
agency.set("UnitTestsAgency/2/1/foo", "baz");
assertTrue(agency.remove("UnitTestsAgency", true));
var value = agency.get("UnitTestsAgency", true);
assertTrue(value.hasOwnProperty("arango"));
assertEqual(value.arango, {});
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test removeDir
////////////////////////////////////////////////////////////////////////////////
testRemoveDirNonExisting : function () {
try {
assertTrue(agency.remove("UnitTestsAgency/someDir", true));
fail();
}
catch (err) {
// key not found
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test remove
////////////////////////////////////////////////////////////////////////////////
testRemoveKeys : function () {
var i;
for (i = 0; i < 100; ++i) {
assertTrue(agency.set("UnitTestsAgency/" + i, "value" + i));
}
for (i = 10; i < 90; ++i) {
assertTrue(agency.remove("UnitTestsAgency/" + i));
}
var values;
for (i = 0; i < 100; ++i) {
if (i >= 10 && i < 90) {
values = agency.get("UnitTestsAgency/" + i);
assertEqual(values, {"arango":{"UnitTestsAgency":{}}});
}
else {
values = agency.get("UnitTestsAgency/" + i);
assertTrue(values.hasOwnProperty("arango"));
assertTrue(values.arango.hasOwnProperty("UnitTestsAgency"));
assertTrue(values.arango.UnitTestsAgency.hasOwnProperty("" + i));
assertEqual(values.arango.UnitTestsAgency[i], "value" + i);
}
}
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test set / get
////////////////////////////////////////////////////////////////////////////////
testGet : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
agency.set("UnitTestsAgency/someDir/foo", "bar");
var values = agency.get("UnitTestsAgency/someDir/foo");
assertEqual(values, {"arango":{"UnitTestsAgency":{"someDir":{"foo":"bar"}}}});
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test get recursive
////////////////////////////////////////////////////////////////////////////////
testGetRecursive : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
agency.set("UnitTestsAgency/someDir/foo/1/1/1", "bar1");
agency.set("UnitTestsAgency/someDir/foo/1/1/2", "bar2");
agency.set("UnitTestsAgency/someDir/foo/1/2/1", "bar3");
agency.set("UnitTestsAgency/someDir/foo/1/2/2", "bar4");
agency.set("UnitTestsAgency/someDir/foo/2/1/1", "bar5");
agency.set("UnitTestsAgency/someDir/foo/2/1/2", "bar6");
var values = agency.get("UnitTestsAgency/someDir").arango.UnitTestsAgency.someDir.foo;
assertEqual({"1":{"1":{"1":"bar1","2":"bar2"},
"2":{"1":"bar3","2":"bar4"}},
"2":{"1":{"1":"bar5","2":"bar6"}}}, values);
values = agency.get("UnitTestsAgency/someDir/foo").arango.UnitTestsAgency.someDir.foo;
assertEqual({"1":{"1":{"1":"bar1","2":"bar2"},
"2":{"1":"bar3","2":"bar4"}},
"2":{"1":{"1":"bar5","2":"bar6"}}}, values);
values = agency.get("UnitTestsAgency/someDir", true).arango.UnitTestsAgency.someDir.foo;
assertEqual({"1":{"1":{"1":"bar1","2":"bar2"},
"2":{"1":"bar3","2":"bar4"}},
"2":{"1":{"1":"bar5","2":"bar6"}}}, values);
values = agency.get("UnitTestsAgency/someDir/foo", true).arango.UnitTestsAgency.someDir.foo;
assertEqual({"1":{"1":{"1":"bar1","2":"bar2"},
"2":{"1":"bar3","2":"bar4"}},
"2":{"1":{"1":"bar5","2":"bar6"}}}, values);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test set / get multi
////////////////////////////////////////////////////////////////////////////////
testGetMulti : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
assertTrue(agency.set("UnitTestsAgency/someDir/foo", "bar"));
assertTrue(agency.set("UnitTestsAgency/someDir/baz", "bart"));
var values = agency.get("UnitTestsAgency", true).arango.UnitTestsAgency;
assertEqual({ "someDir" : {"foo": "bar", "baz": "bart"}}, values);
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test set / get
////////////////////////////////////////////////////////////////////////////////
testGetUpdated : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
agency.set("UnitTestsAgency/someDir/foo", "bar");
var values = agency.get("UnitTestsAgency/someDir/foo").arango.UnitTestsAgency.someDir.foo;
assertEqual(values, "bar");
agency.set("UnitTestsAgency/someDir/foo", "baz");
values = agency.get("UnitTestsAgency/someDir/foo").arango.UnitTestsAgency.someDir.foo;
assertEqual(values, "baz");
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test set / get
////////////////////////////////////////////////////////////////////////////////
testGetDeleted : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
agency.set("UnitTestsAgency/someDir/foo", "bar");
var values = agency.get("UnitTestsAgency/someDir/foo").arango.UnitTestsAgency.someDir.foo;
assertEqual(values, "bar");
agency.remove("UnitTestsAgency/someDir/foo");
values = agency.get("UnitTestsAgency/someDir/foo").arango.UnitTestsAgency.someDir;
assertEqual(values, {});
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test get
////////////////////////////////////////////////////////////////////////////////
testGetNonExisting1 : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
var value = agency.get("UnitTestsAgency/someDir/foo");
assertEqual(value, {"arango":{"UnitTestsAgency":{"someDir":{}}}});
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test get
////////////////////////////////////////////////////////////////////////////////
testGetNonExisting2 : function () {
var value = agency.get("UnitTestsAgency/someOtherDir");
assertEqual(value, {"arango":{"UnitTestsAgency":{}}});
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test set / get
////////////////////////////////////////////////////////////////////////////////
testGetUrlEncodedValue : function () {
assertTrue(agency.createDirectory("UnitTestsAgency/someDir"));
var value = "bar=BAT;foo=%47abc;degf=2343%20hihi aha\nabc";
agency.set("UnitTestsAgency/someDir/foobar", value);
var values = agency.get("UnitTestsAgency/someDir/foobar").arango.UnitTestsAgency.someDir.foobar;
assertEqual(values, value);
}
};
}
////////////////////////////////////////////////////////////////////////////////
/// @brief executes the test suites
////////////////////////////////////////////////////////////////////////////////
if (ArangoAgency.isEnabled()) {
jsunity.run(AgencySuite);
}
return jsunity.done();