summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorAlberto Lerner <alerner@10gen.com>2013-10-09 14:45:56 -0400
committerAlberto Lerner <alerner@10gen.com>2013-10-11 17:23:39 -0400
commit716b1a5b3895b5822700c0c478043f7f15a227f4 (patch)
treec51a9d79bf69859e30bc03faf3759578345d9c34 /jstests
parentd538a7729829a5cd24b6ec8bb8ffdae22d616a0f (diff)
downloadmongo-716b1a5b3895b5822700c0c478043f7f15a227f4.tar.gz
SEVER-10521 Update write commands types to comform to v0.4 of the spec
This is the first pass on the write protocol changes made for v0.4. The changes and fixes in here are: * commands take name of a collection, rather than a namespace * continueOnError is now called ordered * w:0 returns a condensed responses in case of errors * upserted is now only returned in updates * prep work for returning the _ids of upserted documents (but not there yet * we're reporting (tentatively) error messages in the 'errMsg' field (as opposed to the 'errmsg' one). If this causes some havoc, we'll stick to the old way and live with one non-stadard named field.
Diffstat (limited to 'jstests')
-rw-r--r--jstests/batch_write_protocol.js240
-rw-r--r--jstests/sharding/sharded_batch_write_protocol.js257
2 files changed, 0 insertions, 497 deletions
diff --git a/jstests/batch_write_protocol.js b/jstests/batch_write_protocol.js
deleted file mode 100644
index 773abe1fdb5..00000000000
--- a/jstests/batch_write_protocol.js
+++ /dev/null
@@ -1,240 +0,0 @@
-//
-// Ensures that mongod respects the basic batch write protocols
-//
-
-var coll = db.getCollection("batch_write_protocol");
-
-var PRESENT = "PRESENT";
-var ABSENT = "ABSENT";
-
-var assertHasFields = function(docA, docB) {
- print("checking " + tojson(docA) + " vs. " + tojson(docB));
-
- for ( var field in docB) {
- if (docB[field] === PRESENT && docA[field] === undefined)
- assert(false, "field is absent that shouldn't be: " + field);
- }
-
- for ( var field in docA) {
- if (docB[field] === undefined) continue;
- if (docB[field] === ABSENT) assert(false, "field is present that shouldn't be: " + field);
- if (docB[field] === PRESENT) continue;
- assert.eq(docA[field], docB[field]);
- }
-};
-
-var request;
-var response;
-
-//
-// INSERT
-//
-
-jsTest.log("Starting insert tests...");
-
-coll.remove({});
-
-// Only check the parsing lightly, we do this elsewhere
-// NO DOCS
-request = {insert : coll + "", writeConcern : {}, continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-
-// NO WC
-request = {insert : coll + "", documents : [{a : 1}], continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-
-// NO COE
-request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-
-// Correct single insert
-request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
-// Correct multi insert
-request = {insert : coll + "",
- documents : [{a : 2}, {a : 3}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 2};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on single insert
-coll.ensureIndex({a : 1}, {unique : true});
-request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on multi insert
-request = {insert : coll + "",
- documents : [{a : 1}, {a : 4}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 4);
-
-// Error on multi insert, no COE
-request = {insert : coll + "",
- documents : [{a : 1}, {a : 5}],
- writeConcern : {},
- continueOnError : false};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 4);
-
-//
-// Update
-//
-
-jsTest.log("Starting update tests...");
-
-coll.remove({});
-
-// Correct single update
-request = {update : coll + "",
- updates : [{q : {a : 1}, u : {a : 1}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 0);
-
-// Correct single upsert
-request = {update : coll + "",
- updates : [{q : {a : 1}, u : {a : 1}, upsert : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 1};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
-// Correct multiple upsert
-request = {update : coll + "",
- updates : [{q : {a : 2}, u : {a : 2}, upsert : true},
- {q : {a : 3}, u : {a : 3}, upsert : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 2};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Correct multiple update
-request = {update : coll + "",
- updates : [{q : {}, u : {$set : {b : 1}}, multi : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 3, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on single update
-request = {update : coll + "",
- updates : [{q : {}, u : {b : 1}, multi : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on multiple update
-request = {update : coll + "",
- updates : [{q : {}, u : {b : 1}, multi : true},
- {q : {}, u : {$set : {b : 2}}, multi : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 3,
- upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on multiple update, no COE
-request = {update : coll + "",
- updates : [{q : {}, u : {b : 1}, multi : true},
- {q : {}, u : {$set : {b : 2}}, multi : true}],
- writeConcern : {},
- continueOnError : false};
-response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 0,
- upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-//
-// Delete
-//
-
-jsTest.log( "Starting delete tests..." );
-
-// Correct single delete
-request = {delete : coll + "",
- deletes : [{q : {a : 1}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 2);
-
-// Correct multi delete
-request = {delete : coll + "",
- deletes : [{q : {a : 2}}, { q : { a : 10}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
-// Error on single delete
-request = {delete : coll + "",
- deletes : [{q : {$set : {a : 2}}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
- // Error on multi delete
-request = {delete : coll + "",
- deletes : [{q : {$set : {a : 2}}},
- { q : { a : 3 } }],
- writeConcern : {},
- continueOnError : true};
- response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 1,
- upserted : 0};
- assertHasFields(coll.runCommand(request), response);
- assert.eq(coll.count(), 0);
-
-// Error on multi delete, no COE
-coll.insert({ a : 3 });
-request = {delete : coll + "",
- deletes : [{q : {$set : {a : 2}}},
- {q : { a : 3 }}],
- writeConcern : {},
- continueOnError : false};
-response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 0,
- upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
diff --git a/jstests/sharding/sharded_batch_write_protocol.js b/jstests/sharding/sharded_batch_write_protocol.js
deleted file mode 100644
index f8819018009..00000000000
--- a/jstests/sharding/sharded_batch_write_protocol.js
+++ /dev/null
@@ -1,257 +0,0 @@
-//
-// Tests batch writes in a sharded cluster
-//
-
-var options = {separateConfig : true};
-
-var st = new ShardingTest({shards : 1, mongos : 1, other : options});
-st.stopBalancer();
-
-var mongos = st.s0;
-var shards = mongos.getDB("config").shards.find().toArray();
-var admin = mongos.getDB("admin");
-var coll = mongos.getCollection("foo.bar");
-
-assert(admin.runCommand({enableSharding : coll.getDB() + ""}).ok);
-printjson(admin.runCommand({movePrimary : coll.getDB() + "", to : shards[0]._id}));
-
-var PRESENT = "PRESENT";
-var ABSENT = "ABSENT";
-
-var assertHasFields = function(docA, docB) {
- print("checking " + tojson(docA) + " vs. " + tojson(docB));
-
- for ( var field in docB) {
- if (docB[field] === PRESENT && docA[field] === undefined)
- assert(false, "field is absent that shouldn't be: " + field);
- }
-
- for ( var field in docA) {
- if (docB[field] === undefined) continue;
- if (docB[field] === ABSENT) assert(false, "field is present that shouldn't be: " + field);
- if (docB[field] === PRESENT) continue;
- assert.eq(docA[field], docB[field]);
- }
-};
-
-var request;
-var response;
-
-//
-// INSERT
-//
-
-jsTest.log("Starting insert tests...");
-
-coll.remove({});
-assert.eq( null, coll.getDB().getLastError() );
-assert(admin.runCommand({ shardCollection : coll + "", key : {a : 1} }).ok);
-
-// Only check the parsing lightly, we do this elsewhere
-// NO DOCS
-request = {insert : coll + "", writeConcern : {}, continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-
-// NO WC
-request = {insert : coll + "", documents : [{a : 1}], continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-
-// NO COE
-request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-
-// Correct single insert
-request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
-// Correct multi insert
-request = {insert : coll + "",
- documents : [{a : 2}, {a : 3}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 2};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on single insert
-st.shard0.getCollection( coll + "" ).dropIndex({a : 1});
-st.shard0.getCollection( coll + "" ).ensureIndex({a : 1}, {unique : true});
-request = {insert : coll + "", documents : [{a : 1}], writeConcern : {}, continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on multi insert
-request = {insert : coll + "",
- documents : [{a : 1}, {a : 4}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 4);
-
-// Error on multi insert, no COE
-request = {insert : coll + "",
- documents : [{a : 1}, {a : 5}],
- writeConcern : {},
- continueOnError : false};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT, errDetails : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 4);
-
-//
-// Update
-//
-
-jsTest.log("Starting update tests...");
-
-coll.remove({});
-assert.eq( null, coll.getDB().getLastError() );
-st.shard0.getCollection( coll + "" ).dropIndex({a : 1});
-st.shard0.getCollection( coll + "" ).ensureIndex({a : 1});
-
-// Correct single update
-request = {update : coll + "",
- updates : [{q : {a : 1}, u : {a : 1}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 0);
-
-// Correct single upsert
-request = {update : coll + "",
- updates : [{q : {a : 1}, u : {a : 1}, upsert : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 1};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
-// Correct multiple upsert
-request = {update : coll + "",
- updates : [{q : {a : 2}, u : {a : 2}, upsert : true},
- {q : {a : 3}, u : {a : 3}, upsert : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 0, upserted : 2};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Correct multiple update
-request = {update : coll + "",
- updates : [{q : {}, u : {$set : {b : 1}}, multi : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 3, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on single update
-request = {update : coll + "",
- updates : [{q : {}, u : {b : 1}, multi : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on multiple update
-request = {update : coll + "",
- updates : [{q : {}, u : {b : 1}, multi : true},
- {q : {}, u : {$set : {b : 2}}, multi : true}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 3,
- upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-// Error on multiple update, no COE
-request = {update : coll + "",
- updates : [{q : {}, u : {b : 1}, multi : true},
- {q : {}, u : {$set : {b : 2}}, multi : true}],
- writeConcern : {},
- continueOnError : false};
-response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 0,
- upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 3);
-
-//
-// Delete
-//
-
-jsTest.log( "Starting delete tests..." );
-
-// Correct single delete
-request = {delete : coll + "",
- deletes : [{q : {a : 1}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 2);
-
-// Correct multi delete
-request = {delete : coll + "",
- deletes : [{q : {a : 2}}, { q : { a : 10}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : true, errCode : ABSENT, errMessage : ABSENT, n : 1, upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
-// Error on single delete
-request = {delete : coll + "",
- deletes : [{q : {$set : {a : 2}}}],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false, errCode : PRESENT, errMessage : PRESENT};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);
-
-// Error on multi delete
-request = {delete : coll + "",
- deletes : [{q : {$set : {a : 2}}},
- { q : { a : 3 } }],
- writeConcern : {},
- continueOnError : true};
-response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 1,
- upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 0);
-
-// Error on multi delete, no COE
-coll.insert({ a : 3 });
-assert.eq( null, coll.getDB().getLastError() );
-request = {delete : coll + "",
- deletes : [{q : {$set : {a : 2}}},
- {q : { a : 3 }}],
- writeConcern : {},
- continueOnError : false};
-response = {ok : false,
- errCode : PRESENT,
- errMessage : PRESENT,
- errDetails : PRESENT,
- n : 0,
- upserted : 0};
-assertHasFields(coll.runCommand(request), response);
-assert.eq(coll.count(), 1);