mongo/jstests/aggregation/expressions/ts_second_increment.js

61 lines
2.7 KiB
JavaScript

import "jstests/libs/query/sbe_assert_error_override.js";
let testDB = db.getSiblingDB("expression_ts_second_increment");
assert.commandWorked(testDB.dropDatabase());
const collName = jsTestName();
let coll = testDB.getCollection(collName);
assert.commandWorked(coll.insert({_id: 0, bsonTime: Timestamp(1622731060, 10), invalidBsonTime: 1622731060}));
(function testtsSecond() {
// Projects the seconds component of the bson timestamp using the 'tsSecond' on the 'bsonTime'
// field and verifies that the value is correct.
let result = coll.aggregate([{$project: {bsonTime: 1, bsonTimeSeconds: {$tsSecond: "$bsonTime"}}}]).toArray();
assert.eq(result.length, 1);
assert.eq(result[0].bsonTimeSeconds, result[0].bsonTime.getTime(), result);
// Passes a non existing field path to the '$tsSecond' and verifies a null timestamp is
// returned.
result = coll.aggregate([{$project: {bsonTime: 1, bsonTimeSeconds: {$tsSecond: "$nonExistingField"}}}]).toArray();
assert.eq(result.length, 1);
assert.eq(result[0].bsonTimeSeconds, null, result);
// Projects the seconds component of bson timestamp using the 'tsSecond' on the
// 'invalidBsonTime' field and verifies that an expected error code is thrown.
const nonTimestampError = assert.throws(() =>
coll.aggregate([{$project: {bsonTime: 1, bsonTimeSeconds: {$tsSecond: "$invalidBsonTime"}}}]).toArray(),
);
assert.commandFailedWithCode(nonTimestampError, 5687301);
})();
(function testtsIncrement() {
// Projects the increment component of bson timestamp using the 'tsSecond' on the 'bsonTime'
// field and verifies that the value is correct.
let result = coll.aggregate([{$project: {bsonTime: 1, bsonTimeIncrements: {$tsIncrement: "$bsonTime"}}}]).toArray();
assert.eq(result.length, 1);
assert.eq(result[0].bsonTimeIncrements, result[0].bsonTime.getInc(), result);
// Passes a non existing field path to the '$tsIncrement' and verifies a null timestamp is
// returned.
result = coll
.aggregate([{$project: {bsonTime: 1, bsonTimeSeconds: {$tsIncrement: "$nonExistingField"}}}])
.toArray();
assert.eq(result.length, 1);
assert.eq(result[0].bsonTimeSeconds, null, result);
// Projects the increment component of bson timestamp using the 'tsIncrement' on the
// 'invalidBsonTime' field and verifies that an expected error code is thrown.
const nonTimestampError = assert.throws(() =>
coll
.aggregate([
{
$project: {bsonTime: 1, bsonTimeIncrements: {$tsIncrement: "$invalidBsonTime"}},
},
])
.toArray(),
);
assert.commandFailedWithCode(nonTimestampError, 5687302);
})();