@Test
  public void localFailTest() {
    initialize();
    OperationTracker ot = getOperationTrackerForGetOrPut(false, 2, 3, RouterOperation.GetBlobOperation, true);
    // 3-0-0-0; 9-0-0-0
    assertFalse("Operation should not have been done.", ot.isDone());
    sendRequests(ot, 3, false);
    // 0-3-0-0; 9-0-0-0
    for (int i = 0; i < 2; i++) {
      ot.onResponse(inflightReplicas.poll(), TrackedRequestFinalState.FAILURE);
    }
    assertFalse("Operation should not have succeeded", ot.hasSucceeded());
    assertTrue("Operation should be done", ot.isDone());
    // 0-1-0-2; 9-0-0-0
    ot.onResponse(inflightReplicas.poll(), TrackedRequestFinalState.SUCCESS);
    // 0-0-1-2; 9-0-0-0
    assertFalse("Operation should not have succeeded", ot.hasSucceeded());
    assertTrue("Operation should be done", ot.isDone());
  }
crossColoEnabled = false, successTarget = 2, parallelism = 3.

<p/>
1. Get 3 local replicas to send request (and send requests);
2. 1 local replicas succeeded, 2 failed.
3. Operation fails.
ambry-router/src/test/java/com/github/ambry/router/OperationTrackerTest.java