[ Merge of http://go/wvgerrit/183472 ] For provisioning 4.0 devices, the DRM certificate serial number was changing on a reprovisioning attempt or factory reset. The app parameters sent up in the client identification name-value pair field were being filtered out in provisioning requests. This has been corrected for provisioning 4.0 stage 2 (DRM certificate request). There is no need to include them for stage 1 (OEM certificate request). The test case WvCdmRequestLicenseTest.ProvisioningSpoidTest was created earlier to ensure that SPOIDs and DRM certificates are stable. Unfortunately due to another bug b/250099615, the RKP service was holding a connection to the Widevine TA for provisioning 4.0 devices. When native tests ran as their own process, L1 would fail to load due to a connection failure and the test would run as L3. The tests passed for provisioning 4.0 devices Pixel 7 and 8 when they should have failed. This gave us a false sense of confidence that the SPOIDs were stable. For now a workaround is to run a shell command to kill the widevine TA before running native tests. $ adb shell pkill -f -9 widevine New tests have been introduced to provide integration coverage WVPluginTest at the WV plugin level and CoreIntegrationTest for core. GTS tests are also being written in b/295538002. Bug: 294451432 Bug: 293950895 Test: WVPluginTest.ProvisioningStableSpoidTestL1, WVTS tests Change-Id: Ib9ace4387866ea38bb1840feb69cea78d2d2c09c
54 lines
2.1 KiB
C++
54 lines
2.1 KiB
C++
// Copyright 2023 Google LLC. All Rights Reserved. This file and proprietary
|
|
// source code may only be used and distributed under the Widevine License
|
|
// Agreement.
|
|
|
|
#ifndef WVCDM_CORE_TEST_PROVISIONING_HOLDER_H_
|
|
#define WVCDM_CORE_TEST_PROVISIONING_HOLDER_H_
|
|
|
|
#include "test_base.h"
|
|
|
|
#include <string>
|
|
|
|
namespace wvcdm {
|
|
|
|
class ProvisioningHolder {
|
|
public:
|
|
ProvisioningHolder(TestCdmEngine* cdm_engine,
|
|
const std::string& provisioning_server_url,
|
|
const std::string& provisioning_service_certificate)
|
|
: cdm_engine_(cdm_engine),
|
|
provisioning_server_url_(provisioning_server_url),
|
|
provisioning_service_certificate_(provisioning_service_certificate) {}
|
|
void Provision(CdmCertificateType cert_type, bool binary_provisioning);
|
|
void Provision(bool binary_provisioning) {
|
|
Provision(kCertificateWidevine, binary_provisioning);
|
|
}
|
|
std::string response() const { return response_; }
|
|
std::string certificate() const { return certificate_; }
|
|
std::string wrapped_key() const { return wrapped_key_; }
|
|
|
|
protected:
|
|
TestCdmEngine* cdm_engine_;
|
|
std::string provisioning_server_url_;
|
|
std::string provisioning_service_certificate_;
|
|
std::string response_;
|
|
std::string certificate_;
|
|
std::string wrapped_key_;
|
|
|
|
// Locate the portion of the server's provisioning response message that is
|
|
// between the strings jason_start_substr and json_end_substr. Returns the
|
|
// string through *result. If the start substring match fails, assume the
|
|
// entire string represents a serialized protobuf mesaage and return true with
|
|
// the entire string. If the end_substring match fails, return false with an
|
|
// empty *result.
|
|
bool ExtractSignedMessage(const std::string& response, std::string* result);
|
|
// Dump request and response information for use in a debug or failure log.
|
|
std::string DumpProvAttempt(const std::string& request,
|
|
const std::string& response,
|
|
CdmCertificateType cert_type);
|
|
};
|
|
|
|
} // namespace wvcdm
|
|
|
|
#endif // WVCDM_CORE_TEST_PROVISIONING_HOLDER_H_
|