Replace hardcoded parameters
This commit is contained in:
155
common/output_protection_util_test.cc
Normal file
155
common/output_protection_util_test.cc
Normal file
@@ -0,0 +1,155 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright 2019 Google LLC.
|
||||
//
|
||||
// This software is licensed under the terms defined in the Widevine Master
|
||||
// License Agreement. For a copy of this agreement, please contact
|
||||
// widevine-licensing@google.com.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "common/output_protection_util.h"
|
||||
|
||||
#include "testing/gmock.h"
|
||||
#include "testing/gunit.h"
|
||||
|
||||
namespace widevine {
|
||||
namespace op_util {
|
||||
|
||||
TEST(OutputProtectionUtilTest, AnalogOutputAllowed_DeviceWithoutAnalogOutput) {
|
||||
License::KeyContainer::OutputProtection output_protection;
|
||||
output_protection.set_disable_analog_output(false);
|
||||
ClientIdentification::ClientCapabilities client_capabilities;
|
||||
client_capabilities.set_analog_output_capabilities(
|
||||
ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_UNKNOWN);
|
||||
bool should_disable_output_protection = true;
|
||||
ASSERT_OK(VerifyDeviceCapabilities(client_capabilities, output_protection,
|
||||
&should_disable_output_protection));
|
||||
EXPECT_FALSE(should_disable_output_protection);
|
||||
}
|
||||
|
||||
TEST(OutputProtectionUtilTest,
|
||||
AnalogOutputNotAllowed_DeviceWithoutAnalogOutput) {
|
||||
License::KeyContainer::OutputProtection output_protection;
|
||||
output_protection.set_disable_analog_output(true);
|
||||
ClientIdentification::ClientCapabilities client_capabilities;
|
||||
client_capabilities.set_analog_output_capabilities(
|
||||
ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_NONE);
|
||||
bool should_disable_output_protection = true;
|
||||
ASSERT_OK(VerifyDeviceCapabilities(client_capabilities, output_protection,
|
||||
&should_disable_output_protection));
|
||||
EXPECT_FALSE(should_disable_output_protection);
|
||||
}
|
||||
|
||||
TEST(OutputProtectionUtilTest, AnalogOutputNotAllowed_DeviceWithAnalogOutput) {
|
||||
License::KeyContainer::OutputProtection output_protection;
|
||||
output_protection.set_disable_analog_output(true);
|
||||
ClientIdentification::ClientCapabilities client_capabilities;
|
||||
client_capabilities.set_analog_output_capabilities(
|
||||
ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_SUPPORTED);
|
||||
client_capabilities.set_can_disable_analog_output(false);
|
||||
bool should_disable_output_protection = true;
|
||||
ASSERT_EQ(error::PERMISSION_DENIED,
|
||||
VerifyDeviceCapabilities(client_capabilities, output_protection,
|
||||
&should_disable_output_protection)
|
||||
.error_code());
|
||||
EXPECT_FALSE(should_disable_output_protection);
|
||||
// Client has the ability to disable it's analog output.
|
||||
client_capabilities.set_can_disable_analog_output(true);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(client_capabilities, output_protection,
|
||||
&should_disable_output_protection));
|
||||
}
|
||||
|
||||
TEST(OutputProtectionUtilTest, CGMSRequired) {
|
||||
License::KeyContainer::OutputProtection output_protection;
|
||||
output_protection.set_disable_analog_output(false);
|
||||
output_protection.set_cgms_flags(
|
||||
License::KeyContainer::OutputProtection::COPY_NEVER);
|
||||
ClientIdentification::ClientCapabilities client_capabilities;
|
||||
client_capabilities.set_analog_output_capabilities(
|
||||
ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_SUPPORTED);
|
||||
bool should_disable_output_protection = true;
|
||||
EXPECT_EQ(error::PERMISSION_DENIED,
|
||||
VerifyDeviceCapabilities(client_capabilities, output_protection,
|
||||
&should_disable_output_protection)
|
||||
.error_code());
|
||||
client_capabilities.set_analog_output_capabilities(
|
||||
ClientIdentification::ClientCapabilities::ANALOG_OUTPUT_SUPPORTS_CGMS_A);
|
||||
ASSERT_OK(VerifyDeviceCapabilities(client_capabilities, output_protection,
|
||||
&should_disable_output_protection));
|
||||
EXPECT_FALSE(should_disable_output_protection);
|
||||
}
|
||||
// TODO(user): enable this test.
|
||||
TEST(OutputProtectionUtilTest, DISABLED_VerifyDeviceHdcpCapabilities) {
|
||||
ClientIdentification::ClientCapabilities device_capabilities;
|
||||
License::KeyContainer::OutputProtection required;
|
||||
|
||||
// Device capabilities was not specified by the client.
|
||||
device_capabilities.clear_max_hdcp_version();
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_NONE);
|
||||
bool should_disable_output_protection;
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V1);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V2);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V2_1);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V2_2);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(
|
||||
License::KeyContainer::OutputProtection::HDCP_NO_DIGITAL_OUTPUT);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
|
||||
// Device capabilities are too low for any HDCP. Only fail if the required
|
||||
// protection is HDCP_NO_DIGITAL_OUTPUT.
|
||||
device_capabilities.set_max_hdcp_version(
|
||||
ClientIdentification::ClientCapabilities::HDCP_NONE);
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_NONE);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V1);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V2);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(
|
||||
License::KeyContainer::OutputProtection::HDCP_NO_DIGITAL_OUTPUT);
|
||||
EXPECT_EQ(error::PERMISSION_DENIED,
|
||||
VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection)
|
||||
.error_code());
|
||||
|
||||
// Device does not have any digital output ports. In this case, the CDM
|
||||
// cannot enforce this situation. For now, allow all HDCP requests, the KCB
|
||||
// will enforce the HDCP settings.
|
||||
device_capabilities.set_max_hdcp_version(
|
||||
ClientIdentification::ClientCapabilities::HDCP_NO_DIGITAL_OUTPUT);
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_NONE);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V1);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V2);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V2_1);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(License::KeyContainer::OutputProtection::HDCP_V2_2);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
required.set_hdcp(
|
||||
License::KeyContainer::OutputProtection::HDCP_NO_DIGITAL_OUTPUT);
|
||||
EXPECT_OK(VerifyDeviceCapabilities(device_capabilities, required,
|
||||
&should_disable_output_protection));
|
||||
}
|
||||
|
||||
} // namespace op_util
|
||||
} // namespace widevine
|
||||
Reference in New Issue
Block a user