Create test FileSystems in a platform-specific manner
(This is a merge of http://go/wvgerrit/153552.) The correct way to create a FileSystem object for testing CdmEngine depends on the platform. However, our code has historically just instantiated a new FileSystem object using the default constructor. This works fine for Android and has historically worked fine for the CE CDM tests because they did not implement storage correctly. However, an upcoming commit will fix the implementation of storage in the CE CDM TestHost, causing tests that use a default FileSystem constructor to fail. This patch adds a new platform-defined function that instantiates per-origin test storage in a platform-correct way. For Android, it continues to use the default constructor, while for CE CDM, it uses the TestHost. Bug: 193060708 Test: x86-64 w/ storage separated Test: build_and_run_all_unit_tests.sh Change-Id: I0a9b6a4d3943e053d51d6018e392b7f215f50642
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
|
||||
#include "cdm_client_property_set.h"
|
||||
#include "cdm_engine.h"
|
||||
#include "create_test_file_system.h"
|
||||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "wv_cdm_event_listener.h"
|
||||
@@ -115,7 +116,7 @@ class MockCdmEngineImpl : public CdmEngine {
|
||||
class WvCdmEngineMetricsImplTest : public ::testing::Test {
|
||||
public:
|
||||
void SetUp() override {
|
||||
file_system_.reset(new wvutil::FileSystem);
|
||||
file_system_.reset(CreateTestFileSystem());
|
||||
std::shared_ptr<EngineMetrics> engine_metrics(new EngineMetrics);
|
||||
test_cdm_metrics_engine_.reset(
|
||||
new CdmEngineMetricsImpl<StrictMock<MockCdmEngineImpl>>(
|
||||
|
||||
15
libwvdrmengine/cdm/core/test/create_test_file_system.h
Normal file
15
libwvdrmengine/cdm/core/test/create_test_file_system.h
Normal file
@@ -0,0 +1,15 @@
|
||||
// Copyright 2022 Google LLC. All Rights Reserved. This file and proprietary
|
||||
// source code may only be used and distributed under the Widevine License
|
||||
// Agreement.
|
||||
|
||||
#ifndef CDM_TEST_CREATE_TEST_FILE_SYSTEM_H_
|
||||
#define CDM_TEST_CREATE_TEST_FILE_SYSTEM_H_
|
||||
|
||||
#include "file_store.h"
|
||||
|
||||
// Create a new FileSystem object that is suitable for using to create a new
|
||||
// CdmEngine object. How this is implemented is platform-specific. The caller
|
||||
// owns the returned pointer and is responsible for deleting it.
|
||||
wvutil::FileSystem* CreateTestFileSystem();
|
||||
|
||||
#endif // CDM_TEST_CREATE_TEST_FILE_SYSTEM_H_
|
||||
@@ -4,8 +4,10 @@
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
|
||||
#include "create_test_file_system.h"
|
||||
#include "crypto_session.h"
|
||||
#include "properties.h"
|
||||
#include "test_base.h"
|
||||
@@ -95,8 +97,8 @@ TEST_F(CdmOtaKeyboxTest, TestThatTheBuildFilesWork) { ASSERT_TRUE(true); }
|
||||
* should be skipped.
|
||||
*/
|
||||
TEST_F(CdmOtaKeyboxTest, BasicTest) {
|
||||
wvutil::FileSystem file_system;
|
||||
TestCdmEngine cdm_engine(&file_system,
|
||||
std::unique_ptr<wvutil::FileSystem> file_system(CreateTestFileSystem());
|
||||
TestCdmEngine cdm_engine(file_system.get(),
|
||||
std::shared_ptr<EngineMetrics>(new EngineMetrics));
|
||||
// Remove any existing certificate.
|
||||
cdm_engine.Unprovision(kSecurityLevelL1);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#include "create_test_file_system.h"
|
||||
#include "license_holder.h"
|
||||
#include "log.h"
|
||||
#include "test_sleep.h"
|
||||
@@ -201,7 +202,7 @@ bool RebootTest::ParseDump(const std::string& dump,
|
||||
|
||||
void RebootTest::SetUp() {
|
||||
WvCdmTestBase::SetUp();
|
||||
if (!file_system_) file_system_ = new FileSystem();
|
||||
if (!file_system_) file_system_ = CreateTestFileSystem();
|
||||
|
||||
const ::testing::TestInfo* const test_info =
|
||||
::testing::UnitTest::GetInstance()->current_test_info();
|
||||
|
||||
@@ -324,12 +324,12 @@ void WvCdmTestBase::Provision() {
|
||||
std::string cert, wrapped_key;
|
||||
|
||||
CdmSessionId session_id;
|
||||
wvutil::FileSystem file_system;
|
||||
std::unique_ptr<wvutil::FileSystem> file_system(CreateTestFileSystem());
|
||||
|
||||
if (config_.provisioning_server() == "fake") {
|
||||
LOGD("Using fake provisioning server.");
|
||||
|
||||
TestCdmEngine cdm_engine(&file_system,
|
||||
TestCdmEngine cdm_engine(file_system.get(),
|
||||
std::shared_ptr<EngineMetrics>(new EngineMetrics));
|
||||
FakeProvisioningServer server;
|
||||
CdmResponseType result = cdm_engine.GetProvisioningRequest(
|
||||
@@ -349,7 +349,7 @@ void WvCdmTestBase::Provision() {
|
||||
EXPECT_EQ(NO_ERROR, result);
|
||||
} else {
|
||||
// TODO(fredgc): provision for different SPOIDs.
|
||||
TestCdmEngine cdm_engine(&file_system,
|
||||
TestCdmEngine cdm_engine(file_system.get(),
|
||||
std::shared_ptr<EngineMetrics>(new EngineMetrics));
|
||||
|
||||
CdmResponseType result = cdm_engine.GetProvisioningRequest(
|
||||
@@ -424,11 +424,11 @@ void WvCdmTestBase::Provision() {
|
||||
// that certificate from the provisioning request.
|
||||
void WvCdmTestBase::EnsureProvisioned() {
|
||||
CdmSessionId session_id;
|
||||
wvutil::FileSystem file_system;
|
||||
std::unique_ptr<wvutil::FileSystem> file_system(CreateTestFileSystem());
|
||||
// OpenSession will check if a DRM certificate exists, while
|
||||
// GenerateKeyRequest will actually load the wrapped private key.
|
||||
// Either may return a NEED_PROVISIONING error, so both have to be checked.
|
||||
TestCdmEngine cdm_engine(&file_system,
|
||||
TestCdmEngine cdm_engine(file_system.get(),
|
||||
std::shared_ptr<EngineMetrics>(new EngineMetrics));
|
||||
CdmResponseType status = cdm_engine.OpenSession(config_.key_system(), nullptr,
|
||||
nullptr, &session_id);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
#include "cdm_engine.h"
|
||||
#include "config_test_env.h"
|
||||
#include "create_test_file_system.h"
|
||||
#include "crypto_session.h"
|
||||
#include "metrics_collections.h"
|
||||
#include "oemcrypto_types.h"
|
||||
@@ -92,11 +93,12 @@ class TestCdmEngine : public CdmEngine {
|
||||
class WvCdmTestBaseWithEngine : public WvCdmTestBase {
|
||||
public:
|
||||
WvCdmTestBaseWithEngine()
|
||||
: dummy_engine_metrics_(new metrics::EngineMetrics()),
|
||||
cdm_engine_(&file_system_, dummy_engine_metrics_) {}
|
||||
: file_system_(CreateTestFileSystem()),
|
||||
dummy_engine_metrics_(new metrics::EngineMetrics()),
|
||||
cdm_engine_(file_system_.get(), dummy_engine_metrics_) {}
|
||||
|
||||
protected:
|
||||
wvutil::FileSystem file_system_;
|
||||
std::unique_ptr<wvutil::FileSystem> file_system_;
|
||||
std::shared_ptr<metrics::EngineMetrics> dummy_engine_metrics_;
|
||||
TestCdmEngine cdm_engine_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user