summaryrefslogtreecommitdiff
path: root/src/mongo/gotools/test/qa-tests/jstests/import/typed_fields.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/gotools/test/qa-tests/jstests/import/typed_fields.js')
-rw-r--r--src/mongo/gotools/test/qa-tests/jstests/import/typed_fields.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/mongo/gotools/test/qa-tests/jstests/import/typed_fields.js b/src/mongo/gotools/test/qa-tests/jstests/import/typed_fields.js
new file mode 100644
index 00000000000..fa7e07dd0b1
--- /dev/null
+++ b/src/mongo/gotools/test/qa-tests/jstests/import/typed_fields.js
@@ -0,0 +1,114 @@
+(function() {
+ if (typeof getToolTest === 'undefined') {
+ load('jstests/configs/plain_28.config.js');
+ }
+ var formats = ["csv", "tsv"];
+ var header = "a.string(),b.int32(),c.xyz.date_oracle(Month dd, yyyy HH24:mi:ss),c.noop.boolean(),d.hij.lkm.binary(hex)";
+ var expectedDocs = [{
+ a: "foo",
+ b: 12,
+ c: {
+ xyz: ISODate("1997-06-02T15:24:00Z"),
+ noop: true,
+ },
+ d: {hij: {lkm: BinData(0, "e8MEnzZoFyMmD7WSHdNrFJyEk8M=")}},
+ }, {
+ a: "bar",
+ b: 24,
+ c: {
+ xyz: ISODate("2016-06-08T09:26:00Z"),
+ noop: false,
+ },
+ d: {hij: {lkm: BinData(0, "dGVzdAo=")}},
+ }];
+ jsTest.log('Testing typed fields in CSV/TSV');
+
+ var checkCollectionContents = function(coll) {
+ var importedDoc = coll.findOne({a: "foo"});
+ delete importedDoc["_id"];
+ assert.docEq(importedDoc, expectedDocs[0]);
+ importedDoc = coll.findOne({a: "bar"});
+ delete importedDoc["_id"];
+ assert.docEq(importedDoc, expectedDocs[1]);
+ assert.eq(coll.count(), 2);
+ };
+
+ var reset = function(coll) {
+ coll.drop();
+ assert.eq(coll.count(), 0);
+ };
+
+ var toolTest = getToolTest("import_fields");
+ var db1 = toolTest.db;
+ var commonToolArgs= getCommonToolArguments();
+ for (var i=0; i<formats.length; i++) {
+ var format=formats[i];
+
+ var c = db1.c.getDB().getSiblingDB(format + "testdb")[format+"testcoll"];
+ // check that headerline uses the correct headers
+ var ret = toolTest.runTool.apply(toolTest, ["import",
+ "--file", "jstests/import/testdata/typed_header." + format,
+ "--type=" + format,
+ "--db", format + "testdb",
+ "--collection", format + "testcoll",
+ "--columnsHaveTypes",
+ "--headerline"]
+ .concat(commonToolArgs));
+
+ checkCollectionContents(c);
+ reset(c);
+
+ // check that the fields can be specified with --fields
+ ret = toolTest.runTool.apply(toolTest, ["import",
+ "--file", "jstests/import/testdata/typed_noheader." + format,
+ "--type=" + format,
+ "--db", format + "testdb",
+ "--collection", format + "testcoll",
+ "--columnsHaveTypes",
+ "--fields", header]
+ .concat(commonToolArgs));
+ checkCollectionContents(c);
+ reset(c);
+
+ // check that the fields can be specified with --fieldsFile
+ ret = toolTest.runTool.apply(toolTest, ["import",
+ "--file", "jstests/import/testdata/typed_noheader." + format,
+ "--type=" + format,
+ "--db", format + "testdb",
+ "--collection", format + "testcoll",
+ "--columnsHaveTypes",
+ "--fieldFile", "jstests/import/testdata/typedfieldfile"]
+ .concat(commonToolArgs));
+ checkCollectionContents(c);
+ reset(c);
+
+ // when --fieldFile, --fields, and --headerline are all omitted,
+ // import should fail
+ ret = toolTest.runTool.apply(toolTest, ["import",
+ "--file", "jstests/import/testdata/typed_noheader." + format,
+ "--type=" + format,
+ "--db", format + "testdb",
+ "--collection", format + "testcoll",
+ "--columnsHaveTypes"]
+ .concat(commonToolArgs));
+ assert.neq(ret, 0);
+ reset(c);
+
+ // check that extra fields are created as expected
+ ret = toolTest.runTool.apply(toolTest, ["import",
+ "--file", "jstests/import/testdata/typed_extrafields." + format,
+ "--type=" + format,
+ "--db", format + "testdb",
+ "--collection", format + "testcoll",
+ "--columnsHaveTypes",
+ "--fieldFile", "jstests/import/testdata/typedfieldfile"]
+ .concat(commonToolArgs));
+
+ var importedDoc = c.findOne({"a": "one"});
+ assert.eq(importedDoc.field5, "extra1");
+ assert.eq(importedDoc.field6, "extra2");
+ reset(c);
+ }
+
+ toolTest.stop();
+}());