Source release 16.3.0

This commit is contained in:
John W. Bruce
2020-07-24 14:30:03 -07:00
parent b830b1d1fb
commit 160df9f57a
74 changed files with 4632 additions and 2561 deletions

View File

@@ -6,7 +6,6 @@
// would, but in parallel, attempting to create as many collisions in the CDM
// code as possible.
#include <algorithm>
#include <chrono>
#include <future>
#include <string>
@@ -41,6 +40,12 @@ constexpr const auto kMinimumWait = std::chrono::nanoseconds(1);
constexpr const int kRepetitions = 10;
constexpr const int kThreadCount = 24;
// Number of attempts to request a license key from the license server
// before failing.
constexpr size_t kMaxKeyRequestAttempts = 5;
// Wait time between failed key requests.
constexpr const auto kRequestRetryWait = std::chrono::milliseconds(10);
const std::vector<uint8_t> kKeyId = a2b_hex("371ea35e1a985d75d198a7f41020dc23");
const std::vector<uint8_t> kIv = a2b_hex("cedc47cccd6cb437af41325953c2e5e0");
const std::vector<uint8_t> kEncryptedData = a2b_hex(
@@ -110,17 +115,27 @@ class ParallelCdmTest : public WvCdmTestBase,
ASSERT_EQ(kKeyRequestTypeInitial, key_request->type);
}
void GetKeyResponse(const std::string& url, const CdmKeyRequest& key_request,
void GetKeyResponse(const CdmSessionId& session_id, const std::string& url,
const CdmKeyRequest& key_request,
std::string* key_response) {
UrlRequest url_request(url);
ASSERT_TRUE(url_request.is_connected());
bool request_ok = false;
std::string http_response;
url_request.PostRequest(key_request.message);
ASSERT_TRUE(url_request.GetResponse(&http_response));
int status_code = url_request.GetStatusCode(http_response);
ASSERT_EQ(kHttpOk, status_code);
for (size_t attempt = 1; attempt <= kMaxKeyRequestAttempts; ++attempt) {
UrlRequest url_request(url);
ASSERT_TRUE(url_request.is_connected());
url_request.PostRequest(key_request.message);
if (url_request.GetResponse(&http_response)) {
int status_code = url_request.GetStatusCode(http_response);
ASSERT_EQ(kHttpOk, status_code);
request_ok = true;
break;
} else {
LOGW("License request failed: sid = %s, attempt = %zu",
session_id.c_str(), attempt);
std::this_thread::sleep_for(kRequestRetryWait);
}
}
ASSERT_TRUE(request_ok);
LicenseRequest license_request;
license_request.GetDrmMessage(http_response, *key_response);
}
@@ -184,8 +199,10 @@ class ParallelCdmTest : public WvCdmTestBase,
template <class Function>
void RunSessionThreadsSimultaneously(Function do_work) {
std::atomic<int> threads_waiting(0);
const int session_count = std::min(kThreadCount, GetMaxNumberOfSessions());
// The OEMCrypto V16 adapter makes use of one of the sessions,
// reducing the maximum number of sessions available for the test.
const int session_count =
std::min(kThreadCount, GetMaxNumberOfSessions() - 1);
LOGI("Running %d Threads", session_count);
std::vector<CdmSessionId> sessions(session_count);
std::vector<std::future<void>> threads;
@@ -231,7 +248,10 @@ TEST_P(ParallelCdmTest, ParallelLicenseRequests) {
GenerateKeyRequest(session_id, init_data, &key_request));
std::string key_response;
ASSERT_NO_FATAL_FAILURE(GetKeyResponse(url, key_request, &key_response));
LOGD("Getting license request: sid = %s", session_id.c_str());
ASSERT_NO_FATAL_FAILURE(
GetKeyResponse(session_id, url, key_request, &key_response))
<< "SID: " << session_id;
ASSERT_NO_FATAL_FAILURE(AddKey(session_id, key_response));
});
@@ -248,7 +268,8 @@ TEST_P(ParallelCdmTest, ParallelDecryptSessions) {
GenerateKeyRequest(session_id, init_data, &key_request));
std::string key_response;
ASSERT_NO_FATAL_FAILURE(GetKeyResponse(url, key_request, &key_response));
ASSERT_NO_FATAL_FAILURE(
GetKeyResponse(session_id, url, key_request, &key_response));
ASSERT_NO_FATAL_FAILURE(AddKey(session_id, key_response));
@@ -273,7 +294,8 @@ TEST_P(ParallelCdmTest, ParallelDecryptsInSameSession) {
GenerateKeyRequest(session_id, init_data, &key_request));
std::string key_response;
ASSERT_NO_FATAL_FAILURE(GetKeyResponse(url, key_request, &key_response));
ASSERT_NO_FATAL_FAILURE(
GetKeyResponse(session_id, url, key_request, &key_response));
ASSERT_NO_FATAL_FAILURE(AddKey(session_id, key_response));