1
0
Fork 0

allow locking/unlocking of arbitrary keys

This commit is contained in:
Jan Steemann 2014-01-03 15:18:48 +01:00
parent 84c46ddb4d
commit 3176c772cf
2 changed files with 36 additions and 78 deletions

View File

@ -839,10 +839,6 @@ std::string AgencyComm::generateStamp () {
bool AgencyComm::checkLockType (std::string const& key, bool AgencyComm::checkLockType (std::string const& key,
std::string const& value) { std::string const& value) {
if (key != "Plan" && key != "Current" && key != "Target") {
return false;
}
if (value != "READ" && value != "WRITE") { if (value != "READ" && value != "WRITE") {
return false; return false;
} }

View File

@ -40,9 +40,9 @@ function AgencySuite () {
var agency; var agency;
var cleanupLocks = function () { var cleanupLocks = function () {
agency.set("Target/Lock", "UNLOCKED"); agency.set("UnitTestsAgency/Target/Lock", "UNLOCKED");
agency.set("Plan/Lock", "UNLOCKED"); agency.set("UnitTestsAgency/Plan/Lock", "UNLOCKED");
agency.set("Current/Lock", "UNLOCKED"); agency.set("UnitTestsAgency/Current/Lock", "UNLOCKED");
}; };
return { return {
@ -125,25 +125,6 @@ function AgencySuite () {
}, values); }, values);
}, },
////////////////////////////////////////////////////////////////////////////////
/// @brief test lockRead
////////////////////////////////////////////////////////////////////////////////
testLockReadInvalid : function () {
cleanupLocks();
var invalidKeys = [ "foo", "bar", "baz", "plans", "PLAN" ];
invalidKeys.forEach (function (key) {
try {
agency.lockRead(key);
fail();
}
catch (err) {
}
});
},
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief test lockRead /// @brief test lockRead
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -151,14 +132,14 @@ function AgencySuite () {
testLockRead : function () { testLockRead : function () {
cleanupLocks(); cleanupLocks();
assertTrue(agency.lockRead("Target")); assertTrue(agency.lockRead("UnitTestsAgency/Target"));
assertTrue(agency.unlockRead("Target")); assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
assertTrue(agency.lockRead("Plan")); assertTrue(agency.lockRead("UnitTestsAgency/Plan"));
assertTrue(agency.unlockRead("Plan")); assertTrue(agency.unlockRead("UnitTestsAgency/Plan"));
assertTrue(agency.lockRead("Current")); assertTrue(agency.lockRead("UnitTestsAgency/Current"));
assertTrue(agency.unlockRead("Current")); assertTrue(agency.unlockRead("UnitTestsAgency/Current"));
}, },
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -168,18 +149,18 @@ function AgencySuite () {
testLockReadNotExisting : function () { testLockReadNotExisting : function () {
cleanupLocks(); cleanupLocks();
assertTrue(agency.remove("Target/Lock")); assertTrue(agency.remove("UnitTestsAgency/Target/Lock"));
assertTrue(agency.remove("Plan/Lock")); assertTrue(agency.remove("UnitTestsAgency/Plan/Lock"));
assertTrue(agency.remove("Current/Lock")); assertTrue(agency.remove("UnitTestsAgency/Current/Lock"));
assertTrue(agency.lockRead("Target")); assertTrue(agency.lockRead("UnitTestsAgency/Target"));
assertTrue(agency.unlockRead("Target")); assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
assertTrue(agency.lockRead("Plan")); assertTrue(agency.lockRead("UnitTestsAgency/Plan"));
assertTrue(agency.unlockRead("Plan")); assertTrue(agency.unlockRead("UnitTestsAgency/Plan"));
assertTrue(agency.lockRead("Current")); assertTrue(agency.lockRead("UnitTestsAgency/Current"));
assertTrue(agency.unlockRead("Current")); assertTrue(agency.unlockRead("UnitTestsAgency/Current"));
}, },
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -189,17 +170,17 @@ function AgencySuite () {
testLockReadDouble : function () { testLockReadDouble : function () {
cleanupLocks(); cleanupLocks();
assertTrue(agency.lockRead("Target", 5)); assertTrue(agency.lockRead("UnitTestsAgency/Target", 5));
try { try {
// this will fail because of a duplicate lock // this will fail because of a duplicate lock
assertTrue(agency.lockRead("Target", 1, 1)); assertTrue(agency.lockRead("UnitTestsAgency/Target", 1, 1));
fail(); fail();
} }
catch (err) { catch (err) {
} }
assertTrue(agency.unlockRead("Target")); assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
}, },
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -209,36 +190,17 @@ function AgencySuite () {
testLockReadWrongType : function () { testLockReadWrongType : function () {
cleanupLocks(); cleanupLocks();
assertTrue(agency.lockRead("Target", 5)); assertTrue(agency.lockRead("UnitTestsAgency/Target", 5));
try { try {
// unlock of a wrong type // unlock of a wrong type
agency.unlockWrite("Target", 1); agency.unlockWrite("UnitTestsAgency/Target", 1);
fail(); fail();
} }
catch (err) { catch (err) {
} }
assertTrue(agency.unlockRead("Target")); assertTrue(agency.unlockRead("UnitTestsAgency/Target"));
},
////////////////////////////////////////////////////////////////////////////////
/// @brief test lockWrite
////////////////////////////////////////////////////////////////////////////////
testLockWriteInvalid : function () {
cleanupLocks();
var invalidKeys = [ "foo", "bar", "baz", "plans", "PLAN" ];
invalidKeys.forEach (function (key) {
try {
agency.lockWrite(key);
fail();
}
catch (err) {
}
});
}, },
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -248,14 +210,14 @@ function AgencySuite () {
testLockWrite : function () { testLockWrite : function () {
cleanupLocks(); cleanupLocks();
assertTrue(agency.lockWrite("Target")); assertTrue(agency.lockWrite("UnitTestsAgency/Target"));
assertTrue(agency.unlockWrite("Target")); assertTrue(agency.unlockWrite("UnitTestsAgency/Target"));
assertTrue(agency.lockWrite("Plan")); assertTrue(agency.lockWrite("UnitTestsAgency/Plan"));
assertTrue(agency.unlockWrite("Plan")); assertTrue(agency.unlockWrite("UnitTestsAgency/Plan"));
assertTrue(agency.lockWrite("Current")); assertTrue(agency.lockWrite("UnitTestsAgency/Current"));
assertTrue(agency.unlockWrite("Current")); assertTrue(agency.unlockWrite("UnitTestsAgency/Current"));
}, },
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -265,17 +227,17 @@ function AgencySuite () {
testLockWriteDouble : function () { testLockWriteDouble : function () {
cleanupLocks(); cleanupLocks();
assertTrue(agency.lockWrite("Target", 5)); assertTrue(agency.lockWrite("UnitTestsAgency/Target", 5));
try { try {
// this will fail because of a duplicate lock // this will fail because of a duplicate lock
assertTrue(agency.lockWrite("Target", 1, 1)); assertTrue(agency.lockWrite("UnitTestsAgency/Target", 1, 1));
fail(); fail();
} }
catch (err) { catch (err) {
} }
assertTrue(agency.unlockWrite("Target")); assertTrue(agency.unlockWrite("UnitTestsAgency/Target"));
}, },
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
@ -285,14 +247,14 @@ function AgencySuite () {
testLockRelock : function () { testLockRelock : function () {
cleanupLocks(); cleanupLocks();
assertTrue(agency.lockRead("Target", 5)); assertTrue(agency.lockRead("UnitTestsAgency/Target", 5));
var start = require("internal").time(); var start = require("internal").time();
assertTrue(agency.lockWrite("Target", 5, 10)); assertTrue(agency.lockWrite("UnitTestsAgency/Target", 5, 10));
var end = require("internal").time(); var end = require("internal").time();
assertTrue(Math.round(end - start) >= 3); assertTrue(Math.round(end - start) >= 3);
assertTrue(agency.unlockWrite("Target")); assertTrue(agency.unlockWrite("UnitTestsAgency/Target"));
}, },
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////