summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/database_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/catalog/database_test.cpp')
-rw-r--r--src/mongo/db/catalog/database_test.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mongo/db/catalog/database_test.cpp b/src/mongo/db/catalog/database_test.cpp
index 4ba521f6b65..35c1127bb64 100644
--- a/src/mongo/db/catalog/database_test.cpp
+++ b/src/mongo/db/catalog/database_test.cpp
@@ -35,6 +35,7 @@
#include "mongo/db/catalog/index_create.h"
#include "mongo/db/catalog/uuid_catalog.h"
#include "mongo/db/client.h"
+#include "mongo/db/concurrency/d_concurrency.h"
#include "mongo/db/concurrency/write_conflict_exception.h"
#include "mongo/db/db_raii.h"
#include "mongo/db/jsobj.h"
@@ -537,4 +538,26 @@ TEST_F(
db->makeUniqueCollectionNamespace(_opCtx.get(), model));
});
}
+
+TEST_F(DatabaseTest, DBLockCanBePassedToAutoGetDb) {
+ NamespaceString nss("test", "coll");
+ Lock::DBLock lock(_opCtx.get(), nss.db(), MODE_X);
+ {
+ AutoGetDb db(_opCtx.get(), nss.db(), std::move(lock));
+ ASSERT(_opCtx.get()->lockState()->isDbLockedForMode(nss.db(), MODE_X));
+ }
+ // The moved lock should go out of scope here, so the database should no longer be locked.
+ ASSERT_FALSE(_opCtx.get()->lockState()->isDbLockedForMode(nss.db(), MODE_X));
+}
+
+TEST_F(DatabaseTest, DBLockCanBePassedToAutoGetCollectionOrViewForReadCommand) {
+ NamespaceString nss("test", "coll");
+ Lock::DBLock lock(_opCtx.get(), nss.db(), MODE_X);
+ {
+ AutoGetCollectionOrViewForReadCommand coll(_opCtx.get(), nss, std::move(lock));
+ ASSERT(_opCtx.get()->lockState()->isDbLockedForMode(nss.db(), MODE_X));
+ }
+ // The moved lock should go out of scope here, so the database should no longer be locked.
+ ASSERT_FALSE(_opCtx.get()->lockState()->isDbLockedForMode(nss.db(), MODE_X));
+}
} // namespace