diff --git a/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp b/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp index b42015da..96bba6af 100644 --- a/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include "crypto_session.h" @@ -19,6 +20,10 @@ #include "wv_cdm_types.h" #include "wv_metrics.pb.h" +using ::testing::AllOf; +using ::testing::Ge; +using ::testing::Le; + namespace { const uint8_t kOemCert[] = { @@ -296,7 +301,7 @@ TEST_F(CryptoSessionMetricsTest, OpenSessionValidMetrics) { // lite, convert these tests to use Message-based convenience functions. // Validate common metrics regardless of provisioning type. - EXPECT_EQ(1, metrics_proto.oemcrypto_initialize_time_us().size()); + ASSERT_EQ(1, metrics_proto.oemcrypto_initialize_time_us().size()); EXPECT_TRUE(metrics_proto.oemcrypto_initialize_time_us(0) .attributes() .has_oem_crypto_result()); @@ -327,7 +332,8 @@ TEST_F(CryptoSessionMetricsTest, OpenSessionValidMetrics) { EXPECT_EQ(OEMCrypto_OEMCertificate, metrics_proto.oemcrypto_provisioning_method().int_value()); ASSERT_EQ(1, metrics_proto.oemcrypto_get_oem_public_certificate().size()); - EXPECT_EQ(1, metrics_proto.oemcrypto_get_oem_public_certificate(0).count()); + EXPECT_THAT(metrics_proto.oemcrypto_get_oem_public_certificate(0).count(), + AllOf(Ge(1), Le(2))); } else if (token_type == kClientTokenDrmCert) { // TODO(blueeyes): Add support for getting the system id from a // pre-installed DRM certificate.. @@ -373,8 +379,9 @@ TEST_F(CryptoSessionMetricsTest, GetProvisioningTokenValidMetrics) { EXPECT_EQ(OEMCrypto_OEMCertificate, metrics_proto.oemcrypto_provisioning_method().int_value()); - EXPECT_EQ(1, metrics_proto.oemcrypto_get_oem_public_certificate().size()); - EXPECT_EQ(1, metrics_proto.oemcrypto_get_oem_public_certificate(0).count()); + ASSERT_EQ(1, metrics_proto.oemcrypto_get_oem_public_certificate().size()); + EXPECT_THAT(metrics_proto.oemcrypto_get_oem_public_certificate(0).count(), + AllOf(Ge(1), Le(2))); ASSERT_EQ(1, metrics_proto.crypto_session_get_token().size()); EXPECT_EQ(1, metrics_proto.crypto_session_get_token(0).count()); diff --git a/libwvdrmengine/cdm/util/test/test_sleep.cpp b/libwvdrmengine/cdm/util/test/test_sleep.cpp index 1656381a..4893ca74 100644 --- a/libwvdrmengine/cdm/util/test/test_sleep.cpp +++ b/libwvdrmengine/cdm/util/test/test_sleep.cpp @@ -23,7 +23,7 @@ namespace wvcdm { bool TestSleep::real_sleep_ = true; TestSleep::CallBack* TestSleep::callback_ = nullptr; -int TestSleep::total_clock_rollback_ = 0; +int TestSleep::total_clock_rollback_seconds_ = 0; void TestSleep::Sleep(unsigned int seconds) { int64_t milliseconds = 1000 * seconds; @@ -33,11 +33,15 @@ void TestSleep::Sleep(unsigned int seconds) { // total since the start, and then compare to a running total of sleep // calls. We sleep for approximately x second, and then advance the clock by // the amount of time that has actually passed. - static auto start_real = std::chrono::system_clock().now(); - static int64_t fake_clock = 0; + static const auto start_real = std::chrono::system_clock().now(); sleep(seconds); - auto now_real = std::chrono::system_clock().now(); - int64_t total_real = (now_real - start_real) / std::chrono::milliseconds(1); + const auto now_real = std::chrono::system_clock().now(); + const int64_t rollback_adjustment = 1000 * total_clock_rollback_seconds_; + const int64_t total_real = + (now_real - start_real) / std::chrono::milliseconds(1) + + rollback_adjustment; + + static int64_t fake_clock = 0; // We want to advance the fake clock by the difference between the real // clock, and the previous value on the fake clock. milliseconds = total_real - fake_clock; @@ -90,7 +94,7 @@ bool TestSleep::RollbackSystemTime(int seconds) { // For both real and fake sleep we still update the callback and we still keep // track of the total amount of time slept. - total_clock_rollback_ += seconds; + total_clock_rollback_seconds_ += seconds; if (callback_ != nullptr) callback_->ElapseTime(-1000 * seconds); return true; } @@ -98,7 +102,6 @@ bool TestSleep::RollbackSystemTime(int seconds) { bool TestSleep::CanChangeSystemTime() { // If we are using a fake clock, then we can move the clock backwards by // just going backwards. - // ElapseTime. if (!real_sleep_) { return true; } diff --git a/libwvdrmengine/cdm/util/test/test_sleep.h b/libwvdrmengine/cdm/util/test/test_sleep.h index 34c4b3f6..35dcdc70 100644 --- a/libwvdrmengine/cdm/util/test/test_sleep.h +++ b/libwvdrmengine/cdm/util/test/test_sleep.h @@ -44,8 +44,8 @@ class TestSleep { // Roll the system clock forward to undo all previous calls to // RollBackSystemTime. Returns true on success. static bool ResetRollback() { - return total_clock_rollback_ == 0 || - RollbackSystemTime(-total_clock_rollback_); + return total_clock_rollback_seconds_ == 0 || + RollbackSystemTime(-total_clock_rollback_seconds_); } // Returns true if the system time can be rolled back. This is true on some @@ -67,7 +67,7 @@ class TestSleep { static CallBack* callback_; // The sum of all calls to RollBackSystemTime. Kept so we can undo all changes // at the end of a test. - static int total_clock_rollback_; + static int total_clock_rollback_seconds_; }; } // namespace wvcdm