summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/test/qa-tests/jstests/import/types.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/test/qa-tests/jstests/import/types.js')
-rw-r--r--src/mongo/gotools/test/qa-tests/jstests/import/types.js117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/mongo/gotools/test/qa-tests/jstests/import/types.js b/src/mongo/gotools/test/qa-tests/jstests/import/types.js
new file mode 100644
index 00000000000..c128c9c5dc9
--- /dev/null
+++ b/src/mongo/gotools/test/qa-tests/jstests/import/types.js
@@ -0,0 +1,117 @@
+(function() {
+ if (typeof getToolTest === 'undefined') {
+ load('jstests/configs/plain_28.config.js');
+ }
+ jsTest.log('Testing running import with various data types');
+
+ var toolTest = getToolTest('import');
+ var db1 = toolTest.db;
+ var commonToolArgs = getCommonToolArguments();
+
+ var testDoc = {
+ _id: ObjectId(),
+ a: BinData(0, "e8MEnzZoFyMmD7WSHdNrFJyEk8M="),
+ b: Boolean(1),
+ d: "this is a string",
+ e: ["this is an ", 2, 23.5, "array with various types in it"],
+ f: {"this is": "an embedded doc"},
+ g: function () {
+ print("hey sup");
+ },
+ h: null,
+ i: true,
+ j: false,
+ k: NumberLong(10000),
+ l: MinKey(),
+ m: MaxKey(),
+ n: ISODate("2015-02-25T16:42:11Z"),
+ o: DBRef('namespace', 'identifier', 'database'),
+ p: NumberInt(5),
+ q: 5.0,
+ };
+
+ // Make a dummy file to import by writing a test collection and exporting it
+ assert.eq(0, db1.c.count(), "setup1");
+ db1.c.save(testDoc);
+ toolTest.runTool.apply(toolTest, ["export",
+ "--out", toolTest.extFile,
+ "-d", toolTest.baseName,
+ "-c", db1.c.getName()]
+ .concat(commonToolArgs));
+
+ toolTest.runTool.apply(toolTest, ["import",
+ "--file", toolTest.extFile,
+ "--db", "imported",
+ "--collection", "testcoll2"]
+ .concat(commonToolArgs));
+ var postImportDoc = db1.c.getDB().getSiblingDB("imported").testcoll2.findOne();
+
+ printjson(postImportDoc);
+
+ for (var docKey in testDoc) {
+ if (!testDoc.hasOwnProperty(docKey)) {
+ continue;
+ }
+ jsTest.log("checking field " + docKey);
+ if (typeof testDoc[docKey] === 'function') {
+ // SERVER-23472: As of 3.3.5, JS functions are serialized when inserted,
+ // so accept either the original function or its serialization
+ try {
+ assert.eq(testDoc[docKey], postImportDoc[docKey],
+ "function does not directly match");
+ } catch (e) {
+ assert.eq({code: String(testDoc[docKey])}, postImportDoc[docKey],
+ "serialized function does not match");
+ }
+ continue;
+ }
+ assert.eq(testDoc[docKey], postImportDoc[docKey],
+ "imported field " + docKey + " does not match original");
+ }
+
+ // DBPointer should turn into a DBRef with a $ref field and hte $id field being an ObjectId. It will not convert back to a DBPointer.
+
+ var oid = ObjectId();
+ var irregularObjects = {
+ _id: ObjectId(),
+ a: DBPointer('namespace', oid),
+ b: NumberInt("5"),
+ c: NumberLong("5000"),
+ d: 5,
+ e: 9223372036854775,
+ };
+
+ db1.c.drop();
+ db1.c.getDB().getSiblingDB("imported").testcoll3.drop();
+ assert.eq(0, db1.c.count(), "setup1");
+ db1.c.save(irregularObjects);
+ toolTest.runTool.apply(toolTest, ["export",
+ "--out", toolTest.extFile,
+ "-d", toolTest.baseName,
+ "-c", db1.c.getName()]
+ .concat(commonToolArgs));
+
+ toolTest.runTool.apply(toolTest, ["import",
+ "--file", toolTest.extFile,
+ "--db", "imported",
+ "--collection", "testcoll3"]
+ .concat(commonToolArgs));
+ postImportDoc = db1.c.getDB().getSiblingDB("imported").testcoll3.findOne();
+
+ printjson(postImportDoc);
+
+ var dbRef = DBRef("namespace", oid);
+ assert.eq(postImportDoc["a"], dbRef);
+
+ assert.eq(postImportDoc["b"], 5);
+ assert.eq(postImportDoc["d"], 5);
+
+ var numLong = NumberLong(5000);
+ assert.eq(postImportDoc["c"], numLong);
+
+ numLong = NumberLong(9223372036854775);
+ assert.eq(postImportDoc["e"], numLong);
+
+
+ toolTest.stop();
+}());