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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// Test that we support all the same BSON types throughout API Version 1.
// @tags: [
// ]
const OID = new ObjectId();
const DATE = new Date();
const DOC = {
x01: .01,
x02: "string",
x03: {a: 1},
x04: ["array"],
x05: {
x00: BinData(0, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
x01: BinData(1, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
x02: BinData(2, "KwAAAFRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c="),
x03: BinData(3, "OEJTfmD8twzaj/LPKLIVkA=="),
x04: BinData(4, "OEJTfmD8twzaj/LPKLIVkA=="),
x05: BinData(5, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
x06: BinData(6, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"),
},
x06: undefined,
x07: OID,
x08: false,
x09: DATE,
x0A: null,
x0B: /^abc/,
x0C: new DBPointer("test", OID),
x0D: Code("function() { return true; }"),
x0E: "Symbol does not exist in javascript",
x0F: Code("function() { return true; }", {scope: true}),
x10: NumberInt(1),
x11: Timestamp(0, 1234),
x12: NumberLong(1),
x13: NumberDecimal(1.0),
xFF: MinKey(),
x7F: MaxKey(),
};
(function() {
"use strict";
let test = function(db) {
// We have to create a collection until _configsvrCreateDatabase is in API Version 1.
assert.commandWorked(db.createCollection("collection"));
assert.commandWorked(
db.runCommand({insert: "collection", documents: [DOC], apiVersion: "1", apiStrict: true}));
const val = db.collection.findOne();
assert.eq(val.x01, .01);
assert.eq(val.x02, "string");
assert.eq(val.x03, {a: 1});
assert.eq(val.x04, ["array"]);
assert.eq(val.x05.x00, BinData(0, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
assert.eq(val.x05.x01, BinData(1, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
assert.eq(val.x05.x02,
BinData(2, "KwAAAFRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c="));
assert.eq(val.x05.x03, BinData(3, "OEJTfmD8twzaj/LPKLIVkA=="));
assert.eq(val.x05.x04, BinData(4, "OEJTfmD8twzaj/LPKLIVkA=="));
assert.eq(val.x05.x05, BinData(5, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
assert.eq(val.x05.x06, BinData(6, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA"));
assert.eq(val.x06, undefined);
assert.eq(val.x07, OID);
assert.eq(val.x08, false);
assert.eq(val.x09, DATE);
assert.eq(val.x0A, null);
assert.eq(val.x0B, /^abc/);
assert.eq(val.x0C, new DBPointer("test", OID));
assert.eq(val.x0D, Code("function() { return true; }"));
assert.eq(val.x0E, "Symbol does not exist in javascript");
assert.eq(val.x0F, Code("function() { return true; }", {scope: true}));
assert.eq(val.x10, NumberInt(1));
assert.eq(val.x11, Timestamp(0, 1234));
assert.eq(val.x12, NumberLong(1));
assert.eq(val.x13, NumberDecimal(1.0));
assert.eq(val.xFF, MinKey());
assert.eq(val.x7F, MaxKey());
};
// Testing against a sharded cluster.
{
const st = new ShardingTest({shards: 1});
const db = st.s.getDB("test");
test(db);
st.stop();
}
// Testing against a replica set.
{
const rst = new ReplSetTest({nodes: 3});
rst.startSet();
rst.initiate();
const db = rst.getPrimary().getDB("test");
test(db);
rst.stopSet();
}
})();
|