Return error codes when storing or retrieving licenses

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

This allows error codes from device files to be added as sub-errors when
errors such as GET_LICENSE_ERROR are encountered.

Bug: 112357085
Bug: 115382201
Test: WV unit/integration tests

Change-Id: I505a87086ce584efc7e482984c0f132ac5329e16
This commit is contained in:
Rahul Frias
2019-01-14 19:09:37 -08:00
parent cfe7221d9e
commit 8b61a03b5f
6 changed files with 206 additions and 90 deletions

View File

@@ -2295,6 +2295,7 @@ TEST_P(DeviceFilesStoreTest, StoreLicense) {
.WillOnce(ReturnArg<1>());
EXPECT_CALL(*file, Read(_, _)).Times(0);
DeviceFiles::ResponseType sub_error_code;
DeviceFiles device_files(&file_system);
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
EXPECT_TRUE(device_files.StoreLicense(
@@ -2310,7 +2311,8 @@ TEST_P(DeviceFilesStoreTest, StoreLicense) {
license_test_data[license_num].last_playback_time,
license_test_data[license_num].grace_period_end_time, app_parameters,
license_test_data[license_num].usage_entry,
license_test_data[license_num].usage_entry_number));
license_test_data[license_num].usage_entry_number, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
INSTANTIATE_TEST_CASE_P(StoreLicense, DeviceFilesStoreTest, ::testing::Bool());
@@ -2344,6 +2346,7 @@ TEST_F(DeviceFilesTest, StoreLicenses) {
EXPECT_CALL(*file, Read(_, _)).Times(0);
}
DeviceFiles::ResponseType sub_error_code;
DeviceFiles device_files(&file_system);
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
for (size_t i = 0; i < kNumberOfLicenses; i++) {
@@ -2361,7 +2364,8 @@ TEST_F(DeviceFilesTest, StoreLicenses) {
license_test_data[i].last_playback_time,
license_test_data[i].grace_period_end_time, app_parameters,
license_test_data[i].usage_entry,
license_test_data[i].usage_entry_number));
license_test_data[i].usage_entry_number, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
}
@@ -2405,6 +2409,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
CdmAppParameterMap app_parameters;
std::string usage_entry;
uint32_t usage_entry_number;
DeviceFiles::ResponseType sub_error_code;
for (size_t i = 0; i < kNumberOfLicenses; i++) {
DeviceFiles::LicenseState license_state;
@@ -2413,7 +2418,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
&key_request, &key_response, &key_renewal_request,
&key_renewal_response, &release_server_url, &playback_start_time,
&last_playback_time, &grace_period_end_time, &app_parameters,
&usage_entry, &usage_entry_number));
&usage_entry, &usage_entry_number, &sub_error_code));
EXPECT_EQ(license_test_data[i].license_state, license_state);
EXPECT_EQ(license_test_data[i].pssh_data, pssh_data);
EXPECT_EQ(license_test_data[i].key_request, key_request);
@@ -2426,6 +2431,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
grace_period_end_time);
EXPECT_EQ(license_test_data[i].usage_entry, usage_entry);
EXPECT_EQ(license_test_data[i].usage_entry_number, usage_entry_number);
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
std::map<std::string, std::string>::iterator itr;
for (itr = app_parameters.begin(); itr != app_parameters.end(); ++itr) {
@@ -2475,13 +2481,14 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) {
CdmAppParameterMap app_parameters;
std::string usage_entry;
uint32_t usage_entry_number;
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files.RetrieveLicense(
test_data->key_set_id, &license_state, &pssh_data, &key_request,
&key_response, &key_renewal_request, &key_renewal_response,
&release_server_url, &playback_start_time, &last_playback_time,
&grace_period_end_time, &app_parameters, &usage_entry,
&usage_entry_number));
&usage_entry_number, &sub_error_code));
EXPECT_EQ(test_data->license_state, license_state);
EXPECT_EQ(test_data->pssh_data, pssh_data);
EXPECT_EQ(test_data->key_request, key_request);
@@ -2494,6 +2501,7 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) {
EXPECT_EQ(0u, app_parameters.size());
EXPECT_EQ(test_data->usage_entry, usage_entry);
EXPECT_EQ(test_data->usage_entry_number, usage_entry_number);
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
TEST_F(DeviceFilesTest, UpdateLicenseState) {
@@ -2515,6 +2523,7 @@ TEST_F(DeviceFilesTest, UpdateLicenseState) {
Eq(license_update_test_data[i].file_data.size())))
.WillOnce(ReturnArg<1>());
EXPECT_CALL(*file, Read(_, _)).Times(0);
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files.StoreLicense(
license_update_test_data[0].key_set_id,
license_update_test_data[i].license_state,
@@ -2529,7 +2538,8 @@ TEST_F(DeviceFilesTest, UpdateLicenseState) {
license_update_test_data[0].grace_period_end_time,
GetAppParameters(license_test_data[0].app_parameters),
license_update_test_data[0].usage_entry,
license_update_test_data[0].usage_entry_number));
license_update_test_data[0].usage_entry_number, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
}
@@ -2572,13 +2582,14 @@ TEST_F(DeviceFilesTest, DeleteLicense) {
CdmAppParameterMap app_parameters;
std::string usage_entry;
uint32_t usage_entry_number;
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files.RetrieveLicense(
license_test_data[0].key_set_id, &license_state, &pssh_data, &key_request,
&key_response, &key_renewal_request, &key_renewal_response,
&release_server_url, &playback_start_time, &last_playback_time,
&grace_period_end_time, &app_parameters, &usage_entry,
&usage_entry_number));
&usage_entry_number, &sub_error_code));
EXPECT_EQ(license_test_data[0].license_state, license_state);
EXPECT_EQ(license_test_data[0].pssh_data, pssh_data);
EXPECT_EQ(license_test_data[0].key_request, key_request);
@@ -2597,6 +2608,7 @@ TEST_F(DeviceFilesTest, DeleteLicense) {
}
EXPECT_EQ(license_test_data[0].usage_entry, usage_entry);
EXPECT_EQ(license_test_data[0].usage_entry_number, usage_entry_number);
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_TRUE(device_files.DeleteLicense(license_test_data[0].key_set_id));
EXPECT_FALSE(device_files.LicenseExists(license_test_data[0].key_set_id));

