From a6cd7c501b83f34db7613aafc72ed260abbf9f8a Mon Sep 17 00:00:00 2001 From: Fred Gylys-Colwell Date: Tue, 30 Jan 2018 21:26:14 -0800 Subject: [PATCH] Use real system id in GetProvisioningTokenValidMetrics Merge from Widevine repo of http://go/wvgerrit/42102 The unit test should use the real system id if it is using a real oemcrypto. test: ran unit tests on sailfish. bug: 72718962 Change-Id: Ib58a47976f85b840c6f34d379b1c020e7e85d59a --- .../cdm/core/test/crypto_session_unittest.cpp | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp b/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp index 662af053..536c91bd 100644 --- a/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp +++ b/libwvdrmengine/cdm/core/test/crypto_session_unittest.cpp @@ -1,5 +1,6 @@ // Copyright 2017 Google Inc. All Rights Reserved. +#include #include #include @@ -290,6 +291,17 @@ class CryptoSessionMetricsTest : public testing::Test { return true; } + uint32_t FindKeyboxSystemID() { + OEMCryptoResult sts; + uint8_t key_data[256]; + size_t key_data_len = sizeof(key_data); + sts = OEMCrypto_GetKeyData(key_data, &key_data_len, kLevelDefault); + if (sts != OEMCrypto_SUCCESS) return 0; + uint32_t* data = reinterpret_cast(key_data); + uint32_t system_id = htonl(data[1]); + return system_id; + } + private: static std::pair MakeMetricPair(const drm_metrics::MetricsGroup::Metric& metric) { @@ -337,9 +349,10 @@ TEST_F(CryptoSessionMetricsTest, OpenSessionValidMetrics) { CdmClientTokenType token_type = session.GetPreProvisionTokenType(); if (token_type == kClientTokenKeybox) { + uint32_t system_id = FindKeyboxSystemID(); EXPECT_TRUE(FindMetric( metric_map, "/drm/widevine/crypto_session/system_id", &metric)); - EXPECT_EQ(metric.value().int_value(), 4121); + EXPECT_EQ(metric.value().int_value(), system_id); EXPECT_TRUE(FindMetric( metric_map, @@ -363,7 +376,11 @@ TEST_F(CryptoSessionMetricsTest, OpenSessionValidMetrics) { } else if (token_type == kClientTokenOemCert) { EXPECT_TRUE(FindMetric( metric_map, "/drm/widevine/crypto_session/system_id", &metric)); - EXPECT_EQ(metric.value().int_value(), 7346); + // Recent devices all have a system id between 1k and 6 or 7k. Errors we + // are trying to catch are 0, byte swapped 32 bit numbers, or garbage. These + // errors will most likely be outside the range of 1000 to 2^16. + EXPECT_LE(1000, metric.value().int_value()); + EXPECT_GT(0x10000, metric.value().int_value()); EXPECT_TRUE(FindMetric( metric_map, @@ -417,7 +434,8 @@ TEST_F(CryptoSessionMetricsTest, GetProvisioningTokenValidMetrics) { EXPECT_TRUE(FindMetric( metric_map, "/drm/widevine/crypto_session/system_id", &metric)); - EXPECT_EQ(metric.value().int_value(), 4121); + uint32_t system_id = FindKeyboxSystemID(); + EXPECT_EQ(metric.value().int_value(), system_id); EXPECT_TRUE(FindMetric( metric_map, "/drm/widevine/oemcrypto/get_key_data/time/count" @@ -433,7 +451,11 @@ TEST_F(CryptoSessionMetricsTest, GetProvisioningTokenValidMetrics) { EXPECT_TRUE(FindMetric( metric_map, "/drm/widevine/crypto_session/system_id", &metric)); - EXPECT_EQ(metric.value().int_value(), 7346); + // Recent devices all have a system id between 1k and 6 or 7k. Errors we + // are trying to catch are 0, byte swapped 32 bit numbers, or garbage. These + // errors will most likely be outside the range of 1000 to 2^16. + EXPECT_LE(1000, metric.value().int_value()); + EXPECT_GT(0x10000, metric.value().int_value()); EXPECT_TRUE(FindMetric( metric_map, "/drm/widevine/oemcrypto/get_oem_public_certificate/count"