Merge "Infrastructure changes to support big usage tables"
This commit is contained in:
@@ -22,6 +22,9 @@ const uint32_t kLicenseRequestLen = 300;
|
||||
const uint32_t kLicenseLen = 500;
|
||||
const uint32_t kProviderSessionTokenLen = 128;
|
||||
const uint32_t kKeySetIdLen = 20;
|
||||
const uint32_t kUsageEntryLen = 50;
|
||||
|
||||
const std::string kEmptyString;
|
||||
|
||||
// Structurally valid test certificate.
|
||||
// The data elements in this module are used to test the storage and
|
||||
@@ -120,6 +123,7 @@ struct LicenseInfo {
|
||||
int64_t last_playback_time;
|
||||
int64_t grace_period_end_time;
|
||||
std::string app_parameters;
|
||||
std::string usage_entry;
|
||||
std::string file_data;
|
||||
};
|
||||
|
||||
@@ -226,9 +230,9 @@ LicenseInfo license_test_data[] = {
|
||||
"0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF"
|
||||
"A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0"
|
||||
"BEA6CABACA1C2C"),
|
||||
"https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "",
|
||||
"https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "",
|
||||
a2bs_hex(
|
||||
"0AAA150802100122A3150801121408011210303132333435363738394142434445461"
|
||||
"0AAC150802100122A5150801121408011210303132333435363738394142434445461"
|
||||
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
|
||||
"7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302"
|
||||
"5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B"
|
||||
@@ -307,8 +311,8 @@ LicenseInfo license_test_data[] = {
|
||||
"106B63746C0000000000ECDCBE0000000020DBDFA68F051A20182F029E35047A3841F"
|
||||
"A176C74E5B387350E8D58DEA6878FF0BEA6CABACA1C2C3A2E68747470733A2F2F7465"
|
||||
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
|
||||
"365400048005800122066F4FFF1CB2C0F978149A9402F3E4FF8D49B19635E646A0678"
|
||||
"71AA08E7A8FDC3")},
|
||||
"3654000480058006200122039CB77169260F923E5D4BA5BBF6A7611117483253F2869"
|
||||
"9DF3D9D14C3718E309")},
|
||||
|
||||
// license 1
|
||||
{"ksidC8EAA2579A282EB0", DeviceFiles::kLicenseStateReleasing,
|
||||
@@ -409,7 +413,10 @@ LicenseInfo license_test_data[] = {
|
||||
"https://test.google.com/license/GetCencLicense", 0x12345678, 0x12348765,
|
||||
0x0, "Name1 Value1",
|
||||
a2bs_hex(
|
||||
"0AC3150802100122BC150802121408011210303132333435363738394142434445461"
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
|
||||
"22232425262728292a2b2c2d2e2f"),
|
||||
a2bs_hex(
|
||||
"0AF5150802100122EE150802121408011210303132333435363738394142434445461"
|
||||
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
|
||||
"7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302"
|
||||
"5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B"
|
||||
@@ -488,8 +495,10 @@ LicenseInfo license_test_data[] = {
|
||||
"106B63746C00000000CA3A6A75000000002083E5A68F051A20BDA6A56F7CBFD094219"
|
||||
"8F87C23A34AA5CBD64AFEB134277774CCF8E789D815DD3A2E68747470733A2F2F7465"
|
||||
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
|
||||
"36540F8ACD1910148E58ED29101520F0A054E616D6531120656616C75653158001220"
|
||||
"9C0315FC1812C6A0E5936E36D04ECE2FA56AF4AB544ECDF3C9135D54B4A26167")},
|
||||
"36540F8ACD1910148E58ED29101520F0A054E616D6531120656616C75653158006230"
|
||||
"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20212"
|
||||
"2232425262728292A2B2C2D2E2F1220312487214ACA5A9AF5ED9D45F209DC77E03CA1"
|
||||
"DBFFDF86C44A35A1351CE968B9")},
|
||||
|
||||
// license 2
|
||||
{"ksidE8C37662C88DC673", DeviceFiles::kLicenseStateReleasing,
|
||||
@@ -590,7 +599,10 @@ LicenseInfo license_test_data[] = {
|
||||
"https://test.google.com/license/GetCencLicense", 0x0123456789abcdef,
|
||||
0x123456789abfedc, 0x0, "Name1 Value1 Name2 Param2",
|
||||
a2bs_hex(
|
||||
"0AE9150802100122E2150802121408011210303132333435363738394142434445461"
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
|
||||
"22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"),
|
||||
a2bs_hex(
|
||||
"0AAB160802100122A4160802121408011210303132333435363738394142434445461"
|
||||
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
|
||||
"7A7D507618A5D3A68F05228E023082010A0282010100A947904B8DBD55FB685FDB302"
|
||||
"5574517CCCC74EE4FEAF6629D5179A52FF85CE7409528EFFA0E5DFC3DE9A34BA5F08B"
|
||||
@@ -671,8 +683,9 @@ LicenseInfo license_test_data[] = {
|
||||
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
|
||||
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910152150A054E616D6531120C5661"
|
||||
"6C756531204E616D653252160A0C4E616D653220506172616D321206506172616D325"
|
||||
"8001220616E6AC4AF6EB4F7147E98CF7302425E2390B293BBC01F9F8E89B49F653EA3"
|
||||
"45")}};
|
||||
"8006240000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E"
|
||||
"1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F122"
|
||||
"07CEAAE401B81E635808AC830A0F3F43308A38FAB16069E542F994B6EC1325280")}};
|
||||
|
||||
// Sample license data and related data for storage and use for offline
|
||||
// playback. The license data and URLs in this test are not real.
|
||||
@@ -777,7 +790,10 @@ LicenseInfo license_update_test_data[] = {
|
||||
"https://test.google.com/license/GetCencLicense", 0x0123456789abcdef,
|
||||
0x123456789abfedc, 0x0, "Name1 Value1 Name2 Value2 Name3 Value3",
|
||||
a2bs_hex(
|
||||
"0ABA150802100122B3150801121408011210303132333435363738394142434445461"
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
|
||||
"22232425262728292a2b2c2d2e2f"),
|
||||
a2bs_hex(
|
||||
"0AEC150802100122E5150801121408011210303132333435363738394142434445461"
|
||||
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
|
||||
"7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82"
|
||||
"6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD"
|
||||
@@ -856,14 +872,16 @@ LicenseInfo license_update_test_data[] = {
|
||||
"106B63746C0000000071FEF30B0000000020F4DFB68F051A2000351030900858FCFD6"
|
||||
"977B67803ADFD1280AA661E6B0BD30B08B2C4673551293A2E68747470733A2F2F7465"
|
||||
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
|
||||
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD191015800122051F15CDA5B9414919D"
|
||||
"B67769A781CC4F43138D314DAFFCBFBD620E53167E4AF2")},
|
||||
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910158006230000102030405060708"
|
||||
"090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2"
|
||||
"B2C2D2E2F1220A33C179B7718632337DFDC32D3711FD543336EBE838979DFDEB3A168"
|
||||
"BC9AFB27")},
|
||||
// license being released. all fields are identical except for license
|
||||
// state and hashed file data
|
||||
{"", DeviceFiles::kLicenseStateReleasing, "", "", "", "", "", "", 0, 0, 0,
|
||||
"",
|
||||
"", "",
|
||||
a2bs_hex(
|
||||
"0ABA150802100122B3150802121408011210303132333435363738394142434445461"
|
||||
"0AEC150802100122E5150802121408011210303132333435363738394142434445461"
|
||||
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
|
||||
"7A7D5076189EDFB68F05228E023082010A0282010100CC1715C81AD3F6F279C686F82"
|
||||
"6E6D7C8961EB13318367D06B4061BBC57E3C616A226A10F042CAD54D44C6484C725CD"
|
||||
@@ -942,8 +960,10 @@ LicenseInfo license_update_test_data[] = {
|
||||
"106B63746C0000000071FEF30B0000000020F4DFB68F051A2000351030900858FCFD6"
|
||||
"977B67803ADFD1280AA661E6B0BD30B08B2C4673551293A2E68747470733A2F2F7465"
|
||||
"73742E676F6F676C652E636F6D2F6C6963656E73652F47657443656E634C6963656E7"
|
||||
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD191015800122093FDE0D42BC60D3932"
|
||||
"02E0D5A49775E08093BF01560EF72C298321E921716E24")}};
|
||||
"36540EF9BAFCDF8ACD1910148DCFDAFCDF8ACD1910158006230000102030405060708"
|
||||
"090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2"
|
||||
"B2C2D2E2F1220394BA01DFB519C1A7311115F8B2A0AC3141F981FFEA09FCD48A8EFA3"
|
||||
"A045AAE6")}};
|
||||
|
||||
// Application parameters were added to the License message. This data
|
||||
// is used to verify that a License saved without application parameters can
|
||||
@@ -1045,7 +1065,7 @@ LicenseInfo license_app_parameters_backwards_compatibility_test_data = {
|
||||
"0112001A16200342120A106B63746C0000000000ECDCBE0000000020DBDF"
|
||||
"A68F051A20182F029E35047A3841FA176C74E5B387350E8D58DEA6878FF0"
|
||||
"BEA6CABACA1C2C"),
|
||||
"https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "",
|
||||
"https://test.google.com/license/GetCencLicense", 0x0, 0x0, 0x0, "", "",
|
||||
a2bs_hex(
|
||||
"0AA8150802100122A1150801121408011210303132333435363738394142434445461"
|
||||
"A9D0E080112950C0AD70B080112EF090AB002080212103E560EC5335E346F591BC4D0"
|
||||
@@ -1133,14 +1153,14 @@ struct UsageInfo {
|
||||
std::string provider_session_token;
|
||||
std::string license_request;
|
||||
std::string license;
|
||||
std::string usage_entry;
|
||||
std::string file_data;
|
||||
};
|
||||
|
||||
UsageInfo kUsageInfoTestData[] = {
|
||||
{"", "", "", // 0 usage info records
|
||||
a2bs_hex(
|
||||
"0A06080210012A00122095053501C5FA405B7EF01DA94685C6B20CB36493"
|
||||
"A9CF1653B720E2BEA3B77929")},
|
||||
{"", "", "", "", // 0 usage info records
|
||||
a2bs_hex("0A06080210012A00122095053501C5FA405B7EF01DA94685C6B20CB36493"
|
||||
"A9CF1653B720E2BEA3B77929")},
|
||||
{// 1 usage info record
|
||||
a2bs_hex(
|
||||
"924B035FBDA56AE5EF0ED05A08DE7AECC8ABE1835E0C4A548F7803937F4C3B4520EB7"
|
||||
@@ -1173,6 +1193,9 @@ UsageInfo kUsageInfoTestData[] = {
|
||||
"E103904BBE4C031A6483858FBAD74DACD01711F7B882749FFFBA0DB6C7D7109D82989"
|
||||
"C7D4DB5A0F1E7506AC24C89CECAF231EFF99F96AD76E57DABDD3C2DFBA7BAA869A771"
|
||||
"F561B165987E552824B0C914E708E425C3"),
|
||||
a2bs_hex(
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
|
||||
"22232425262728292a2b2c2d2e2f"),
|
||||
a2bs_hex(
|
||||
"0AB307080210012AAC070AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE"
|
||||
"1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D"
|
||||
@@ -1235,6 +1258,9 @@ UsageInfo kUsageInfoTestData[] = {
|
||||
"9D4D0AA2B358990F244BA76C8E40791D29A0C63C9EF620B97FDFFA9B671E5A65AFCC1"
|
||||
"C94CAACE0443E9D91F14028935BEA3988831BEBBFD3EB7C3A5AC9605B3534712A0912"
|
||||
"4345ACB09665E357E58946871BC140D365"),
|
||||
a2bs_hex(
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
|
||||
"22232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"),
|
||||
a2bs_hex(
|
||||
"0ADF0E080210012AD80E0AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE"
|
||||
"1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D"
|
||||
@@ -1324,6 +1350,9 @@ UsageInfo kUsageInfoTestData[] = {
|
||||
"0FF37DF85BE23D58C17379FEC08DC0648236A107AE66178EEBF78F05F3B898424FA02"
|
||||
"668B51F838AFA90D367B5CB425372D8CC3790BEA8AFB8795251FA09340D85A7F0B003"
|
||||
"134C838F08BB1054D18404C3F69130700E"),
|
||||
a2bs_hex(
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"
|
||||
"22232425262728292a2b2c2d2e2f"),
|
||||
a2bs_hex(
|
||||
"0A8B16080210012A84160AA9070A8001924B035FBDA56AE5EF0ED05A08DE7AECC8ABE"
|
||||
"1835E0C4A548F7803937F4C3B4520EB7F3334FFCDFA00DE56408F09D5019FCE87072D"
|
||||
@@ -1433,6 +1462,93 @@ HlsAttributesInfo kHlsAttributesTestData[] = {
|
||||
"41"),
|
||||
}};
|
||||
|
||||
// Usage Table and Entry Test Data
|
||||
// Note: Make sure the number of entries in kUsageEntriesTestData and
|
||||
// kUsageTableInfoTestData are equal.
|
||||
DeviceFiles::UsageEntryInfo kUsageEntriesTestData[] = {
|
||||
// usage entry 0
|
||||
{
|
||||
DeviceFiles::kStorageLicense, "ksid0", "", "",
|
||||
},
|
||||
// usage entry 1
|
||||
{
|
||||
DeviceFiles::kStorageLicense, "ksid1", "", "",
|
||||
},
|
||||
// usage entry 2
|
||||
{
|
||||
DeviceFiles::kStorageUsageInfo, "", "provider_session_token_2",
|
||||
"app_id_2",
|
||||
},
|
||||
// usage entry 3
|
||||
{
|
||||
DeviceFiles::kStorageUsageInfo, "", "provider_session_token_3",
|
||||
"app_id_3",
|
||||
},
|
||||
// usage entry 4
|
||||
{
|
||||
DeviceFiles::kStorageLicense, "ksid4", "", "",
|
||||
},
|
||||
// usage entry 5
|
||||
{
|
||||
DeviceFiles::kStorageUsageInfo, "", "provider_session_token_5",
|
||||
"app_id_5",
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
struct UsageTableTestInfo {
|
||||
std::string usage_table_header;
|
||||
std::string file_data;
|
||||
};
|
||||
|
||||
UsageTableTestInfo kUsageTableInfoTestData[] = {
|
||||
// usage table 0
|
||||
{a2bs_hex("5574517CCC"),
|
||||
a2bs_hex("0A18080510013A120A055574517CCC1209080112056B73696430122018268E3F"
|
||||
"384F28D04BEE00304089C000463C22E987532855390915FD02C36B5C")},
|
||||
// usage table 1
|
||||
{a2bs_hex("CA870203010001288001"),
|
||||
a2bs_hex("0A28080510013A220A0ACA8702030100012880011209080112056B7369643012"
|
||||
"09080112056B7369643112202D3638164ADC3B4276734A8EDE96C40BFE14DDB2"
|
||||
"8013337A3A1A9DFC09F34923")},
|
||||
// usage table 2
|
||||
{a2bs_hex("7A7D507618A5D3A68F05228E023082010A028201"),
|
||||
a2bs_hex("0A5A080510013A540A147A7D507618A5D3A68F05228E023082010A0282011209"
|
||||
"080112056B736964301209080112056B73696431122608021A1870726F766964"
|
||||
"65725F73657373696F6E5F746F6B656E5F3222086170705F69645F321220CB07"
|
||||
"CA08A1E76C61A5F45067176B960A9DB40D169025AF245CF1AFC66C979F47")},
|
||||
// usage table 3
|
||||
{a2bs_hex("E83A4902772DAFD2740B7748E9C3B1752D6F12859CED07E82969B4EC"),
|
||||
a2bs_hex("0A8B01080510013A84010A1CE83A4902772DAFD2740B7748E9C3B1752D6F1285"
|
||||
"9CED07E82969B4EC1209080112056B736964301209080112056B736964311226"
|
||||
"08021A1870726F76696465725F73657373696F6E5F746F6B656E5F3222086170"
|
||||
"705F69645F32122608021A1870726F76696465725F73657373696F6E5F746F6B"
|
||||
"656E5F3322086170705F69645F331220C4157F80E81C923A9F0885CE6B928D15"
|
||||
"7E1648384C3E44F04A966815EB09B260")},
|
||||
// usage table 4
|
||||
{a2bs_hex("CA870203010001288001300112800250D1F8B1ECF849B60FF93E37C4DEEF"
|
||||
"52F1CCFC047EF42300131F9C4758F4"),
|
||||
a2bs_hex("0AA701080510013AA0010A2DCA870203010001288001300112800250D1F8B1EC"
|
||||
"F849B60FF93E37C4DEEF52F1CCFC047EF42300131F9C4758F41209080112056B"
|
||||
"736964301209080112056B73696431122608021A1870726F76696465725F7365"
|
||||
"7373696F6E5F746F6B656E5F3222086170705F69645F32122608021A1870726F"
|
||||
"76696465725F73657373696F6E5F746F6B656E5F3322086170705F69645F3312"
|
||||
"09080112056B7369643412203F75C53693E7A3DC9BA5BF3E23D7EFCF3C05687A"
|
||||
"A6082E3AB78F563525981999")},
|
||||
// usage table 5
|
||||
{a2bs_hex("EC83A4902772DAFD2740B7748E9C3B1752D6F12859CED07E8882969B433E"
|
||||
"C29AC6FDBE79230B0FAED5D94CF6B829A420BBE3270323941776EE60DD6B"),
|
||||
a2bs_hex("0ADE01080510013AD7010A3CEC83A4902772DAFD2740B7748E9C3B1752D6F128"
|
||||
"59CED07E8882969B433EC29AC6FDBE79230B0FAED5D94CF6B829A420BBE32703"
|
||||
"23941776EE60DD6B1209080112056B736964301209080112056B736964311226"
|
||||
"08021A1870726F76696465725F73657373696F6E5F746F6B656E5F3222086170"
|
||||
"705F69645F32122608021A1870726F76696465725F73657373696F6E5F746F6B"
|
||||
"656E5F3322086170705F69645F331209080112056B73696434122608021A1870"
|
||||
"726F76696465725F73657373696F6E5F746F6B656E5F3522086170705F69645F"
|
||||
"3512203B35BD5C615BBA79008A7A1DA29AFA69F5CD529DFDE794A0544E423B72"
|
||||
"1CB8E8")},
|
||||
};
|
||||
|
||||
class MockFile : public File {
|
||||
public:
|
||||
MockFile() : File(NULL) {}
|
||||
@@ -1488,10 +1604,18 @@ class DeviceFilesTest : public ::testing::Test {
|
||||
}
|
||||
|
||||
size_t GetLicenseDataSize(LicenseInfo& data) {
|
||||
CdmAppParameterMap app_parameters = GetAppParameters(data.app_parameters);
|
||||
size_t app_parameters_len = 0;
|
||||
CdmAppParameterMap::const_iterator itr = app_parameters.begin();
|
||||
for (itr = app_parameters.begin(); itr != app_parameters.end(); ++itr) {
|
||||
app_parameters_len += itr->first.length();
|
||||
app_parameters_len += itr->second.length();
|
||||
}
|
||||
return sizeof(DeviceFiles::LicenseState) + data.pssh_data.size() +
|
||||
data.key_request.size() + data.key_response.size() +
|
||||
data.key_renewal_request.size() + data.key_renewal_response.size() +
|
||||
data.key_release_url.size() + 3 * sizeof(int64_t);
|
||||
data.key_release_url.size() + 3 * sizeof(int64_t) +
|
||||
app_parameters_len + data.usage_entry.size();
|
||||
}
|
||||
|
||||
CdmAppParameterMap GetAppParameters(std::string str) {
|
||||
@@ -1533,12 +1657,30 @@ class DeviceFilesHlsAttributesTest
|
||||
: public DeviceFilesTest,
|
||||
public ::testing::WithParamInterface<HlsAttributesInfo*> {};
|
||||
|
||||
class DeviceFilesUsageTableTest : public DeviceFilesTest,
|
||||
public ::testing::WithParamInterface<int> {};
|
||||
|
||||
MATCHER(IsCreateFileFlagSet, "") { return FileSystem::kCreate & arg; }
|
||||
MATCHER_P(IsStrEq, str, "") {
|
||||
// Estimating the length of data. We can have gmock provide length
|
||||
// as well as pointer to data but that will introduce a dependency on tr1
|
||||
return memcmp(arg, str.c_str(), str.size()) == 0;
|
||||
}
|
||||
MATCHER_P(ContainsAllElementsInVector, str_vector, "") {
|
||||
// Estimating the length of data. We can have gmock provide length
|
||||
// as well as pointer to data but that will introduce a dependency on tr1
|
||||
size_t str_length = 0;
|
||||
for (size_t i = 0; i < str_vector.size(); ++i) {
|
||||
str_length += str_vector[i].size();
|
||||
}
|
||||
std::string data(arg, str_length + kProtobufEstimatedOverhead);
|
||||
bool all_entries_found = true;
|
||||
for (size_t i = 0; i < str_vector.size(); ++i) {
|
||||
if (data.find(str_vector[i]) == std::string::npos)
|
||||
all_entries_found = false;
|
||||
}
|
||||
return all_entries_found;
|
||||
}
|
||||
MATCHER_P2(Contains, str1, size, "") {
|
||||
// Estimating the length of data. We can have gmock provide length
|
||||
// as well as pointer to data but that will introduce a dependency on tr1
|
||||
@@ -1562,30 +1704,19 @@ MATCHER_P4(Contains, str1, str2, str3, size, "") {
|
||||
data.find(str2) != std::string::npos &&
|
||||
data.find(str3) != std::string::npos);
|
||||
}
|
||||
MATCHER_P5(Contains, str1, str2, str3, str4, size, "") {
|
||||
MATCHER_P6(Contains, str1, str2, str3, str4, str5, size, "") {
|
||||
// Estimating the length of data. We can have gmock provide length
|
||||
// as well as pointer to data but that will introduce a dependency on tr1
|
||||
std::string data(arg, size + str1.size() + str2.size() + str3.size() +
|
||||
str4.size() + kProtobufEstimatedOverhead);
|
||||
return (data.find(str1) != std::string::npos &&
|
||||
data.find(str2) != std::string::npos &&
|
||||
data.find(str3) != std::string::npos &&
|
||||
data.find(str4) != std::string::npos);
|
||||
}
|
||||
MATCHER_P6(Contains, str1, str2, str3, str4, str5, str6, "") {
|
||||
// Estimating the length of data. We can have gmock provide length
|
||||
// as well as pointer to data but that will introduce a dependency on tr1
|
||||
std::string data(arg, str1.size() + str2.size() + str3.size() + str4.size() +
|
||||
str5.size() + str6.size() +
|
||||
str4.size() + str5.size() +
|
||||
kProtobufEstimatedOverhead);
|
||||
return (data.find(str1) != std::string::npos &&
|
||||
data.find(str2) != std::string::npos &&
|
||||
data.find(str3) != std::string::npos &&
|
||||
data.find(str4) != std::string::npos &&
|
||||
data.find(str5) != std::string::npos &&
|
||||
data.find(str6) != std::string::npos);
|
||||
data.find(str5) != std::string::npos);
|
||||
}
|
||||
MATCHER_P7(Contains, str1, str2, str3, str4, str5, str6, map7, "") {
|
||||
MATCHER_P8(Contains, str1, str2, str3, str4, str5, str6, map7, str8, "") {
|
||||
// Estimating the length of data. We can have gmock provide length
|
||||
// as well as pointer to data but that will introduce a dependency on tr1
|
||||
size_t map7_len = 0;
|
||||
@@ -1595,7 +1726,7 @@ MATCHER_P7(Contains, str1, str2, str3, str4, str5, str6, map7, "") {
|
||||
map7_len += itr->second.length();
|
||||
}
|
||||
std::string data(arg, str1.size() + str2.size() + str3.size() + str4.size() +
|
||||
str5.size() + str6.size() + map7_len +
|
||||
str5.size() + str6.size() + map7_len + str8.size() +
|
||||
kProtobufEstimatedOverhead);
|
||||
bool map7_entries_present = true;
|
||||
for (itr = map7.begin(); itr != map7.end(); ++itr) {
|
||||
@@ -1608,7 +1739,8 @@ MATCHER_P7(Contains, str1, str2, str3, str4, str5, str6, map7, "") {
|
||||
data.find(str3) != std::string::npos &&
|
||||
data.find(str4) != std::string::npos &&
|
||||
data.find(str5) != std::string::npos &&
|
||||
data.find(str6) != std::string::npos && map7_entries_present);
|
||||
data.find(str6) != std::string::npos && map7_entries_present &&
|
||||
data.find(str8) != std::string::npos);
|
||||
}
|
||||
|
||||
TEST_F(DeviceCertificateStoreTest, StoreCertificate) {
|
||||
@@ -1731,7 +1863,8 @@ TEST_P(DeviceFilesStoreTest, StoreLicense) {
|
||||
license_test_data[license_num].key_renewal_request,
|
||||
license_test_data[license_num].key_renewal_response,
|
||||
license_test_data[license_num].key_release_url,
|
||||
app_parameters),
|
||||
app_parameters,
|
||||
license_test_data[license_num].usage_entry),
|
||||
Gt(GetLicenseDataSize(license_test_data[license_num]))))
|
||||
.WillOnce(ReturnArg<1>());
|
||||
EXPECT_CALL(file, Close()).Times(1);
|
||||
@@ -1750,7 +1883,8 @@ TEST_P(DeviceFilesStoreTest, StoreLicense) {
|
||||
license_test_data[license_num].key_release_url,
|
||||
license_test_data[license_num].playback_start_time,
|
||||
license_test_data[license_num].last_playback_time,
|
||||
license_test_data[license_num].grace_period_end_time, app_parameters));
|
||||
license_test_data[license_num].grace_period_end_time, app_parameters,
|
||||
license_test_data[license_num].usage_entry));
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(StoreLicense, DeviceFilesStoreTest, ::testing::Bool());
|
||||
@@ -1776,7 +1910,8 @@ TEST_F(DeviceFilesTest, StoreLicenses) {
|
||||
license_test_data[i].key_renewal_request,
|
||||
license_test_data[i].key_renewal_response,
|
||||
license_test_data[i].key_release_url,
|
||||
app_parameters),
|
||||
app_parameters,
|
||||
license_test_data[i].usage_entry),
|
||||
Gt(GetLicenseDataSize(license_test_data[i]))))
|
||||
.WillOnce(ReturnArg<1>());
|
||||
}
|
||||
@@ -1798,7 +1933,8 @@ TEST_F(DeviceFilesTest, StoreLicenses) {
|
||||
license_test_data[i].key_release_url,
|
||||
license_test_data[i].playback_start_time,
|
||||
license_test_data[i].last_playback_time,
|
||||
license_test_data[i].grace_period_end_time, app_parameters));
|
||||
license_test_data[i].grace_period_end_time, app_parameters,
|
||||
license_test_data[i].usage_entry));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1839,6 +1975,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
|
||||
int64_t grace_period_end_time;
|
||||
std::string release_server_url;
|
||||
CdmAppParameterMap app_parameters;
|
||||
std::string usage_entry;
|
||||
|
||||
for (size_t i = 0; i < kNumberOfLicenses; i++) {
|
||||
DeviceFiles::LicenseState license_state;
|
||||
@@ -1846,7 +1983,8 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
|
||||
license_test_data[i].key_set_id, &license_state, &pssh_data,
|
||||
&key_request, &key_response, &key_renewal_request,
|
||||
&key_renewal_response, &release_server_url, &playback_start_time,
|
||||
&last_playback_time, &grace_period_end_time, &app_parameters));
|
||||
&last_playback_time, &grace_period_end_time, &app_parameters,
|
||||
&usage_entry));
|
||||
EXPECT_EQ(license_test_data[i].license_state, license_state);
|
||||
EXPECT_EQ(license_test_data[i].pssh_data, pssh_data);
|
||||
EXPECT_EQ(license_test_data[i].key_request, key_request);
|
||||
@@ -1857,6 +1995,7 @@ TEST_F(DeviceFilesTest, RetrieveLicenses) {
|
||||
EXPECT_EQ(license_test_data[i].last_playback_time, last_playback_time);
|
||||
EXPECT_EQ(license_test_data[i].grace_period_end_time,
|
||||
grace_period_end_time);
|
||||
EXPECT_EQ(license_test_data[i].usage_entry, usage_entry);
|
||||
|
||||
std::map<std::string, std::string>::iterator itr;
|
||||
for (itr = app_parameters.begin(); itr != app_parameters.end(); ++itr) {
|
||||
@@ -1904,12 +2043,13 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) {
|
||||
int64_t grace_period_end_time;
|
||||
std::string release_server_url;
|
||||
CdmAppParameterMap app_parameters;
|
||||
std::string usage_entry;
|
||||
|
||||
EXPECT_TRUE(device_files.RetrieveLicense(
|
||||
test_data->key_set_id, &license_state, &pssh_data, &key_request,
|
||||
&key_response, &key_renewal_request, &key_renewal_response,
|
||||
&release_server_url, &playback_start_time, &last_playback_time,
|
||||
&grace_period_end_time, &app_parameters));
|
||||
&grace_period_end_time, &app_parameters, &usage_entry));
|
||||
EXPECT_EQ(test_data->license_state, license_state);
|
||||
EXPECT_EQ(test_data->pssh_data, pssh_data);
|
||||
EXPECT_EQ(test_data->key_request, key_request);
|
||||
@@ -1920,6 +2060,7 @@ TEST_F(DeviceFilesTest, AppParametersBackwardCompatibility) {
|
||||
EXPECT_EQ(test_data->last_playback_time, last_playback_time);
|
||||
EXPECT_EQ(test_data->grace_period_end_time, grace_period_end_time);
|
||||
EXPECT_EQ(0u, app_parameters.size());
|
||||
EXPECT_EQ(test_data->usage_entry, usage_entry);
|
||||
}
|
||||
|
||||
TEST_F(DeviceFilesTest, UpdateLicenseState) {
|
||||
@@ -1955,7 +2096,8 @@ TEST_F(DeviceFilesTest, UpdateLicenseState) {
|
||||
license_update_test_data[0].playback_start_time,
|
||||
license_update_test_data[0].last_playback_time,
|
||||
license_update_test_data[0].grace_period_end_time,
|
||||
GetAppParameters(license_test_data[0].app_parameters)));
|
||||
GetAppParameters(license_test_data[0].app_parameters),
|
||||
license_update_test_data[0].usage_entry));
|
||||
|
||||
EXPECT_TRUE(device_files.StoreLicense(
|
||||
license_update_test_data[0].key_set_id,
|
||||
@@ -1969,7 +2111,8 @@ TEST_F(DeviceFilesTest, UpdateLicenseState) {
|
||||
license_update_test_data[0].playback_start_time,
|
||||
license_update_test_data[0].last_playback_time,
|
||||
license_update_test_data[0].grace_period_end_time,
|
||||
GetAppParameters(license_test_data[0].app_parameters)));
|
||||
GetAppParameters(license_test_data[0].app_parameters),
|
||||
license_update_test_data[0].usage_entry));
|
||||
}
|
||||
|
||||
TEST_F(DeviceFilesTest, DeleteLicense) {
|
||||
@@ -2009,12 +2152,13 @@ TEST_F(DeviceFilesTest, DeleteLicense) {
|
||||
std::string release_server_url;
|
||||
int64_t playback_start_time, last_playback_time, grace_period_end_time;
|
||||
CdmAppParameterMap app_parameters;
|
||||
std::string usage_entry;
|
||||
|
||||
EXPECT_TRUE(device_files.RetrieveLicense(
|
||||
license_test_data[0].key_set_id, &license_state, &pssh_data, &key_request,
|
||||
&key_response, &key_renewal_request, &key_renewal_response,
|
||||
&release_server_url, &playback_start_time, &last_playback_time,
|
||||
&grace_period_end_time, &app_parameters));
|
||||
&grace_period_end_time, &app_parameters, &usage_entry));
|
||||
EXPECT_EQ(license_test_data[0].license_state, license_state);
|
||||
EXPECT_EQ(license_test_data[0].pssh_data, pssh_data);
|
||||
EXPECT_EQ(license_test_data[0].key_request, key_request);
|
||||
@@ -2031,6 +2175,7 @@ TEST_F(DeviceFilesTest, DeleteLicense) {
|
||||
EXPECT_NE(license_test_data[0].app_parameters.find(itr->second),
|
||||
std::string::npos);
|
||||
}
|
||||
EXPECT_EQ(license_test_data[0].usage_entry, usage_entry);
|
||||
|
||||
EXPECT_TRUE(device_files.DeleteLicense(license_test_data[0].key_set_id));
|
||||
EXPECT_FALSE(device_files.LicenseExists(license_test_data[0].key_set_id));
|
||||
@@ -2112,6 +2257,7 @@ TEST_P(DeviceFilesUsageInfoTest, Store) {
|
||||
std::string license_request(GenerateRandomData(kLicenseRequestLen));
|
||||
std::string license(GenerateRandomData(kLicenseLen));
|
||||
std::string key_set_id(GenerateRandomData(kKeySetIdLen));
|
||||
std::string usage_entry(GenerateRandomData(kUsageEntryLen));
|
||||
std::string path =
|
||||
device_base_path_ + DeviceFiles::GetUsageInfoFileName(app_id);
|
||||
|
||||
@@ -2140,19 +2286,17 @@ TEST_P(DeviceFilesUsageInfoTest, Store) {
|
||||
EXPECT_CALL(file, Close());
|
||||
}
|
||||
|
||||
EXPECT_CALL(file,
|
||||
Write(Contains(pst, license_request, license, key_set_id,
|
||||
data.size()),
|
||||
Gt(pst.size() + license_request.size() + license.size() +
|
||||
key_set_id.size())))
|
||||
EXPECT_CALL(file, Write(Contains(pst, license_request, license, key_set_id,
|
||||
usage_entry, data.size()),
|
||||
Gt(pst.size() + license_request.size() +
|
||||
license.size() + key_set_id.size())))
|
||||
.WillOnce(ReturnArg<1>());
|
||||
|
||||
DeviceFiles device_files(&file_system);
|
||||
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
|
||||
|
||||
ASSERT_TRUE(
|
||||
device_files.StoreUsageInfo(pst, license_request, license, app_id,
|
||||
key_set_id));
|
||||
ASSERT_TRUE(device_files.StoreUsageInfo(pst, license_request, license, app_id,
|
||||
key_set_id, usage_entry));
|
||||
}
|
||||
|
||||
TEST_P(DeviceFilesUsageInfoTest, Delete) {
|
||||
@@ -2323,4 +2467,95 @@ INSTANTIATE_TEST_CASE_P(HlsAttributes, DeviceFilesHlsAttributesTest,
|
||||
::testing::Range(&kHlsAttributesTestData[0],
|
||||
&kHlsAttributesTestData[2]));
|
||||
|
||||
TEST_P(DeviceFilesUsageTableTest, Store) {
|
||||
MockFileSystem file_system;
|
||||
MockFile file;
|
||||
int index = GetParam();
|
||||
|
||||
size_t entry_data_length = 0;
|
||||
std::vector<std::string> entry_data;
|
||||
std::vector<DeviceFiles::UsageEntryInfo> usage_entry_info;
|
||||
usage_entry_info.resize(index + 1);
|
||||
for (int i = 0; i <= index; ++i) {
|
||||
usage_entry_info[i] = kUsageEntriesTestData[i];
|
||||
if (kUsageEntriesTestData[i].storage_type == DeviceFiles::kStorageLicense) {
|
||||
entry_data.push_back(kUsageEntriesTestData[i].key_set_id);
|
||||
entry_data_length += kUsageEntriesTestData[i].key_set_id.size();
|
||||
} else {
|
||||
entry_data.push_back(kUsageEntriesTestData[i].provider_session_token);
|
||||
entry_data.push_back(kUsageEntriesTestData[i].app_id);
|
||||
entry_data_length +=
|
||||
kUsageEntriesTestData[i].provider_session_token.size() +
|
||||
kUsageEntriesTestData[i].app_id.size();
|
||||
}
|
||||
}
|
||||
entry_data.push_back(kUsageTableInfoTestData[index].usage_table_header);
|
||||
entry_data_length += kUsageTableInfoTestData[index].usage_table_header.size();
|
||||
|
||||
std::string path = device_base_path_ + DeviceFiles::GetUsageTableFileName();
|
||||
|
||||
EXPECT_CALL(file_system, Exists(StrEq(path))).WillRepeatedly(Return(true));
|
||||
EXPECT_CALL(file_system, Open(StrEq(path), _)).WillOnce(Return(&file));
|
||||
EXPECT_CALL(file, Write(ContainsAllElementsInVector(entry_data),
|
||||
Gt(entry_data_length)))
|
||||
.WillOnce(ReturnArg<1>());
|
||||
EXPECT_CALL(file, Read(_, _)).Times(0);
|
||||
EXPECT_CALL(file, Close()).Times(1);
|
||||
|
||||
DeviceFiles device_files(&file_system);
|
||||
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
|
||||
ASSERT_TRUE(device_files.StoreUsageTableInfo(
|
||||
kUsageTableInfoTestData[index].usage_table_header, usage_entry_info));
|
||||
}
|
||||
|
||||
TEST_P(DeviceFilesUsageTableTest, Read) {
|
||||
MockFileSystem file_system;
|
||||
MockFile file;
|
||||
int index = GetParam();
|
||||
|
||||
std::string path = device_base_path_ + DeviceFiles::GetUsageTableFileName();
|
||||
|
||||
const std::string& file_data = kUsageTableInfoTestData[index].file_data;
|
||||
EXPECT_CALL(file_system, Exists(StrEq(path))).WillRepeatedly(Return(true));
|
||||
EXPECT_CALL(file_system, FileSize(StrEq(path)))
|
||||
.WillRepeatedly(Return(file_data.size()));
|
||||
EXPECT_CALL(file_system, Open(StrEq(path), _)).WillOnce(Return(&file));
|
||||
EXPECT_CALL(file, Read(NotNull(), Eq(file_data.size())))
|
||||
.WillOnce(DoAll(SetArrayArgument<0>(file_data.begin(), file_data.end()),
|
||||
Return(file_data.size())));
|
||||
EXPECT_CALL(file, Close()).Times(1);
|
||||
|
||||
EXPECT_CALL(file, Write(_, _)).Times(0);
|
||||
|
||||
DeviceFiles device_files(&file_system);
|
||||
EXPECT_TRUE(device_files.Init(kSecurityLevelL1));
|
||||
|
||||
std::vector<DeviceFiles::UsageEntryInfo> usage_entry_info;
|
||||
std::string usage_table_header;
|
||||
ASSERT_TRUE(device_files.RetrieveUsageTableInfo(&usage_table_header,
|
||||
&usage_entry_info));
|
||||
EXPECT_EQ(kUsageTableInfoTestData[index].usage_table_header,
|
||||
usage_table_header);
|
||||
EXPECT_EQ(index + 1, usage_entry_info.size());
|
||||
|
||||
for (int i = 0; i <= index; ++i) {
|
||||
EXPECT_EQ(kUsageEntriesTestData[i].storage_type,
|
||||
usage_entry_info[i].storage_type);
|
||||
if (usage_entry_info[i].storage_type == DeviceFiles::kStorageLicense) {
|
||||
EXPECT_EQ(kUsageEntriesTestData[i].key_set_id,
|
||||
usage_entry_info[i].key_set_id);
|
||||
EXPECT_EQ(kEmptyString, usage_entry_info[i].provider_session_token);
|
||||
EXPECT_EQ(kEmptyString, usage_entry_info[i].app_id);
|
||||
} else {
|
||||
EXPECT_EQ(kEmptyString, usage_entry_info[i].key_set_id);
|
||||
EXPECT_EQ(kUsageEntriesTestData[i].provider_session_token,
|
||||
usage_entry_info[i].provider_session_token);
|
||||
EXPECT_EQ(kUsageEntriesTestData[i].app_id, usage_entry_info[i].app_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(UsageInfo, DeviceFilesUsageTableTest,
|
||||
::testing::Range(0, 6));
|
||||
|
||||
} // namespace wvcdm
|
||||
|
||||
Reference in New Issue
Block a user