diff --git a/src/objective-c/manual_tests/GrpcIosTestUITests/GrpcIosTestUITests.m b/src/objective-c/manual_tests/GrpcIosTestUITests/GrpcIosTestUITests.m index b5e19657ce7..a75b6322148 100644 --- a/src/objective-c/manual_tests/GrpcIosTestUITests/GrpcIosTestUITests.m +++ b/src/objective-c/manual_tests/GrpcIosTestUITests/GrpcIosTestUITests.m @@ -90,6 +90,15 @@ int const kNumIterations = 1; XCTAssert([testApp.staticTexts[@"Call failed"] waitForExistenceWithTimeout:kWaitTime]); } +- (void)expectCallSuccessOrFailed { + NSDate *startTime = [NSDate date]; + while (![testApp.staticTexts[@"Call done"] exists] && + ![testApp.staticTexts[@"Call failed"] exists]) { + XCTAssertLessThan([[NSDate date] timeIntervalSinceDate:startTime], kWaitTime); + [NSThread sleepForTimeInterval:1]; + } +} + - (void)setAirplaneMode:(BOOL)to { [settingsApp activate]; XCUIElement *mySwitch = settingsApp.tables.element.cells.switches[@"Airplane Mode"]; @@ -118,13 +127,6 @@ int const kNumIterations = 1; [backButton tap]; } -- (void)typeText:(NSString *)text inApp:(XCUIApplication *)app { - [app typeText:text]; - // Wait until all events in run loop have been processed - while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.1, true) == kCFRunLoopRunHandledSource) - ; -} - - (int)getRandomNumberBetween:(int)min max:(int)max { return min + arc4random_uniform((max - min + 1)); } @@ -216,24 +218,17 @@ int const kNumIterations = 1; // Send test app to background [XCUIDevice.sharedDevice pressButton:XCUIDeviceButtonHome]; - // Open safari and goto a URL - XCUIApplication *safari = - [[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.mobilesafari"]; - [safari activate]; - // Ensure that safari is running in the foreground - XCTAssert([safari waitForState:XCUIApplicationStateRunningForeground timeout:5]); - // Move cursor to address bar - [safari.buttons[@"URL"] tap]; - // Wait for keyboard to appear - [NSThread sleepForTimeInterval:2]; - // Enter URL - [self typeText:@"http://maps.google.com" inApp:safari]; - // Presses return key - [self typeText:@"\n" inApp:safari]; + // Open stocks app + XCUIApplication *stocksApp = + [[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.stocks"]; + [stocksApp activate]; + // Ensure that stocks app is running in the foreground + XCTAssert([stocksApp waitForState:XCUIApplicationStateRunningForeground timeout:5]); // Wait a bit int sleepTime = [self getRandomNumberBetween:5 max:10]; NSLog(@"Sleeping for %d seconds", sleepTime); [NSThread sleepForTimeInterval:sleepTime]; + [stocksApp terminate]; // Make another unary call [self doUnaryCall]; @@ -256,8 +251,13 @@ int const kNumIterations = 1; [self setWifi:YES]; [testApp activate]; - // We expect the call to have failed because the network flapped - [self expectCallFailed]; + [self pressButton:@"Stop streaming call"]; + // The call will fail if the stream gets a read error, else the call will succeed. + [self expectCallSuccessOrFailed]; + + // Make another unary call, it should succeed + [self doUnaryCall]; + [self expectCallSuccess]; } - (void)testConcurrentCalls {