View File

@@ -1361,6 +1361,7 @@ TEST_F(UsageTableHeaderTest,
uint32_t usage_entry_number_to_be_deleted =
usage_entry_info_vector.size() - 3; // kUsageEntryInfoOfflineLicense1
metrics::CryptoMetrics metrics;
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files_->StoreLicense(
usage_entry_info_vector[usage_entry_info_vector.size() - 1].key_set_id,
@@ -1368,7 +1369,8 @@ TEST_F(UsageTableHeaderTest,
kKeyRenewalRequest, kKeyRenewalResponse, kReleaseServerUrl,
kPlaybackStartTime, kPlaybackStartTime + kPlaybackDuration,
kGracePeriodEndTime, kEmptyAppParameters, kUsageEntry,
usage_entry_info_vector.size() - 2));
usage_entry_info_vector.size() - 2, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_TRUE(device_files_->StoreLicense(
usage_entry_info_vector[usage_entry_info_vector.size() - 2].key_set_id,
@@ -1376,7 +1378,8 @@ TEST_F(UsageTableHeaderTest,
kKeyRenewalRequest, kKeyRenewalResponse, kReleaseServerUrl,
kPlaybackStartTime, kPlaybackStartTime + kPlaybackDuration,
kGracePeriodEndTime, kEmptyAppParameters, kUsageEntry,
usage_entry_info_vector.size() - 3));
usage_entry_info_vector.size() - 3, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR));
EXPECT_CALL(
@@ -1567,13 +1570,15 @@ TEST_F(UsageTableHeaderTest,
usage_entry_info_vector.size() - 1; // kUsageEntryInfoOfflineLicense3
metrics::CryptoMetrics metrics;
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files_->StoreLicense(
usage_entry_info_vector[last_usage_entry_number].key_set_id,
kActiveLicenseState, kPsshData, kKeyRequest, kKeyResponse,
kKeyRenewalRequest, kKeyRenewalResponse, kReleaseServerUrl,
kPlaybackStartTime, kPlaybackStartTime + kPlaybackDuration,
kGracePeriodEndTime, kEmptyAppParameters, kUsageEntry,
last_usage_entry_number));
last_usage_entry_number, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_CALL(*crypto_session_, Open(kLevelDefault)).WillOnce(Return(NO_ERROR));
EXPECT_CALL(*crypto_session_,
@@ -1713,13 +1718,15 @@ TEST_F(UsageTableHeaderTest,
usage_entry_info_vector.size() - 3; // kUsageEntryInfoOfflineLicense3
metrics::CryptoMetrics metrics;
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files_->StoreLicense(
usage_entry_info_vector[last_valid_usage_entry_number].key_set_id,
kActiveLicenseState, kPsshData, kKeyRequest, kKeyResponse,
kKeyRenewalRequest, kKeyRenewalResponse, kReleaseServerUrl,
kPlaybackStartTime, kPlaybackStartTime + kPlaybackDuration,
kGracePeriodEndTime, kEmptyAppParameters, kUsageEntry,
last_valid_usage_entry_number));
last_valid_usage_entry_number, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_CALL(*crypto_session_, Open(kLevelDefault))
.Times(2)
@@ -1869,13 +1876,15 @@ TEST_F(UsageTableHeaderTest, DeleteEntry_LastEntryIsOffline) {
usage_entry_info_vector.size() - 1; // kUsageEntryInfoOfflineLicense3
metrics::CryptoMetrics metrics;
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files_->StoreLicense(
usage_entry_info_vector[last_usage_entry_number].key_set_id,
kActiveLicenseState, kPsshData, kKeyRequest, kKeyResponse,
kKeyRenewalRequest, kKeyRenewalResponse, kReleaseServerUrl,
kPlaybackStartTime, kPlaybackStartTime + kPlaybackDuration,
kGracePeriodEndTime, kEmptyAppParameters, kUsageEntry,
last_usage_entry_number));
last_usage_entry_number, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_CALL(*crypto_session_, Open(kLevelDefault))
.Times(2)
@@ -1936,7 +1945,7 @@ TEST_F(UsageTableHeaderTest, DeleteEntry_LastEntryIsOffline) {
&key_request, &key_response, &key_renewal_request, &key_renewal_response,
&release_server_url, &playback_start_time, &last_playback_time,
&grace_period_end_time, &app_parameters, &usage_entry,
&usage_entry_number));
&usage_entry_number, &sub_error_code));
EXPECT_EQ(kActiveLicenseState, license_state);
EXPECT_EQ(kPsshData, pssh_data);
EXPECT_EQ(kKeyRequest, key_request);
@@ -1950,6 +1959,7 @@ TEST_F(UsageTableHeaderTest, DeleteEntry_LastEntryIsOffline) {
EXPECT_EQ(kEmptyAppParameters.size(), app_parameters.size());
EXPECT_EQ(kAnotherUsageEntry, usage_entry);
EXPECT_EQ(usage_entry_number_to_be_deleted, usage_entry_number);
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
// Initial Test state:
@@ -2089,13 +2099,15 @@ TEST_F(UsageTableHeaderTest, DeleteEntry_LastEntriesAreOfflineAndUnknknown) {
usage_entry_info_vector.size() - 3; // kUsageEntryInfoOfflineLicense3
metrics::CryptoMetrics metrics;
DeviceFiles::ResponseType sub_error_code;
EXPECT_TRUE(device_files_->StoreLicense(
usage_entry_info_vector[last_valid_usage_entry_number].key_set_id,
kActiveLicenseState, kPsshData, kKeyRequest, kKeyResponse,
kKeyRenewalRequest, kKeyRenewalResponse, kReleaseServerUrl,
kPlaybackStartTime, kPlaybackStartTime + kPlaybackDuration,
kGracePeriodEndTime, kEmptyAppParameters, kUsageEntry,
last_valid_usage_entry_number));
last_valid_usage_entry_number, &sub_error_code));
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
EXPECT_CALL(*crypto_session_, Open(kLevelDefault))
.Times(2)
@@ -2157,7 +2169,7 @@ TEST_F(UsageTableHeaderTest, DeleteEntry_LastEntriesAreOfflineAndUnknknown) {
&key_request, &key_response, &key_renewal_request, &key_renewal_response,
&release_server_url, &playback_start_time, &last_playback_time,
&grace_period_end_time, &app_parameters, &usage_entry,
&usage_entry_number));
&usage_entry_number, &sub_error_code));
EXPECT_EQ(kActiveLicenseState, license_state);
EXPECT_EQ(kPsshData, pssh_data);
EXPECT_EQ(kKeyRequest, key_request);
@@ -2171,6 +2183,7 @@ TEST_F(UsageTableHeaderTest, DeleteEntry_LastEntriesAreOfflineAndUnknknown) {
EXPECT_EQ(kEmptyAppParameters.size(), app_parameters.size());
EXPECT_EQ(kAnotherUsageEntry, usage_entry);
EXPECT_EQ(usage_entry_number_to_be_deleted, usage_entry_number);
EXPECT_EQ(DeviceFiles::kNoError, sub_error_code);
}
// Initial Test state: