diff --git a/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java b/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java
index 2d1d4f9..470eb90 100644
--- a/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java
+++ b/android-interop-testing/app/src/main/java/io/grpc/android/integrationtest/InteropTester.java
@@ -194,6 +194,7 @@
   }
 
   public void runTest(String testCase) throws Exception {
+    Log.i(TesterActivity.LOG_TAG, "Running test " + testCase);
     if ("all".equals(testCase)) {
       runTest("empty_unary");
       runTest("large_unary");
@@ -302,7 +303,7 @@
 
     StreamRecorder<Messages.StreamingOutputCallResponse> recorder = StreamRecorder.create();
     asyncStub.streamingOutputCall(request, recorder);
-    recorder.awaitCompletion();
+    assertTrue(recorder.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
     assertSuccess(recorder);
     assertMessageEquals(Arrays.asList(goldenResponses), recorder.getValues());
   }
@@ -397,7 +398,7 @@
     StreamObserver<StreamingInputCallRequest> requestObserver =
         asyncStub.streamingInputCall(responseObserver);
     requestObserver.onError(new RuntimeException());
-    responseObserver.awaitCompletion();
+    assertTrue(responseObserver.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
     assertEquals(Arrays.<StreamingInputCallResponse>asList(), responseObserver.getValues());
     assertEquals(io.grpc.Status.CANCELLED.getCode(),
         io.grpc.Status.fromThrowable(responseObserver.getError()).getCode());
@@ -455,7 +456,7 @@
       requestStream.onNext(request);
     }
     requestStream.onCompleted();
-    recorder.awaitCompletion();
+    assertTrue(recorder.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
     assertSuccess(recorder);
     assertEquals(responseSizes.length * numRequests, recorder.getValues().size());
     for (int ix = 0; ix < recorder.getValues().size(); ++ix) {
@@ -487,7 +488,7 @@
       requestStream.onNext(request);
     }
     requestStream.onCompleted();
-    recorder.awaitCompletion();
+    assertTrue(recorder.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
     assertSuccess(recorder);
     assertEquals(responseSizes.length * numRequests, recorder.getValues().size());
     for (int ix = 0; ix < recorder.getValues().size(); ++ix) {
@@ -634,7 +635,7 @@
     TestServiceGrpc.newStub(channel)
         .withDeadlineAfter(30, TimeUnit.MILLISECONDS)
         .streamingOutputCall(request, recorder);
-    recorder.awaitCompletion();
+    assertTrue(recorder.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
     assertEquals(io.grpc.Status.DEADLINE_EXCEEDED.getCode(),
         io.grpc.Status.fromThrowable(recorder.getError()).getCode());
   }
@@ -732,7 +733,7 @@
       // This can happen if the stream has already been terminated due to deadline exceeded.
     }
 
-    recorder.awaitCompletion();
+    assertTrue(recorder.awaitCompletion(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
     assertEquals(io.grpc.Status.DEADLINE_EXCEEDED.getCode(),
         io.grpc.Status.fromThrowable(recorder.getError()).getCode());
   }
