From e5161a318ef4c12aa15b793ba85c08e75ce49c23 Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Wed, 19 Dec 2018 12:08:43 -0800 Subject: [PATCH] Verify double call to OEMCrypto_DeactivateUsageEntry Merge of http://go/wvgerrit/68187 This adds a unit test to verify that OEMCrypto_DeactivateUsageEntry may be called several times without an error or changing the entry's state. Bug: 80540710 Test: unit tests Change-Id: I594594bfde75c3e38a3b9efc51a667613a5da6ed --- .../oemcrypto/test/oemcrypto_test.cpp | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp index 007a469f..f11b8163 100644 --- a/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp +++ b/libwvdrmengine/oemcrypto/test/oemcrypto_test.cpp @@ -4796,6 +4796,12 @@ TEST_P(UsageTableTestWithMAC, OnlineLicense) { // Decrypt should fail. ASSERT_NO_FATAL_FAILURE( s.TestDecryptCTR(false, OEMCrypto_ERROR_UNKNOWN_FAILURE)); + // We could call DeactivateUsageEntry multiple times. The state should not + // change. + ASSERT_NO_FATAL_FAILURE(s.DeactivateUsageEntry(pst)); + ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); + // It should report as inactive. + ASSERT_NO_FATAL_FAILURE(s.GenerateVerifyReport(pst, kInactiveUsed)); } TEST_P(UsageTableTestWithMAC, OnlineLicenseUnused) { @@ -4820,6 +4826,12 @@ TEST_P(UsageTableTestWithMAC, OnlineLicenseUnused) { // Decrypt should fail. ASSERT_NO_FATAL_FAILURE( s.TestDecryptCTR(false, OEMCrypto_ERROR_UNKNOWN_FAILURE)); + // We could call DeactivateUsageEntry multiple times. The state should not + // change. + ASSERT_NO_FATAL_FAILURE(s.DeactivateUsageEntry(pst)); + ASSERT_NO_FATAL_FAILURE(s.UpdateUsageEntry(&encrypted_usage_header_)); + // It should report as inactive. + ASSERT_NO_FATAL_FAILURE(s.GenerateVerifyReport(pst, kInactiveUnused)); } TEST_P(UsageTableTestWithMAC, ForbidReportWithNoUpdate) { @@ -5345,6 +5357,12 @@ TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicense) { ASSERT_NO_FATAL_FAILURE(s3.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s3.GenerateReport(pst, OEMCrypto_SUCCESS, &s)); EXPECT_EQ(kInactiveUsed, s3.pst_report().status()); + // We could call DeactivateUsageEntry multiple times. The state should not + // change. + ASSERT_NO_FATAL_FAILURE(s3.DeactivateUsageEntry(pst)); + ASSERT_NO_FATAL_FAILURE(s3.UpdateUsageEntry(&encrypted_usage_header_)); + ASSERT_NO_FATAL_FAILURE(s3.GenerateReport(pst, OEMCrypto_SUCCESS, &s)); + EXPECT_EQ(kInactiveUsed, s3.pst_report().status()); } TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicenseUnused) { @@ -5386,6 +5404,12 @@ TEST_P(UsageTableTestWithMAC, DeactivateOfflineLicenseUnused) { ASSERT_NO_FATAL_FAILURE(s3.UpdateUsageEntry(&encrypted_usage_header_)); ASSERT_NO_FATAL_FAILURE(s3.GenerateReport(pst, OEMCrypto_SUCCESS, &s1)); EXPECT_EQ(kInactiveUnused, s3.pst_report().status()); + // We could call DeactivateUsageEntry multiple times. The state should not + // change. + ASSERT_NO_FATAL_FAILURE(s3.DeactivateUsageEntry(pst)); + ASSERT_NO_FATAL_FAILURE(s3.UpdateUsageEntry(&encrypted_usage_header_)); + ASSERT_NO_FATAL_FAILURE(s3.GenerateReport(pst, OEMCrypto_SUCCESS, &s1)); + EXPECT_EQ(kInactiveUnused, s3.pst_report().status()); } TEST_P(UsageTableTestWithMAC, BadRange) {