The EME spec technically requires CDMs to treat audio/mp4 and video/mp4 equivalently, as well as audio/webm and video/webm. We had only been accepting video/mp4 and video/webm up until now. This change also centralizes handling of init data types in the shared CDM code instead of having it spread across multiple places in the codebase. (This is a merge of https://widevine-internal-review.googlesource.com/9532/ from the Widevine CDM repo.) Bug: 13564917 Change-Id: Ib8bdfb2b003ffb00e8f0559561335abb3c5778b0
151 lines
5.7 KiB
C++
151 lines
5.7 KiB
C++
// Copyright 2012 Google Inc. All Rights Reserved.
|
|
|
|
#include "crypto_session.h"
|
|
#include "license.h"
|
|
#include "gtest/gtest.h"
|
|
#include "initialization_data.h"
|
|
#include "policy_engine.h"
|
|
#include "string_conversions.h"
|
|
|
|
namespace {
|
|
|
|
// The test data is based on key box Eureka-Dev-G1-0001520
|
|
// This unit test should run on oemcrypto mock with the same key box
|
|
static const char* kInitData = "0801121093789920E8D6520098577DF8F2DD5546";
|
|
static const char* kSignedRequest =
|
|
"080112790A4C0800124800000002000001241F344DB9DFF087F01D917910F39B"
|
|
"60DC7797CD97789EE82516DC07A478CB70B8C08C299293150AA8E01D2DC9808C"
|
|
"98DAA16E40A0E55DFE3618C7584DD3C7BE4212250A230A140801121093789920"
|
|
"E8D6520098577DF8F2DD554610011A09393837363534333231180120001A20FA"
|
|
"E2DDCD7F1ACA4B728EC957FEE802F8A5541557ACA784EE0D05BFCC0E65FEA1";
|
|
static const char* kValidResponse =
|
|
"080212D9020A190A093938373635343332311208C434AB9240A9EF2420012800"
|
|
"120E0801180120809A9E0128809A9E011A461210B72EEBF582B04BDB15C2E0E3"
|
|
"20B21C351A30E51FC1D27F70DB8E0DDF8C051BD6E251A44599DBCE4E1BE663FD"
|
|
"3AFAB191A7DD5736841FB04CE558E7F17BD9812A2DBA20011A6E0A1093789920"
|
|
"E8D6520098577DF8F2DD55461210367E8714B6F10087AFDE542EDC5C91541A20"
|
|
"ED51D4E84D81C8CBD8E2046EE079F8A2016268A2F192B902FDA241FEEB10C014"
|
|
"200242240A109209D46191B8752147C9F6A1CE2BEE6E12107910F39B60DC7797"
|
|
"CD97789EE82516DC1A6E0A107B1328EB61B554E293F75B1E3E94CC3B1210676F"
|
|
"69BBDA35EE972B77BC1328A087391A20D2B9FA92B164F5F6362CAD9200A11661"
|
|
"B8F71E9CE671A3A252D34586526B68FA200242240A109D7B13420FD6217666CC"
|
|
"CD43860FAA3A1210DBCE4E1BE663FD3AFAB191A7DD57368420E9FDCE86051A20"
|
|
"C6279E32FD2CB9067229E87AFF4B2DE14A077CDF8F061DAEE2CC2D1BCDEF62D0";
|
|
static const char* kInvalidResponse =
|
|
"0802128D020A190A093938373635343332311208BA68C949396C438C20012800"
|
|
"120E0801180120809A9E0128809A9E011A4612105021EB9AEDC1F73E96DE7DCC"
|
|
"6D7D72401A300A82E118C0BF0DB230FCADE3F49A9777DDD392322240FEF32C97"
|
|
"F85428E2F6CCFA638B5481464ADBCF199CEC2FCF3AFB20011A480A1093789920"
|
|
"E8D6520098577DF8F2DD55461210EE52C59B99050A36E10569AFB34D1DA41A20"
|
|
"C61FCB8019AC9ADE99FF8FCA99ED35E2331B6488A35102F9379AA42C87A22DC7"
|
|
"20021A480A107B1328EB61B554E293F75B1E3E94CC3B12101BBF5286B859E349"
|
|
"2E4A47A24C06AC1B1A2061F21836A04E558BEE0244EF41C165F60CF23C580275"
|
|
"3175D48BAF1C6CA5759F200220A2BCCA86051A203FD4671075D9DEC6486A9317"
|
|
"70669993306831EDD57D77F34EFEB467470BA364";
|
|
|
|
const std::string kCencMimeType = "video/mp4";
|
|
const std::string kWebmMimeType = "video/webm";
|
|
|
|
}
|
|
|
|
namespace wvcdm {
|
|
|
|
class LicenseTest : public ::testing::Test {
|
|
protected:
|
|
virtual void SetUp() {
|
|
session_ = new CryptoSession();
|
|
EXPECT_TRUE(session_ != NULL);
|
|
|
|
std::string token;
|
|
EXPECT_TRUE(session_->GetToken(&token));
|
|
|
|
EXPECT_TRUE(session_->Open());
|
|
EXPECT_TRUE(license_.Init(token, session_, &policy_engine_));
|
|
}
|
|
|
|
virtual void TearDown() {
|
|
session_->Close();
|
|
delete session_;
|
|
}
|
|
|
|
CryptoSession* session_;
|
|
CdmLicense license_;
|
|
PolicyEngine policy_engine_;
|
|
};
|
|
|
|
TEST(LicenseTestSession, InitNullSession) {
|
|
CdmLicense license;
|
|
EXPECT_FALSE(license.Init("Dummy", NULL, NULL));
|
|
}
|
|
|
|
// TODO(rfrias): Fix or remove test.
|
|
TEST_F(LicenseTest, DISABLED_PrepareIsoBmffKeyRequest) {
|
|
std::string signed_request;
|
|
CdmAppParameterMap app_parameters;
|
|
std::string server_url;
|
|
CdmSessionId session_id;
|
|
InitializationData init_data(kCencMimeType, a2bs_hex(kInitData));
|
|
license_.PrepareKeyRequest(init_data,
|
|
kLicenseTypeStreaming,
|
|
app_parameters,
|
|
session_id,
|
|
&signed_request,
|
|
&server_url);
|
|
EXPECT_EQ(signed_request, a2bs_hex(kSignedRequest));
|
|
}
|
|
|
|
// TODO(rfrias): Fix or remove test.
|
|
TEST_F(LicenseTest, DISABLED_PrepareWebmKeyRequest) {
|
|
std::string signed_request;
|
|
CdmAppParameterMap app_parameters;
|
|
std::string server_url;
|
|
CdmSessionId session_id;
|
|
InitializationData init_data(kWebmMimeType, a2bs_hex(kInitData));
|
|
license_.PrepareKeyRequest(init_data,
|
|
kLicenseTypeStreaming,
|
|
app_parameters,
|
|
session_id,
|
|
&signed_request,
|
|
&server_url);
|
|
EXPECT_EQ(signed_request, a2bs_hex(kSignedRequest));
|
|
}
|
|
|
|
// TODO(rfrias): Fix or remove test.
|
|
TEST_F(LicenseTest, DISABLED_HandleKeyResponseValid) {
|
|
std::string signed_request;
|
|
CdmAppParameterMap app_parameters;
|
|
CdmSessionId session_id;
|
|
std::string server_url;
|
|
InitializationData init_data(kCencMimeType, a2bs_hex(kInitData));
|
|
license_.PrepareKeyRequest(init_data,
|
|
kLicenseTypeStreaming,
|
|
app_parameters,
|
|
session_id,
|
|
&signed_request,
|
|
&server_url);
|
|
EXPECT_EQ(signed_request, a2bs_hex(kSignedRequest));
|
|
EXPECT_TRUE(license_.HandleKeyResponse(a2bs_hex(kValidResponse)));
|
|
}
|
|
|
|
// TODO(rfrias): Fix or remove test.
|
|
TEST_F(LicenseTest, DISABLED_HandleKeyResponseInvalid) {
|
|
std::string signed_request;
|
|
CdmAppParameterMap app_parameters;
|
|
CdmSessionId session_id;
|
|
std::string server_url;
|
|
InitializationData init_data(kCencMimeType, a2bs_hex(kInitData));
|
|
license_.PrepareKeyRequest(init_data,
|
|
kLicenseTypeStreaming,
|
|
app_parameters,
|
|
session_id,
|
|
&signed_request,
|
|
&server_url);
|
|
EXPECT_EQ(signed_request, a2bs_hex(kSignedRequest));
|
|
EXPECT_FALSE(license_.HandleKeyResponse(a2bs_hex(kInvalidResponse)));
|
|
}
|
|
|
|
// TODO(kqyang): add unit test cases for PrepareKeyRenewalRequest
|
|
// and HandleRenewalKeyResponse
|
|
|
|
}
|