Update fallback policy for fast fallback.

[ Merge of http://go/wvgerrit/136329 ]

CDM core has been updated to support very short fallback durations in
the case of failures during OTA keybox provisioning.  This is intended
to be used during testing via specialized developer apps or GTS tests.

Bug: 187646550
Test: Android unit tests
Change-Id: I8a75d2e1c404d6caed535b087e8dd29da5c21b83
This commit is contained in:
Alex Dale
2021-10-15 19:32:29 -07:00
parent ff3e2c51b8
commit 48e23cca39
4 changed files with 153 additions and 11 deletions

View File

@@ -368,5 +368,110 @@ TEST_F(OkpFallbackPolicyTest, Restore_NeedsProvisioningAgain) {
EXPECT_FALSE(system_policy_->IsInFallbackMode());
EXPECT_EQ(system_policy_->info().first_checked_time(), kRestoreTime);
}
// Setup:
// 1) Device needs OKP
// 2) App requests using fast backoff settings.
// 3) Fallback occurs
// 4) After the fast fallback duration, check for if in fallback
// Expectation:
// Policy should indicate fallback, duration should be "fast" and
// the info is updated.
// After the fast fallback duration has passed, the system should
// leave fallback state.
TEST_F(OkpFallbackPolicyTest, FastRules) {
system_policy_->SetFastBackoffDurationRules();
constexpr int64_t kFallbackTime = kInitialTime + 10;
clock_.SetTime(kFallbackTime);
system_policy_->TriggerFallback();
// Checks.
EXPECT_FALSE(system_policy_->IsProvisioned());
EXPECT_TRUE(system_policy_->IsInFallbackMode());
EXPECT_EQ(system_policy_->info().backoff_start_time(), kFallbackTime);
EXPECT_EQ(system_policy_->info().backoff_duration(), kFastBackoffDuration);
constexpr int64_t kPostFallbackTime =
kFallbackTime + kFastBackoffDuration + 5;
clock_.SetTime(kPostFallbackTime);
// Checks.
EXPECT_FALSE(system_policy_->IsProvisioned());
EXPECT_FALSE(system_policy_->IsInFallbackMode());
}
// Setup:
// 1) Device needs OKP
// 2) Fallback occurs
// 3) App requests using fast backoff settings.
// 4) Another fallback occurs
// Expectation:
// 1) Setting rules to fast should end fallback
// 2) Second fallback should have a short duration.
TEST_F(OkpFallbackPolicyTest, FastRules_AfterFallback) {
// First fallback.
constexpr int64_t kFirstFallbackTime = kInitialTime + 10;
clock_.SetTime(kFirstFallbackTime);
system_policy_->TriggerFallback();
EXPECT_TRUE(system_policy_->IsInFallbackMode());
// Set fast fallback.
system_policy_->SetFastBackoffDurationRules();
EXPECT_FALSE(system_policy_->IsInFallbackMode());
// Second fallaback.
constexpr int64_t kSecondFallbackTime = kFirstFallbackTime + 10;
clock_.SetTime(kSecondFallbackTime);
system_policy_->TriggerFallback();
EXPECT_TRUE(system_policy_->IsInFallbackMode());
// Checks.
EXPECT_FALSE(system_policy_->IsProvisioned());
EXPECT_TRUE(system_policy_->IsInFallbackMode());
EXPECT_EQ(system_policy_->info().backoff_start_time(), kSecondFallbackTime);
EXPECT_EQ(system_policy_->info().backoff_duration(), kFastBackoffDuration);
}
// Setup:
// 1) Device needs OKP
// 2) App requests using fast backoff settings.
// 3) Fallback occurs
// 4) After the fast fallback duration, check for if in fallback
// 5) Another fallback occurs
// 6) After the fast fallback duration, check for if in fallback
// Expectation:
// There should not be any exponential backoff, similar to FastRules
// in all other ways.
TEST_F(OkpFallbackPolicyTest, FastRules_FallbackTwice) {
system_policy_->SetFastBackoffDurationRules();
constexpr int64_t kFirstFallbackTime = kInitialTime + 10;
clock_.SetTime(kFirstFallbackTime);
system_policy_->TriggerFallback();
// Checks.
EXPECT_FALSE(system_policy_->IsProvisioned());
EXPECT_TRUE(system_policy_->IsInFallbackMode());
EXPECT_EQ(system_policy_->info().backoff_start_time(), kFirstFallbackTime);
EXPECT_EQ(system_policy_->info().backoff_duration(), kFastBackoffDuration);
constexpr int64_t kPostFirstFallbackTime =
kFirstFallbackTime + kFastBackoffDuration + 5;
clock_.SetTime(kPostFirstFallbackTime);
EXPECT_FALSE(system_policy_->IsProvisioned());
EXPECT_FALSE(system_policy_->IsInFallbackMode());
constexpr int64_t kSecondFallbackTime = kPostFirstFallbackTime + 10;
clock_.SetTime(kSecondFallbackTime);
system_policy_->TriggerFallback();
// Checks.
EXPECT_FALSE(system_policy_->IsProvisioned());
EXPECT_TRUE(system_policy_->IsInFallbackMode());
EXPECT_EQ(system_policy_->info().backoff_start_time(), kSecondFallbackTime);
EXPECT_EQ(system_policy_->info().backoff_duration(), kFastBackoffDuration);
constexpr int64_t kPostSecondFallbackTime =
kSecondFallbackTime + kFastBackoffDuration + 5;
clock_.SetTime(kPostSecondFallbackTime);
EXPECT_FALSE(system_policy_->IsProvisioned());
EXPECT_FALSE(system_policy_->IsInFallbackMode());
}
} // namespace okp
} // namespace wvcdm