text: /**
   * Tests that the freezeTimeout election reason counter in serverStatus is incremented in a single
   * node replica set both after a freeze timeout and after a stepdown timeout expires.
   */
  (function() {
  "use strict";
  load('jstests/replsets/libs/election_metrics.js');
  
  jsTestLog('1: initialize single node replica set');
  const replSet = new ReplSetTest({name: 'freeze_timeout', nodes: 1});
  replSet.startSet();
  
  // Increase the election timeout to 24 hours so that elections are not called due to election
  // timeouts, since we need them to be called for the kSingleNodePromptElection election reason.
  replSet.initiateWithHighElectionTimeout();
  
  let primary = replSet.getPrimary();
  const initialPrimaryStatus = assert.commandWorked(primary.adminCommand({serverStatus: 1}));
  
  jsTestLog('2: step down primary');
  assert.commandWorked(primary.getDB("admin").runCommand({replSetStepDown: 30, force: 1}));
  
  jsTestLog('3: wait for stepped down node to become primary again');
  primary = replSet.getPrimary();
  
  // Check that both the 'called' and 'successful' fields of the 'freezeTimeout' election reason
  // counter have been incremented in serverStatus. When a stepdown timeout expires in a single
  // node replica set, an election is called for the same reason as is used when a freeze timeout
  // expires.
  let newPrimaryStatus = assert.commandWorked(primary.adminCommand({serverStatus: 1}));
  verifyServerStatusElectionReasonCounterChange(
      initialPrimaryStatus.electionMetrics, newPrimaryStatus.electionMetrics, "freezeTimeout", 1);
  
  jsTestLog('4: step down primary again');
  assert.commandWorked(primary.getDB("admin").runCommand({replSetStepDown: 30, force: 1}));
  
  jsTestLog('5: unfreeze stepped down primary');
  primary.getDB("admin").runCommand({replSetFreeze: 0});
  
  jsTestLog('6: wait for unfrozen node to become primary again');
  primary = replSet.getPrimary();
  
  // Check that both the 'called' and 'successful' fields of the 'freezeTimeout' election reason
  // counter have been incremented again in serverStatus.
  newPrimaryStatus = assert.commandWorked(primary.adminCommand({serverStatus: 1}));
  verifyServerStatusElectionReasonCounterChange(
      initialPrimaryStatus.electionMetrics, newPrimaryStatus.electionMetrics, "freezeTimeout", 2);
  
  replSet.stopSet();
  })();
  