mirror of https://github.com/mongodb/mongo
97 lines
4.3 KiB
JavaScript
97 lines
4.3 KiB
JavaScript
// This tests the emptycapped command in a replica set.
|
|
|
|
(function() {
|
|
"use strict";
|
|
var rst = new ReplSetTest({nodes: 2});
|
|
rst.startSet();
|
|
rst.initiate();
|
|
|
|
var primaryTestDB = rst.getPrimary().getDB('test');
|
|
var primaryLocalDB = rst.getPrimary().getDB('local');
|
|
var primaryAdminDB = rst.getPrimary().getDB('admin');
|
|
var secondaryTestDB = rst.getSecondary().getDB('test');
|
|
|
|
// Truncate a non-capped collection.
|
|
assert.commandWorked(primaryTestDB.noncapped.insert({x: 1}));
|
|
assert.commandWorked(primaryTestDB.runCommand({emptycapped: 'noncapped'}));
|
|
assert.eq(primaryTestDB.noncapped.find().itcount(),
|
|
0,
|
|
"Expected 0 documents to exist after emptying the collection");
|
|
|
|
// Truncate a non-existent collection on a non-existent database.
|
|
assert.commandWorked(rst.getPrimary().getDB('nonexistent').dropDatabase());
|
|
assert.commandFailedWithCode(
|
|
rst.getPrimary().getDB('nonexistent').runCommand({emptycapped: 'nonexistent'}),
|
|
ErrorCodes.NamespaceNotFound);
|
|
|
|
// Truncate a non-existent collection.
|
|
primaryTestDB.nonexistent.drop();
|
|
assert.commandFailedWithCode(primaryTestDB.runCommand({emptycapped: 'nonexistent'}),
|
|
ErrorCodes.NamespaceNotFound);
|
|
|
|
// Truncate a capped collection.
|
|
assert.commandWorked(primaryTestDB.createCollection("capped", {capped: true, size: 4096}));
|
|
assert.commandWorked(primaryTestDB.capped.insert({}));
|
|
assert.eq(primaryTestDB.capped.find().itcount(), 1, "Expected 1 document to exist after an insert");
|
|
assert.commandWorked(primaryTestDB.runCommand({emptycapped: 'capped'}));
|
|
assert.eq(primaryTestDB.capped.find().itcount(),
|
|
0,
|
|
"Expected 0 documents to exist after emptying the collection");
|
|
|
|
// Truncate a capped collection on a secondary.
|
|
assert.commandFailedWithCode(secondaryTestDB.runCommand({emptycapped: 'capped'}),
|
|
ErrorCodes.NotWritablePrimary);
|
|
|
|
// Truncate the oplog.
|
|
assert.commandFailedWithCode(primaryLocalDB.runCommand({emptycapped: "oplog.rs"}),
|
|
ErrorCodes.OplogOperationUnsupported);
|
|
|
|
// Test system collections, which cannot be truncated except system.profile.
|
|
|
|
// Truncate the local system.js collection.
|
|
assert.commandWorked(primaryTestDB.system.js.insert({_id: "mystring", value: "var root = this;"}));
|
|
assert.commandFailedWithCode(primaryTestDB.runCommand({emptycapped: "system.js"}),
|
|
ErrorCodes.IllegalOperation);
|
|
|
|
// Truncate the system.profile collection.
|
|
assert.commandWorked(primaryTestDB.createCollection("system.profile", {capped: true, size: 4096}));
|
|
assert.commandWorked(primaryTestDB.runCommand({profile: 2}));
|
|
assert.commandWorked(primaryTestDB.runCommand({emptycapped: "system.profile"}));
|
|
assert.commandWorked(primaryTestDB.runCommand({profile: 0}));
|
|
assert(primaryTestDB.system.profile.drop(), "Failed to drop the system.profile collection");
|
|
|
|
// Truncate the local system.replset collection.
|
|
assert.commandFailedWithCode(primaryLocalDB.runCommand({emptycapped: "system.replset"}),
|
|
ErrorCodes.IllegalOperation);
|
|
|
|
// Test user & role management system collections.
|
|
assert.commandWorked(primaryAdminDB.runCommand({
|
|
createRole: "all1",
|
|
privileges: [{resource: {db: "", collection: ""}, actions: ["anyAction"]}],
|
|
roles: []
|
|
}));
|
|
assert.commandWorked(primaryAdminDB.runCommand(
|
|
{createUser: "root2", pwd: "pwd", roles: [{role: "root", db: "admin"}]}));
|
|
|
|
// TODO: Test system.backup_users
|
|
|
|
// Truncate the admin system.roles collection.
|
|
assert.commandFailedWithCode(primaryAdminDB.runCommand({emptycapped: "system.roles"}),
|
|
ErrorCodes.IllegalOperation);
|
|
|
|
// Truncate the admin system.users collection.
|
|
assert.commandFailedWithCode(primaryAdminDB.runCommand({emptycapped: "system.users"}),
|
|
ErrorCodes.IllegalOperation);
|
|
|
|
// Truncate the admin system.version collection.
|
|
assert.commandFailedWithCode(primaryAdminDB.runCommand({emptycapped: "system.version"}),
|
|
ErrorCodes.IllegalOperation);
|
|
|
|
// Truncate the local system.views collection.
|
|
assert.commandWorked(
|
|
primaryTestDB.runCommand({create: "view1", viewOn: "collection", pipeline: [{$match: {}}]}));
|
|
assert.commandFailedWithCode(primaryTestDB.runCommand({emptycapped: "system.views"}),
|
|
ErrorCodes.IllegalOperation);
|
|
rst.stopSet();
|
|
})();
|