text: // Tests that mongos can autodiscover a config server replica set when the only node it knows about
  // is not the primary.
  
  load('jstests/libs/feature_compatibility_version.js');
  
  (function() {
      'use strict';
  
      var rst = new ReplSetTest(
          {name: "configRS", nodes: 3, nodeOptions: {configsvr: "", storageEngine: "wiredTiger"}});
      rst.startSet();
      var conf = rst.getReplSetConfig();
      conf.members[1].priority = 0;
      conf.members[2].priority = 0;
      conf.writeConcernMajorityJournalDefault = true;
      rst.initiate(conf);
  
      // Config servers always start at the latest available FCV for the binary. This poses a problem
      // when this test is run in the mixed version suite because mongos will be 'last-stable' and if
      // this node is of the latest binary, it will report itself as the 'latest' FCV, which would
      // cause mongos to refuse to connect to it and shutdown.
      //
      // In order to work around this, in the mixed version suite, be pessimistic and always set this
      // node to the 'last-stable' FCV
      if (jsTestOptions().shardMixedBinVersions) {
          assert.commandWorked(
              rst.getPrimary().adminCommand({setFeatureCompatibilityVersion: lastStableFCV}));
          rst.awaitReplication();
      }
  
      var seedList = rst.name + "/" + rst.nodes[1].host;  // node 1 is guaranteed to not be primary
      {
          // Ensure that mongos can start up when given the CSRS secondary, discover the primary, and
          // perform writes to the config servers.
          var mongos = MongoRunner.runMongos({configdb: seedList});
          var admin = mongos.getDB('admin');
          assert.writeOK(admin.foo.insert({a: 1}));
          assert.eq(1, admin.foo.findOne().a);
          MongoRunner.stopMongos(mongos);
      }
  
      // Wait for replication to all config server replica set members to ensure that mongos
      // will be able to do majority reads when trying to verify if the initial cluster metadata
      // has been properly written.
      rst.awaitLastOpCommitted();
      // Now take down the one electable node
      rst.stop(0);
      rst.awaitNoPrimary();
  
      // Start a mongos when there is no primary
      var mongos = MongoRunner.runMongos({configdb: seedList});
      // Take down the one node the mongos knew about to ensure that it autodiscovered the one
      // remaining
      // config server
      rst.stop(1);
  
      var admin = mongos.getDB('admin');
      mongos.setSlaveOk(true);
      assert.eq(1, admin.foo.findOne().a);
      MongoRunner.stopMongos(mongos);
      rst.stopSet();
  })();
  