Source release 16.3.0
This commit is contained in:
@@ -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));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user