summaryrefslogtreecommitdiff
path: root/test/include/ibm/lock_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/include/ibm/lock_test.cpp')
-rw-r--r--test/include/ibm/lock_test.cpp314
1 files changed, 0 insertions, 314 deletions
diff --git a/test/include/ibm/lock_test.cpp b/test/include/ibm/lock_test.cpp
deleted file mode 100644
index 9570ec6f90..0000000000
--- a/test/include/ibm/lock_test.cpp
+++ /dev/null
@@ -1,314 +0,0 @@
-#include "ibm/locks.hpp"
-
-#include <cstdint>
-#include <string>
-#include <tuple>
-#include <utility>
-#include <variant>
-#include <vector>
-
-#include <gmock/gmock.h> // IWYU pragma: keep
-#include <gtest/gtest.h> // IWYU pragma: keep
-
-// IWYU pragma: no_include <gtest/gtest-message.h>
-// IWYU pragma: no_include <gtest/gtest-test-part.h>
-// IWYU pragma: no_include "gtest/gtest_pred_impl.h"
-
-namespace crow::ibm_mc_lock
-{
-namespace
-{
-
-using SType = std::string;
-using LockRequest = std::tuple<SType, SType, SType, uint64_t, SegmentFlags>;
-using LockRequests = std::vector<LockRequest>;
-using Rc =
- std::pair<bool, std::variant<uint32_t, std::pair<uint32_t, LockRequest>>>;
-using RcRelaseLock = std::pair<bool, std::pair<uint32_t, LockRequest>>;
-using RcGetLockList =
- std::variant<std::string, std::vector<std::pair<uint32_t, LockRequests>>>;
-using ListOfTransactionIds = std::vector<uint32_t>;
-using RcAcquireLock = std::pair<bool, std::variant<Rc, std::pair<bool, int>>>;
-using RcReleaseLockApi = std::pair<bool, std::variant<bool, RcRelaseLock>>;
-using SessionFlags = std::pair<SType, SType>;
-using ListOfSessionIds = std::vector<std::string>;
-using ::testing::IsEmpty;
-
-class LockTest : public ::testing::Test
-{
- protected:
- LockRequests request;
- LockRequests request1, request2;
- LockRequest record;
-
- public:
- LockTest() :
- // lockrequest with multiple lockrequests
- request{{"xxxxx",
- "hmc-id",
- "Read",
- 234,
- {{"DontLock", 2}, {"DontLock", 4}}},
- {"xxxxx",
- "hmc-id",
- "Read",
- 234,
- {{"DontLock", 2}, {"DontLock", 4}}}},
- request1{{"xxxxx",
- "hmc-id",
- "Read",
- 234,
- {{"DontLock", 2}, {"DontLock", 4}}}},
- request2{{"xxxxx",
- "hmc-id",
- "Write",
- 234,
- {{"LockAll", 2}, {"DontLock", 4}}}},
- record{
- "xxxxx", "hmc-id", "Read", 234, {{"DontLock", 2}, {"DontLock", 4}}}
- {}
-
- ~LockTest() override = default;
-
- LockTest(const LockTest&) = delete;
- LockTest(LockTest&&) = delete;
- LockTest& operator=(const LockTest&) = delete;
- LockTest& operator=(const LockTest&&) = delete;
-};
-
-class MockLock : public crow::ibm_mc_lock::Lock
-{
- public:
- bool isValidLockRequest(const LockRequest& record1) override
- {
- bool status = Lock::isValidLockRequest(record1);
- return status;
- }
- bool isConflictRequest(const LockRequests& request) override
- {
- bool status = Lock::isConflictRequest(request);
- return status;
- }
- Rc isConflictWithTable(const LockRequests& request) override
- {
- auto conflict = Lock::isConflictWithTable(request);
- return conflict;
- }
- uint32_t generateTransactionId() override
- {
- uint32_t tid = Lock::generateTransactionId();
- return tid;
- }
-
- bool validateRids(const ListOfTransactionIds& tids) override
- {
- bool status = Lock::validateRids(tids);
- return status;
- }
- RcRelaseLock isItMyLock(const ListOfTransactionIds& tids,
- const SessionFlags& ids) override
- {
- auto status = Lock::isItMyLock(tids, ids);
- return status;
- }
- friend class LockTest;
-};
-
-TEST_F(LockTest, ValidationGoodTestCase)
-{
- MockLock lockManager;
- const LockRequest& t = record;
- EXPECT_TRUE(lockManager.isValidLockRequest(t));
-}
-
-TEST_F(LockTest, ValidationBadTestWithLocktype)
-{
- MockLock lockManager;
- // Corrupt the lock type
- std::get<2>(record) = "rwrite";
- const LockRequest& t = record;
- EXPECT_FALSE(lockManager.isValidLockRequest(t));
-}
-
-TEST_F(LockTest, ValidationBadTestWithlockFlags)
-{
- MockLock lockManager;
- // Corrupt the lockflag
- std::get<4>(record)[0].first = "lock";
- const LockRequest& t = record;
- EXPECT_FALSE(lockManager.isValidLockRequest(t));
-}
-
-TEST_F(LockTest, ValidationBadTestWithSegmentlength)
-{
- MockLock lockManager;
- // Corrupt the Segment length
- std::get<4>(record)[0].second = 7;
- const LockRequest& t = record;
- EXPECT_FALSE(lockManager.isValidLockRequest(t));
-}
-
-TEST_F(LockTest, MultiRequestWithoutConflict)
-{
- MockLock lockManager;
- const LockRequests& t = request;
- EXPECT_FALSE(lockManager.isConflictRequest(t));
-}
-
-TEST_F(LockTest, MultiRequestWithConflictduetoSameSegmentLength)
-{
- MockLock lockManager;
- // Corrupt the locktype
- std::get<2>(request[0]) = "Write";
- // Match the segment lengths to points them to lock similar kind of
- // resource
- std::get<4>(request[0])[0].first = "LockAll";
- const LockRequests& t = request;
- EXPECT_TRUE(lockManager.isConflictRequest(t));
-}
-
-TEST_F(LockTest, MultiRequestWithoutConflictduetoDifferentSegmentLength)
-{
- MockLock lockManager;
- // Corrupt the locktype
- std::get<2>(request[0]) = "Write";
- // Match the segment lengths to points them to lock similar kind of
- // resource
- std::get<4>(request[0])[0].first = "LockSame";
- // Change the segment length , so that the requests are trying to lock
- // two different kind of resources
- std::get<4>(request[0])[0].second = 3;
- const LockRequests& t = request;
- // Return No Conflict
- EXPECT_FALSE(lockManager.isConflictRequest(t));
-}
-
-TEST_F(LockTest, MultiRequestWithoutConflictduetoReadLocktype)
-{
- MockLock lockManager;
- // Match the segment lengths to points them to lock similar kind of
- // resource
- std::get<4>(request[0])[0].first = "LockAll";
- const LockRequests& t = request;
- // Return No Conflict
- EXPECT_FALSE(lockManager.isConflictRequest(t));
-}
-
-TEST_F(LockTest, MultiRequestWithoutConflictduetoReadLocktypeAndLockall)
-{
- MockLock lockManager;
- // Match the segment lengths to points them to lock similar kind of
- // resource
- std::get<4>(request[0])[0].first = "LockAll";
- std::get<4>(request[0])[1].first = "LockAll";
- const LockRequests& t = request;
- // Return No Conflict
- EXPECT_FALSE(lockManager.isConflictRequest(t));
-}
-
-TEST_F(LockTest, RequestNotConflictedWithLockTableEntries)
-{
- MockLock lockManager;
- const LockRequests& t = request1;
- // Insert the request1 into the lock table
- auto rc1 = lockManager.isConflictWithTable(t);
- // Corrupt the lock type
- std::get<2>(request[0]) = "Read";
- // Corrupt the lockflag
- std::get<4>(request[0])[1].first = "LockAll";
- const LockRequests& p = request;
- auto rc2 = lockManager.isConflictWithTable(p);
- // Return No Conflict
- EXPECT_FALSE(rc2.first);
-}
-
-TEST_F(LockTest, TestGenerateTransactionIDFunction)
-{
- MockLock lockManager;
- uint32_t transactionId1 = lockManager.generateTransactionId();
- uint32_t transactionId2 = lockManager.generateTransactionId();
- EXPECT_EQ(transactionId2, ++transactionId1);
-}
-
-TEST_F(LockTest, ValidateTransactionIDsGoodTestCase)
-{
- MockLock lockManager;
- const LockRequests& t = request1;
- // Insert the request1 into the lock table
- auto rc1 = lockManager.isConflictWithTable(t);
- std::vector<uint32_t> tids = {1};
- const std::vector<uint32_t>& p = tids;
- EXPECT_TRUE(lockManager.validateRids(p));
-}
-
-TEST_F(LockTest, ValidateTransactionIDsBadTestCase)
-{
- MockLock lockManager;
- // Insert the request1 into the lock table
- const LockRequests& t = request1;
- auto rc1 = lockManager.isConflictWithTable(t);
- std::vector<uint32_t> tids = {10};
- const std::vector<uint32_t>& p = tids;
- EXPECT_FALSE(lockManager.validateRids(p));
-}
-
-TEST_F(LockTest, ValidateisItMyLockGoodTestCase)
-{
- MockLock lockManager;
- // Insert the request1 into the lock table
- const LockRequests& t = request1;
- auto rc1 = lockManager.isConflictWithTable(t);
- std::vector<uint32_t> tids = {1};
- const std::vector<uint32_t>& p = tids;
- std::string hmcid = "hmc-id";
- std::string sessionid = "xxxxx";
- std::pair<SType, SType> ids = std::make_pair(hmcid, sessionid);
- auto rc = lockManager.isItMyLock(p, ids);
- EXPECT_TRUE(rc.first);
-}
-
-TEST_F(LockTest, ValidateisItMyLockBadTestCase)
-{
- MockLock lockManager;
- // Corrupt the client identifier
- std::get<1>(request1[0]) = "randomid";
- // Insert the request1 into the lock table
- const LockRequests& t = request1;
- auto rc1 = lockManager.isConflictWithTable(t);
- std::vector<uint32_t> tids = {1};
- const std::vector<uint32_t>& p = tids;
- std::string hmcid = "hmc-id";
- std::string sessionid = "random";
- std::pair<SType, SType> ids = std::make_pair(hmcid, sessionid);
- auto rc = lockManager.isItMyLock(p, ids);
- EXPECT_FALSE(rc.first);
-}
-
-TEST_F(LockTest, ValidateSessionIDForGetlocklistBadTestCase)
-{
- MockLock lockManager;
- // Insert the request1 into the lock table
- const LockRequests& t = request1;
- auto rc1 = lockManager.isConflictWithTable(t);
- std::vector<std::string> sessionid = {"random"};
- auto status = lockManager.getLockList(sessionid);
- auto result =
- std::get<std::vector<std::pair<uint32_t, LockRequests>>>(status);
- EXPECT_THAT(result, IsEmpty());
-}
-
-TEST_F(LockTest, ValidateSessionIDForGetlocklistGoodTestCase)
-{
- MockLock lockManager;
- // Insert the request1 into the lock table
- const LockRequests& t = request1;
- auto rc1 = lockManager.isConflictWithTable(t);
- std::vector<std::string> sessionid = {"xxxxx"};
- auto status = lockManager.getLockList(sessionid);
- auto result =
- std::get<std::vector<std::pair<uint32_t, LockRequests>>>(status);
- EXPECT_EQ(result.size(), 1);
-}
-
-} // namespace
-} // namespace crow::ibm_mc_lock