| // Copyright 2021 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/command_line.h" |
| #import "ios/chrome/test/earl_grey/chrome_test_case.h" |
| #import "ios/chrome/test/variations_smoke_test/variations_smoke_test_app_interface.h" |
| #import "ios/testing/earl_grey/earl_grey_test.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| namespace { |
| |
| // Test switch to verify that the fetch happened within app launch of current |
| // test. |
| static const char kVerifyFetchedInCurrentLaunch[] = |
| "verify-fetched-in-current-launch"; |
| |
| // Timeout to wait for a successful variations seed fetch after the test method |
| // starts. |
| static const NSTimeInterval kWaitForFetchTimeout = 30.0; |
| |
| } // namespace |
| |
| // Test case to try to update a variations seed. |
| @interface VariationsSmokeTestCase : ChromeTestCase |
| @end |
| |
| @implementation VariationsSmokeTestCase |
| |
| // Waits for variations seed to appear in Local State prefs. The test will only |
| // pass in official build with accepted EULA in Local State prefs. |
| - (void)testVariationsSeedPresentsInPrefs { |
| BOOL verifyFetchedInCurrentLaunch = |
| base::CommandLine::ForCurrentProcess()->HasSwitch( |
| kVerifyFetchedInCurrentLaunch); |
| GREYCondition* condition = [GREYCondition |
| conditionWithName:@"Waiting for variations seed fetch." |
| block:^BOOL { |
| BOOL variationsSeedExists = [VariationsSmokeTestAppInterface |
| variationsSeedInLocalStatePrefs]; |
| BOOL expectedLastFetchTimeCondition = |
| !verifyFetchedInCurrentLaunch || |
| [VariationsSmokeTestAppInterface |
| variationsSeedFetchedInCurrentLaunch]; |
| return variationsSeedExists && |
| expectedLastFetchTimeCondition; |
| }]; |
| GREYAssert([condition waitWithTimeout:kWaitForFetchTimeout], |
| @"Failed to fetch variations seed within timeout."); |
| // Writes prefs to Local State file. This might be used in launcher script. |
| [VariationsSmokeTestAppInterface localStatePrefsCommitPendingWrite]; |
| } |
| |
| @end |