diff options
Diffstat (limited to 'jstests/noPassthrough/server_parameter_feature_flag.js')
-rw-r--r-- | jstests/noPassthrough/server_parameter_feature_flag.js | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/jstests/noPassthrough/server_parameter_feature_flag.js b/jstests/noPassthrough/server_parameter_feature_flag.js new file mode 100644 index 00000000000..539428f9b88 --- /dev/null +++ b/jstests/noPassthrough/server_parameter_feature_flag.js @@ -0,0 +1,84 @@ +// Test featureFlag enable/disable based on feature flag. +// This test will run whether or not featureFlagToaster is enabled. +// If it is, then we expect the serverParameter to be available and settable. +// If it is not, then we expect no such serverParameter. + +(function() { +'use strict'; + +function runTestForSP(conn) { + const kFF = 'featureFlagToaster'; + const kSP = 'spTestNeedsFeatureFlagToaster'; + const ff = TestData.setParameters[kFF]; + const assertion = ff ? assert.commandWorked : assert.commandFailed; + jsTest.log('ServerParameter: ' + kSP); + jsTest.log(kFF + ': ' + tojson(ff)); + + const admin = conn.getDB('admin'); + const initial = assertion(admin.runCommand({getParameter: 1, [kSP]: 1})); + jsTest.log('Initial: ' + tojson(initial)); + const newval = initial[kSP] + 1; + const set = assertion(admin.runCommand({setParameter: 1, [kSP]: newval})); + jsTest.log('Set: ' + tojson(set)); + const changed = assertion(admin.runCommand({getParameter: 1, [kSP]: 1})); + jsTest.log('Changed: ' + tojson(changed)); + if (ff) { + assert.neq(initial[kSP], changed[kSP]); + } else { + assert.eq(initial.errmsg, 'no option found to get'); + assert.eq(set.errmsg, "Server parameter: '" + kSP + "' is disabled"); + assert.eq(changed.errmsg, 'no option found to get'); + } +} + +function runTestForCWSP(conn) { + const kFF = 'featureFlagClusterWideToaster'; + const kSP = 'cwspTestNeedsFeatureFlagClusterWideToaster'; + const ff = TestData.setParameters[kFF]; + const assertion = ff ? assert.commandWorked : assert.commandFailed; + jsTest.log('ClusterWideServerParameter: ' + kSP); + jsTest.log(kFF + ': ' + tojson(ff)); + + function val(res) { + if (!ff) { + return 0; + } + const obj = res.clusterParameters.filter((cwsp) => cwsp._id === kSP)[0]; + return (obj === undefined) ? 0 : obj.intData; + } + + const admin = conn.getDB('admin'); + const initial = assertion(admin.runCommand({getClusterParameter: kSP})); + jsTest.log('Initial: ' + tojson(initial)); + const set = + assertion(admin.runCommand({setClusterParameter: {[kSP]: {intData: val(initial) + 1}}})); + jsTest.log('Set: ' + tojson(set)); + const changed = assertion(admin.runCommand({getClusterParameter: kSP})); + jsTest.log('Changed: ' + tojson(changed)); + if (ff) { + assert.neq(val(initial), val(changed)); + } else { + const msg = "Server parameter: '" + kSP + "' is disabled"; + assert.eq(initial.errmsg, msg); + assert.eq(set.errmsg, msg); + assert.eq(changed.errmsg, msg); + } +} + +{ + jsTest.log('START standalone'); + const standalone = MongoRunner.runMongod({}); + runTestForSP(standalone); + MongoRunner.stopMongod(standalone); + jsTest.log('END standalone'); +} + +{ + jsTest.log('BEGIN sharding'); + const s = new ShardingTest({mongos: 1, config: 1, shards: 3}); + runTestForSP(s.s0); + runTestForCWSP(s.s0); + s.stop(); + jsTest.log('END sharding'); +} +})(); |