text: /**
   * Tests the collectionUUID parameter of the drop command when one collection is sharded and the
   * other collection is unsharded.
   *
   * @tags: [
   *   requires_fcv_60,
   * ]
   */
  (function() {
  'use strict';
  
  const st = new ShardingTest({shards: 2});
  const mongos = st.s;
  
  const db = mongos.getDB(jsTestName());
  assert.commandWorked(mongos.adminCommand({enableSharding: db.getName()}));
  st.ensurePrimaryShard(db.getName(), st.shard0.shardName);
  
  const shardedColl = db.sharded;
  const unshardedColl = db.unsharded;
  
  assert.commandWorked(shardedColl.insert({_id: 0}));
  assert.commandWorked(shardedColl.insert({_id: 1}));
  assert.commandWorked(unshardedColl.insert({_id: 2}));
  
  const uuid = function(coll) {
      return assert.commandWorked(db.runCommand({listCollections: 1}))
          .cursor.firstBatch.find(c => c.name === coll.getName())
          .info.uuid;
  };
  
  assert.commandWorked(
      mongos.adminCommand({shardCollection: shardedColl.getFullName(), key: {_id: 1}}));
  
  // Move {_id: 0} to shard0 and {_id: 1} to shard1.
  assert.commandWorked(st.splitAt(shardedColl.getFullName(), {_id: 1}));
  assert.commandWorked(mongos.adminCommand(
      {moveChunk: shardedColl.getFullName(), find: {_id: 0}, to: st.shard0.shardName}));
  assert.commandWorked(mongos.adminCommand(
      {moveChunk: shardedColl.getFullName(), find: {_id: 1}, to: st.shard1.shardName}));
  
  // Run the drop command on the collection that is sharded, while specifying the UUID of the
  // unsharded collection which only exists on shard0.
  let res = assert.commandFailedWithCode(
      db.runCommand({drop: shardedColl.getName(), collectionUUID: uuid(unshardedColl)}),
      ErrorCodes.CollectionUUIDMismatch);
  assert.eq(res.db, db.getName());
  assert.eq(res.collectionUUID, uuid(unshardedColl));
  assert.eq(res.expectedCollection, shardedColl.getName());
  assert.eq(res.actualCollection, unshardedColl.getName());
  
  // Run the drop command on the unsharded collection, which only exists on shard0.
  res = assert.commandFailedWithCode(
      db.runCommand({drop: unshardedColl.getName(), collectionUUID: uuid(shardedColl)}),
      ErrorCodes.CollectionUUIDMismatch);
  assert.eq(res.db, db.getName());
  assert.eq(res.collectionUUID, uuid(shardedColl));
  assert.eq(res.expectedCollection, unshardedColl.getName());
  assert.eq(res.actualCollection, shardedColl.getName());
  
  st.stop();
  })();
  