summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/server_parameter_feature_flag.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/noPassthrough/server_parameter_feature_flag.js')
-rw-r--r--jstests/noPassthrough/server_parameter_feature_flag.js84
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');
+}
+})();