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
100
101
102
103
|
/**
* For a number of errors, the engine will raise different error codes when SBE mode is enabled vs.
* disabled. When SBE mode is enabled, these differences in error codes can cause tests to fail that
* otherwise would have passed.
*
* To expedite efforts to enable more tests under SBE mode, this file provides overrides for the
* assert.commandFailedWithCode() and assert.writeErrorWithCode() APIs so that they treat certain
* groups of error codes as being equivalent to each other. Note that these overrides also affect
* how assertError(), assertErrorCode(), and assertErrCodeAndErrMsgContains() behave.
*
* Below the 'equivalentErrorCodesList' variable contains all known groups of error codes that
* should be treated as equivalent to each other. As new groups of equivalent error codes are
* discovered, they should be added to the list below.
*
* Note: This file should _only_ be included in a test if it has been observed that the test fails
* due to differences in error codes when SBE mode is enabled.
*/
(function() {
"use strict";
// Below is the list of known equivalent error code groups. As new groups of equivalent error codes
// are discovered, they should be added to this list.
const equivalentErrorCodesList = [
[16020, 5066300],
[16007, 5066300],
[16608, 4848401],
[16609, 5073101],
[16555, 5073102],
[28680, 4903701],
[28765, 4822870],
[28714, 4903710],
[28761, 4903708],
[28765, 4903700, 4903702, 4903703, 4903704, 4903705, 4903707, 4903709],
[28766, 4903706],
[31034, 4848972],
[31095, 4848972],
[40066, 4934200],
[40515, 4848979],
[40517, 4848980],
[40523, 4848972],
];
// This map is generated based on the contents of 'equivalentErrorCodesList'. This map should _not_
// be modified. If you need to change which error codes are considered equivalent to each other, you
// should modify 'equivalentErrorCodesList' above.
const equivalentErrorCodesMap = function() {
let mapOfSets = {};
for (const arr of equivalentErrorCodesList) {
for (const errorCode1 of arr) {
if (!mapOfSets.hasOwnProperty(errorCode1)) {
mapOfSets[errorCode1] = new Set();
}
for (const errorCode2 of arr) {
if (errorCode1 != errorCode2) {
mapOfSets[errorCode1].add(errorCode2);
}
}
}
}
let mapOfLists = {};
for (const errorCode1 in mapOfSets) {
let arr = [];
for (const errorCode2 of mapOfSets[errorCode1]) {
arr.push(errorCode2);
}
mapOfLists[errorCode1] = arr;
}
return mapOfLists;
}();
const lookupEquivalentErrorCodes = function(errorCodes) {
if (!Array.isArray(errorCodes)) {
errorCodes = [errorCodes];
}
let result = [];
for (const errorCode1 of errorCodes) {
result.push(errorCode1);
if (equivalentErrorCodesMap.hasOwnProperty(errorCode1)) {
for (const errorCode2 of equivalentErrorCodesMap[errorCode1]) {
result.push(errorCode2);
}
}
}
return result;
};
// Override the assert.commandFailedWithCode() function.
const assertCommandFailedWithCodeOriginal = assert.commandFailedWithCode;
assert.commandFailedWithCode = function(res, expectedCode, msg) {
return assertCommandFailedWithCodeOriginal(res, lookupEquivalentErrorCodes(expectedCode), msg);
};
// Override the assert.writeErrorWithCode() function.
const assertWriteErrorWithCodeOriginal = assert.writeErrorWithCode;
assert.writeErrorWithCode = function(res, expectedCode, msg) {
return assertWriteErrorWithCodeOriginal(res, lookupEquivalentErrorCodes(expectedCode), msg);
};
}());
|