summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/type_locks_test.cpp
diff options
context:
space:
mode:
authorKaloian Manassiev <kaloian.manassiev@mongodb.com>2021-01-07 10:56:01 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-01-09 08:19:43 +0000
commitd69758f9698deb65f67d40be17b02a085e494e5c (patch)
tree78a7294df4c160472f6415bbcf3bd89dc5b95c26 /src/mongo/db/s/type_locks_test.cpp
parent7db36df1210748532fe01899a806ac29a07ec7b5 (diff)
downloadmongo-d69758f9698deb65f67d40be17b02a085e494e5c.tar.gz
SERVER-53227 Move omitted LockPings/LockType files to MongoD
The previous commit forgot to move these files out of MongoS.
Diffstat (limited to 'src/mongo/db/s/type_locks_test.cpp')
-rw-r--r--src/mongo/db/s/type_locks_test.cpp222
1 files changed, 222 insertions, 0 deletions
diff --git a/src/mongo/db/s/type_locks_test.cpp b/src/mongo/db/s/type_locks_test.cpp
new file mode 100644
index 00000000000..8795fedc09d
--- /dev/null
+++ b/src/mongo/db/s/type_locks_test.cpp
@@ -0,0 +1,222 @@
+/**
+ * Copyright (C) 2018-present MongoDB, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the Server Side Public License, version 1,
+ * as published by MongoDB, Inc.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * Server Side Public License for more details.
+ *
+ * You should have received a copy of the Server Side Public License
+ * along with this program. If not, see
+ * <http://www.mongodb.com/licensing/server-side-public-license>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the Server Side Public License in all respects for
+ * all of the code used other than as permitted herein. If you modify file(s)
+ * with this exception, you may extend this exception to your version of the
+ * file(s), but you are not obligated to do so. If you do not wish to do so,
+ * delete this exception statement from your version. If you delete this
+ * exception statement from all source files in the program, then also delete
+ * it in the license file.
+ */
+
+#include "mongo/platform/basic.h"
+
+#include "mongo/base/status_with.h"
+#include "mongo/db/jsobj.h"
+#include "mongo/db/s/type_locks.h"
+#include "mongo/unittest/unittest.h"
+
+namespace mongo {
+namespace {
+
+TEST(Validity, Empty) {
+ BSONObj emptyObj = BSONObj();
+ auto locksResult = LocksType::fromBSON(emptyObj);
+ ASSERT_EQUALS(ErrorCodes::NoSuchKey, locksResult.getStatus());
+}
+
+TEST(Validity, UnlockedWithOptional) {
+ OID testLockID = OID::gen();
+ BSONObj obj =
+ BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::UNLOCKED) << LocksType::lockID(testLockID)
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249")
+ << LocksType::why("twiddling thumbs"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+
+ ASSERT_EQUALS(lock.getName(), "dummy");
+ ASSERT_EQUALS(lock.getProcess(), "host.local:27017:1352918870:16807");
+ ASSERT_EQUALS(lock.getState(), LocksType::State::UNLOCKED);
+ ASSERT_EQUALS(lock.getLockID(), testLockID);
+ ASSERT_EQUALS(lock.getWho(), "host.local:27017:1352918870:16807:Dummy:282475249");
+ ASSERT_EQUALS(lock.getWhy(), "twiddling thumbs");
+}
+
+TEST(Validity, UnlockedWithoutOptional) {
+ BSONObj obj = BSON(LocksType::name("dummy") << LocksType::state(LocksType::State::UNLOCKED));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+
+ ASSERT_EQUALS(lock.getName(), "dummy");
+ ASSERT_EQUALS(lock.getState(), LocksType::State::UNLOCKED);
+}
+
+TEST(Validity, LockedValid) {
+ OID testLockID = OID::gen();
+ BSONObj obj =
+ BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCKED) << LocksType::lockID(testLockID)
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249")
+ << LocksType::why("doing balance round"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+
+ ASSERT_EQUALS(lock.getName(), "dummy");
+ ASSERT_EQUALS(lock.getProcess(), "host.local:27017:1352918870:16807");
+ ASSERT_EQUALS(lock.getState(), LocksType::State::LOCKED);
+ ASSERT_EQUALS(lock.getLockID(), testLockID);
+ ASSERT_EQUALS(lock.getWho(), "host.local:27017:1352918870:16807:Dummy:282475249");
+ ASSERT_EQUALS(lock.getWhy(), "doing balance round");
+}
+
+TEST(Validity, LockedMissingProcess) {
+ BSONObj obj =
+ BSON(LocksType::name("dummy")
+ << LocksType::state(LocksType::State::LOCKED) << LocksType::lockID(OID::gen())
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249")
+ << LocksType::why("doing balance round"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, LockedMissingLockID) {
+ BSONObj obj = BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCKED)
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249")
+ << LocksType::why("doing balance round"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, LockedMissingWho) {
+ BSONObj obj = BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCKED)
+ << LocksType::lockID(OID::gen()) << LocksType::why("twiddling thumbs"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, LockedMissingWhy) {
+ BSONObj obj =
+ BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCKED) << LocksType::lockID(OID::gen())
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, ContestedValid) {
+ BSONObj obj =
+ BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCK_PREP) << LocksType::lockID(OID::gen())
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249")
+ << LocksType::why("twiddling thumbs"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_OK(lock.validate());
+}
+
+TEST(Validity, ContestedMissingProcess) {
+ BSONObj obj =
+ BSON(LocksType::name("dummy")
+ << LocksType::state(LocksType::State::LOCK_PREP) << LocksType::lockID(OID::gen())
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249")
+ << LocksType::why("twiddling thumbs"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, ContestedMissingLockID) {
+ BSONObj obj = BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCK_PREP)
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249")
+ << LocksType::why("twiddling thumbs"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, ContestedMissingWho) {
+ BSONObj obj = BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCK_PREP)
+ << LocksType::lockID(OID::gen()) << LocksType::why("doing balance round"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, ContestedMissingWhy) {
+ BSONObj obj =
+ BSON(LocksType::name("dummy")
+ << LocksType::process("host.local:27017:1352918870:16807")
+ << LocksType::state(LocksType::State::LOCK_PREP) << LocksType::lockID(OID::gen())
+ << LocksType::who("host.local:27017:1352918870:16807:Dummy:282475249"));
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_OK(locksResult.getStatus());
+
+ const LocksType& lock = locksResult.getValue();
+ ASSERT_NOT_OK(lock.validate());
+}
+
+TEST(Validity, BadType) {
+ BSONObj obj = BSON(LocksType::name() << 0);
+ auto locksResult = LocksType::fromBSON(obj);
+ ASSERT_EQUALS(ErrorCodes::TypeMismatch, locksResult.getStatus());
+}
+
+} // namespace
+} // namespace mongo