summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Schultz <william.schultz@mongodb.com>2017-08-23 17:19:08 -0400
committerWilliam Schultz <william.schultz@mongodb.com>2017-08-24 11:01:12 -0400
commitd78c225444bf4ab93e8cbe824f622f7d8940bd8d (patch)
tree5f86cadc9b07a6bab4368e33d6c27390db62dc5a
parent0071856fa9018f16b40f0c7c492fd445f673060d (diff)
downloadmongo-d78c225444bf4ab93e8cbe824f622f7d8940bd8d.tar.gz
SERVER-29431 Add library for multi version initial sync tests
(cherry picked from commit 45d595886839fb1ebf153f338c65011f1874be6d)
-rw-r--r--jstests/multiVersion/initial_sync_last_stable_from_latest.js15
-rw-r--r--jstests/multiVersion/initial_sync_latest_from_last_stable.js14
-rw-r--r--jstests/multiVersion/initialsync.js58
-rw-r--r--jstests/multiVersion/libs/initial_sync.js50
4 files changed, 79 insertions, 58 deletions
diff --git a/jstests/multiVersion/initial_sync_last_stable_from_latest.js b/jstests/multiVersion/initial_sync_last_stable_from_latest.js
new file mode 100644
index 00000000000..3f036c17fe9
--- /dev/null
+++ b/jstests/multiVersion/initial_sync_last_stable_from_latest.js
@@ -0,0 +1,15 @@
+/**
+ * Multiversion initial sync test. Tests that initial sync succeeds when a 'last-stable' version
+ * secondary syncs from a 'latest' version replica set.
+ */
+
+'use strict';
+
+load("./jstests/multiVersion/libs/initial_sync.js");
+
+var testName = "multiversion_initial_sync_last_stable_from_latest";
+let replSetVersion = "latest";
+let newSecondaryVersion = "last-stable";
+let fcv = "3.2";
+
+multversionInitialSyncTest(testName, replSetVersion, newSecondaryVersion, {}, fcv);
diff --git a/jstests/multiVersion/initial_sync_latest_from_last_stable.js b/jstests/multiVersion/initial_sync_latest_from_last_stable.js
new file mode 100644
index 00000000000..fd92b64e87a
--- /dev/null
+++ b/jstests/multiVersion/initial_sync_latest_from_last_stable.js
@@ -0,0 +1,14 @@
+/**
+ * Multiversion initial sync test. Tests that initial sync succeeds when a 'latest' version
+ * secondary syncs from a 'last-stable' version replica set.
+ */
+
+'use strict';
+
+load("./jstests/multiVersion/libs/initial_sync.js");
+
+var testName = "multiversion_initial_sync_latest_from_last_stable";
+let replSetVersion = "last-stable";
+let newSecondaryVersion = "latest";
+
+multversionInitialSyncTest(testName, replSetVersion, newSecondaryVersion, {});
diff --git a/jstests/multiVersion/initialsync.js b/jstests/multiVersion/initialsync.js
deleted file mode 100644
index e9a424fd05c..00000000000
--- a/jstests/multiVersion/initialsync.js
+++ /dev/null
@@ -1,58 +0,0 @@
-// Multiversion initial sync test.
-load("./jstests/multiVersion/libs/multi_rs.js");
-load("./jstests/replsets/rslib.js");
-
-var oldVersion = "last-stable";
-var newVersion = "latest";
-
-var name = "multiversioninitsync";
-
-var multitest = function(replSetVersion, newNodeVersion) {
- var nodes = {n1: {binVersion: replSetVersion}, n2: {binVersion: replSetVersion}};
-
- print("Start up a two-node " + replSetVersion + " replica set.");
- var rst = new ReplSetTest({name: name, nodes: nodes});
- rst.startSet();
- var config = rst.getReplSetConfig();
- // Set protocol version to 0 for 3.2 replset.
- if (replSetVersion == newVersion) {
- config.protocolVersion = 0;
- }
- rst.initiate(config);
-
- // Wait for a primary node.
- var primary = rst.getPrimary();
-
- // Insert some data and wait for replication.
- for (var i = 0; i < 25; i++) {
- primary.getDB("foo").foo.insert({_id: i});
- }
- rst.awaitReplication();
-
- print("Bring up a new node with version " + newNodeVersion + " and add to set.");
- rst.add({binVersion: newNodeVersion});
- rst.reInitiate();
-
- // Wait for a primary node.
- var primary = rst.getPrimary();
- var secondaries = rst.getSecondaries();
-
- print("Wait for new node to be synced.");
- rst.awaitReplication();
-
- rst.stopSet();
-};
-
-// *****************************************
-// Test A:
-// "Latest" version secondary is synced from
-// an old ReplSet.
-// *****************************************
-multitest(oldVersion, newVersion);
-
-// *****************************************
-// Test B:
-// Old Secondary is synced from a "latest"
-// version ReplSet.
-// *****************************************
-multitest(newVersion, oldVersion);
diff --git a/jstests/multiVersion/libs/initial_sync.js b/jstests/multiVersion/libs/initial_sync.js
new file mode 100644
index 00000000000..866f825c8b9
--- /dev/null
+++ b/jstests/multiVersion/libs/initial_sync.js
@@ -0,0 +1,50 @@
+
+'use strict';
+
+load("./jstests/multiVersion/libs/multi_rs.js");
+load("./jstests/replsets/rslib.js");
+
+/**
+ * Test that starts up a replica set with 2 nodes of version 'replSetVersion', inserts some data,
+ * then adds a new node to the replica set with version 'newNodeVersion' and waits for initial sync
+ * to complete. If the 'fcv' argument is given, sets the feature compatibility version of the
+ * replica set to 'fcv' before adding the third node.
+ */
+var multversionInitialSyncTest = function(
+ name, replSetVersion, newNodeVersion, configSettings, fcv) {
+
+ var nodes = {n1: {binVersion: replSetVersion}, n2: {binVersion: replSetVersion}};
+
+ jsTestLog("Starting up a two-node '" + replSetVersion + "' version replica set.");
+ var rst = new ReplSetTest({name: name, nodes: nodes});
+ rst.startSet();
+
+ var conf = rst.getReplSetConfig();
+ conf.settings = configSettings;
+ rst.initiate(conf);
+
+ // Wait for a primary node.
+ var primary = rst.getPrimary();
+
+ // Set 'featureCompatibilityVersion' if given.
+ if (fcv) {
+ jsTestLog("Setting FCV to '" + fcv + "' on the primary.");
+ assert.commandWorked(primary.adminCommand({setFeatureCompatibilityVersion: fcv}));
+ }
+
+ // Insert some data and wait for replication.
+ for (var i = 0; i < 25; i++) {
+ primary.getDB("foo").foo.insert({_id: i});
+ }
+ rst.awaitReplication();
+
+ jsTestLog("Bringing up a new node with version '" + newNodeVersion + "' and adding to set.");
+ rst.add({binVersion: newNodeVersion});
+ rst.reInitiate();
+
+ jsTestLog("Waiting for new node to be synced.");
+ rst.awaitReplication();
+ rst.awaitSecondaryNodes();
+
+ rst.stopSet();
+}; \ No newline at end of file