1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
'use strict';
/**
* Helpers for dropping collections or databases created by a workload
* during its execution.
*/
function dropCollections(db, pattern) {
assert(pattern instanceof RegExp, 'expected pattern to be a regular expression');
db.getCollectionInfos()
.filter(function(collInfo) {
return pattern.test(collInfo.name);
})
.forEach(function(collInfo) {
assertAlways(db[collInfo.name].drop());
});
}
function dropDatabases(db, pattern) {
assert(pattern instanceof RegExp, 'expected pattern to be a regular expression');
var res = db.adminCommand('listDatabases');
assertAlways.commandWorked(res);
res.databases.forEach(function(dbInfo) {
if (pattern.test(dbInfo.name)) {
var res = db.getSiblingDB(dbInfo.name).dropDatabase();
assertAlways.commandWorked(res);
}
});
}
/**
* Helper for dropping roles or users that were created by a workload
* during its execution.
*/
function dropUtilRetry(elems, cb, message) {
const kNumRetries = 5;
const kRetryInterval = 5000;
assert.retry(function() {
elems = elems.filter((elem) => !cb(elem));
return elems.length === 0;
}, message, kNumRetries, kRetryInterval);
}
function dropRoles(db, pattern) {
assert(pattern instanceof RegExp, 'expected pattern to be a regular expression');
const rolesToDrop = db.getRoles().map((ri) => ri.role).filter((r) => pattern.test(r));
dropUtilRetry(
rolesToDrop,
(role) => db.dropRole(role),
"Failed dropping roles: " + tojson(rolesToDrop) + " from database " + db.getName());
}
function dropUsers(db, pattern) {
assert(pattern instanceof RegExp, 'expected pattern to be a regular expression');
const usersToDrop = db.getUsers().map((ui) => ui.user).filter((u) => pattern.test(u));
dropUtilRetry(
usersToDrop,
(user) => db.dropUser(user),
"Failed dropping users: " + tojson(usersToDrop) + " from database " + db.getName());
}
|