summaryrefslogtreecommitdiff
path: root/jstests/concurrency/fsm_workload_helpers/drop_utils.js
blob: f0d86a1fb496f020f9db957a8b121bb9350e9ea3 (plain)
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());
}