summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorAllison Easton <allison.easton@mongodb.com>2022-02-14 07:06:52 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-02-14 07:34:53 +0000
commit7aa7f8f47a2c8e07fdfb5f79b9adf870b7ca6612 (patch)
tree17c4e0095683791ff00cc3ebdc453b5786e94ca1 /jstests
parent7c885be64e4d0f80abf3dc999379c555854a9228 (diff)
downloadmongo-7aa7f8f47a2c8e07fdfb5f79b9adf870b7ca6612.tar.gz
SERVER-60733 Test create collection after drop collection
Diffstat (limited to 'jstests')
-rw-r--r--jstests/concurrency/fsm_workloads/create_and_drop_collection.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/jstests/concurrency/fsm_workloads/create_and_drop_collection.js b/jstests/concurrency/fsm_workloads/create_and_drop_collection.js
new file mode 100644
index 00000000000..7ca0e2d73f0
--- /dev/null
+++ b/jstests/concurrency/fsm_workloads/create_and_drop_collection.js
@@ -0,0 +1,69 @@
+'use strict';
+
+/**
+ * create_and_drop_collection.js
+ *
+ * Repeatedly creates and drops a collection.
+ *
+ * @tags: [requires_sharding]
+ */
+var $config = (function() {
+ var data = {};
+
+ var states = (function() {
+ function init(db, collName) {
+ this.docNum = 0;
+ }
+
+ function checkForDocument(coll, docNum) {
+ let docs = coll.find({}).toArray();
+ assert.eq(docs.length, 1);
+ assert.eq(docs[0]._id, docNum);
+ }
+
+ function createShardedCollection(db, collName) {
+ assertAlways.commandWorked(db.adminCommand({enableSharding: db.getName()}));
+ assertAlways.commandWorked(
+ db.adminCommand({shardCollection: db[collName].getFullName(), key: {_id: 1}}));
+ assertAlways.commandWorked(db[collName].insertOne({_id: this.docNum}));
+ checkForDocument(db[collName], this.docNum);
+ }
+
+ function createUnshardedCollection(db, collName) {
+ assertAlways.commandWorked(db[collName].insertOne({_id: this.docNum}));
+ checkForDocument(db[collName], this.docNum);
+ }
+
+ function dropCollection(db, collName) {
+ checkForDocument(db[collName], this.docNum++);
+ assertAlways(db[collName].drop());
+ }
+
+ function dropDatabase(db, collName) {
+ checkForDocument(db[collName], this.docNum++);
+ assertAlways.commandWorked(db.dropDatabase());
+ }
+
+ return {
+ init: init,
+ createShardedCollection: createShardedCollection,
+ createUnshardedCollection: createUnshardedCollection,
+ dropCollection: dropCollection,
+ dropDatabase: dropDatabase
+ };
+ })();
+
+ var transitions = {
+ init: {createShardedCollection: 0.5, createUnshardedCollection: 0.5},
+ createShardedCollection: {dropCollection: 0.5, dropDatabase: 0.5},
+ createUnshardedCollection: {dropCollection: 0.5, dropDatabase: 0.5},
+ dropCollection: {createShardedCollection: 0.5, createUnshardedCollection: 0.5},
+ dropDatabase: {createShardedCollection: 0.5, createUnshardedCollection: 0.5}
+ };
+
+ // This test in in the concurrency suite because it requires shard stepdowns to properly test
+ // that no documents from a newly created collection are dropped from a previous drop
+ // collection. There is only one thread because only one collection is being dropped and
+ // created.
+ return {threadCount: 1, iterations: 50, data: data, states: states, transitions: transitions};
+})();