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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// Test that serverStatus() features dependent on the ProcessInfo::blockCheckSupported() routine
// work correctly. These features are db.serverStatus({workingSet:1}).workingSet and
// db.serverStatus().indexCounters.
// Related to SERVER-9242, SERVER-6450.
// Check that an object contains a specific set of fields and only those fields
// NOTE: destroys 'item'
//
var testExpectedFields = function(itemString, item, fieldList) {
print('Testing ' + itemString + ' for expected fields');
for (var i = 0; i < fieldList.length; ++i) {
var field = fieldList[i];
if (typeof item[field] == 'undefined') {
doassert('Test FAILED: missing "' + field + '" field');
}
delete item[field];
}
if (!friendlyEqual({}, item)) {
doassert('Test FAILED: found unexpected field(s): ' + tojsononeline(item));
}
}
// Run test as function to keep cruft out of global namespace
//
var doTest = function () {
print('Testing workingSet and indexCounters portions of serverStatus');
var hostInfo = db.hostInfo();
var isXP = (hostInfo.os.name == 'Windows XP') ? true : false;
var isEmpty = (hostInfo.os.name == '') ? true : false;
// Check that the serverStatus command returns something for these sub-documents
//
var serverStatus = db.serverStatus({ workingSet: 1 });
if (!serverStatus) {
doassert('Test FAILED: db.serverStatus({workingSet:1}) did not return a value');
}
if (!serverStatus.workingSet) {
doassert('Test FAILED: db.serverStatus({workingSet:1}).workingSet was not returned');
}
if (!serverStatus.indexCounters) {
doassert('Test FAILED: db.serverStatus().indexCounters was not returned');
}
var workingSet_1 = serverStatus.workingSet;
var indexCounters_1 = serverStatus.indexCounters;
if (isXP) {
// Windows XP is the only supported platform that should be missing this data; make sure
// that we don't get bogus data back
//
var expectedResult = { info: 'not supported' };
print('Testing db.serverStatus({workingSet:1}).workingSet on Windows XP -- expecting ' +
tojsononeline(expectedResult));
assert.eq(expectedResult, workingSet_1,
'Test FAILED: db.serverStatus({workingSet:1}).workingSet' +
' did not return the expected value');
expectedResult = { note: 'not supported on this platform' };
print('Testing db.serverStatus().indexCounters on Windows XP -- expecting ' +
tojsononeline(expectedResult));
assert.eq(expectedResult, indexCounters_1,
'Test FAILED: db.serverStatus().indexCounters' +
' did not return the expected value');
}
else if (isEmpty) {
// Until SERVER-9325 is fixed, Solaris/SmartOS will also be missing this data; make sure
// that we don't get bogus data back
//
expectedResult = { info: 'not supported' };
print('Testing db.serverStatus({workingSet:1}).workingSet on "" (Solaris?) -- expecting ' +
tojsononeline(expectedResult));
assert.eq(expectedResult, workingSet_1,
'Test FAILED: db.serverStatus({workingSet:1}).workingSet' +
' did not return the expected value');
expectedResult = { note: 'not supported on this platform' };
print('Testing db.serverStatus().indexCounters on "" (Solaris?) -- expecting ' +
tojsononeline(expectedResult));
assert.eq(expectedResult, indexCounters_1,
'Test FAILED: db.serverStatus().indexCounters' +
' did not return the expected value');
}
else {
// Check that we get both workingSet and indexCounters and that all expected
// fields are present with no unexpected fields
//
testExpectedFields('db.serverStatus({workingSet:1}).workingSet',
workingSet_1,
['note', 'pagesInMemory', 'computationTimeMicros', 'overSeconds']);
testExpectedFields('db.serverStatus().indexCounters',
indexCounters_1,
['accesses', 'hits', 'misses', 'resets', 'missRatio']);
if (0) { // comment out until SERVER-9284 is fixed
// See if we can make the index counters values change
//
print('Testing that indexCounters accesses and hits increase by 1 on indexed find()');
var blockDB = db.getSiblingDB('block_check_supported');
blockDB.dropDatabase();
blockDB.coll.insert({ a: 1 });
blockDB.coll.ensureIndex({ a: 1 });
indexCounters_1 = db.serverStatus().indexCounters;
var doc = blockDB.coll.findOne({ a: 1 });
var indexCounters_2 = db.serverStatus().indexCounters;
assert.gt(indexCounters_2.accesses, indexCounters_1.accesses,
'Test FAILED: db.serverStatus().indexCounters.accesses' +
' should have had a value greater than ' + indexCounters_1.accesses +
': indexCounters: before find(): ' + tojsononeline(indexCounters_1) +
', after find(): ' + tojsononeline(indexCounters_2));
assert.gt(indexCounters_2.hits, indexCounters_1.hits,
'Test FAILED: db.serverStatus().indexCounters.hits' +
' should have had a value greater than ' + indexCounters_1.hits +
': indexCounters: before find(): ' + tojsononeline(indexCounters_1) +
', after find(): ' + tojsononeline(indexCounters_2));
} // comment out until SERVER-9284 is fixed
}
print('Test PASSED!');
};
doTest();
|