12 #include "drmTestUtils.h"
13 #include "aampMocks.h"
15 #include "CppUTest/TestHarness.h"
17 TEST_GROUP(AampDrmHelperTests)
19 struct CreateHelperTestData
24 std::string keyFormat;
25 std::string systemUUID;
26 std::vector<uint8_t> expectedKeyPayload;
31 const std::string& uri =
"",
32 const std::string& keyFormat =
"",
33 const std::string& systemUUID =
"",
34 const std::string& initData =
"")
59 TEST(AampDrmHelperTests, TestDrmIds)
61 std::vector<std::string> expectedIds({
62 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
63 "1077efec-c0b2-4d02-ace3-3c1e52e2fb4b",
64 "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
65 "9a04f079-9840-4286-ab92-e65be0885f95"
67 std::sort(expectedIds.begin(), expectedIds.end());
69 std::vector<std::string> actualIds;
71 std::sort(actualIds.begin(), actualIds.end());
73 CHECK_EQUAL(expectedIds, actualIds);
76 TEST(AampDrmHelperTests, TestCreateVgdrmHelper)
78 const std::vector<CreateHelperTestData> testData = {
82 "91701500000810367b131dd025ab0a7bd8d20c1314151600",
83 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
90 "91701500000810367b131dd025ab0a7bd8d20c1314151600",
91 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
98 "81701500000810367b131dd025ab0a7bd8d20c1314151600",
99 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
101 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c, 0x13, 0x14, 0x15, 0x16}},
106 "81701500000810367b131dd025ab0a7bd8d20c1314151600",
107 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
109 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c, 0x13, 0x14, 0x15, 0x16}},
114 "81701500000810367b131dd025ab0a7bd8d20c1314151600",
117 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c, 0x13, 0x14, 0x15, 0x16}},
122 "8170110000080c367b131dd025ab0a7bd8d20c00",
125 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c}},
130 "81701500000810367B131DD025AB0A7BD8D20C1314151600",
133 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c, 0x13, 0x14, 0x15, 0x16}},
138 "8170110000080C367B131DD025AB0A7BD8D20C00",
141 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c}},
146 "81701500000811367b131dd025ab0a7bd8d20c1314151600",
147 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
149 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c, 0x13, 0x14, 0x15, 0x16, 0x0}},
155 "81701500000812367b131dd025ab0a7bd8d20c1314151600",
156 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
163 "8170110000080d367b131dd025ab0a7bd8d20c00",
164 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
166 {0x36, 0x7b, 0x13, 0x1d, 0xd0, 0x25, 0xab, 0x0a, 0x7b, 0xd8, 0xd2, 0x0c, 0x0}},
172 "8170110000080e367b131dd025ab0a7bd8d20c00",
173 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
187 for (
auto& test_data: testData)
189 std::vector<uint8_t> keyID;
191 drmInfo = createDrmInfo(test_data.method, test_data.mediaFormat, test_data.uri, test_data.keyFormat, test_data.systemUUID);
196 CHECK_TEXT(vgdrmHelper != NULL,
"VGDRM helper creation failed");
197 CHECK_EQUAL(
"net.vgdrm", vgdrmHelper->ocdmSystemId());
198 CHECK_EQUAL(
true, vgdrmHelper->isClearDecrypt());
199 CHECK_EQUAL(
true, vgdrmHelper->isHdcp22Required());
200 CHECK_EQUAL(4, vgdrmHelper->getDrmCodecType());
201 CHECK_EQUAL(
true, vgdrmHelper->isExternalLicense());
202 CHECK_EQUAL(10000U, vgdrmHelper->licenseGenerateTimeout());
203 CHECK_EQUAL(10000U, vgdrmHelper->keyProcessTimeout());
205 vgdrmHelper->getKey(keyID);
207 if (test_data.expectedKeyPayload.size() != 0) {
208 std::shared_ptr<std::vector<uint8_t>> keyData;
209 CHECK_EQUAL(test_data.expectedKeyPayload , keyID);
214 TEST(AampDrmHelperTests, TestCreateVgdrmHelperNegative)
220 const std::vector<CreateHelperTestData> testData = {
224 "8170110000080CZ67B331DD025AB0A7BD8D20C00",
232 "8170110000080C367B331DD025AZ0A7BD8D20C00",
240 "BAD0110000080c367b131dd025ab0a7bd8d20c00",
241 "BAD129D3-575B-4F1A-9CBA-3223846CF7C3",
248 "BAD0110000080c367b131dd025ab0a7bd8d20c00",
249 "a68129d3-575b-4f1a-9cba-3223846cf7c3",
256 "BAD0110000080c367b131dd025ab0a7bd8d20c00",
264 "8170110000080c367b131dd025ab0a7bd8d20c0",
272 "8170110000080c367b131dd025ab0a7bd8d20c000",
279 for (
auto& test_data: testData)
281 drmInfo = createDrmInfo(test_data.method, test_data.mediaFormat, test_data.uri, test_data.keyFormat, test_data.systemUUID);
286 CHECK(vgdrmHelper == NULL);
290 TEST(AampDrmHelperTests, TestVgdrmHelperInitDataCreation)
292 std::vector<DrmInfo> drmInfoList;
296 "8170110000080c367b131dd025ab0a7bd8d20c00",
297 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
299 "somebase64initdata"));
304 "8170110000080c367b131dd025ab0a7bd8d20c00",
305 "A68129D3-575B-4F1A-9CBA-3223846CF7C3",
307 "+/=somebase64initdata+/="));
309 for (
const DrmInfo& drmInfo : drmInfoList)
312 CHECK_TEXT(vgdrmHelper != NULL,
"VGDRM helper creation failed");
314 std::vector<uint8_t> initData;
315 vgdrmHelper->createInitData(initData);
318 cJSON *initDataObj = jsonWrapper.getJsonObj();
319 CHECK_TEXT(initDataObj != NULL,
"Invalid JSON init data");
321 CHECK_JSON_STR_VALUE(initDataObj,
"initData", drmInfo.
initData.c_str());
322 CHECK_JSON_STR_VALUE(initDataObj,
"uri", drmInfo.
keyURI.c_str());
325 POINTERS_EQUAL(NULL, cJSON_GetObjectItem(initDataObj,
"pssh"));
329 TEST(AampDrmHelperTests, TestVgdrmHelperGenerateLicenseRequest)
332 drmInfo.
manifestURL =
"http://example.com/hls/playlist.m3u8";
338 clearKeyHelper->generateLicenseRequest(challengeInfo, licenseRequest);
341 CHECK_EQUAL(
"", licenseRequest.url);
342 CHECK_EQUAL(
"", licenseRequest.payload);
345 TEST(AampDrmHelperTests, TestCreateClearKeyHelper)
347 const std::vector<CreateHelperTestData> testData = {
352 "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b",
353 "1077efec-c0b2-4d02-ace3-3c1e52e2fb4b",
360 "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b",
361 "1077efec-c0b2-4d02-ace3-3c1e52e2fb4b",
369 "1077efec-c0b2-4d02-ace3-3c1e52e2fb4b",
375 for (
auto& test_data: testData)
377 drmInfo = createDrmInfo(
eMETHOD_AES_128, test_data.mediaFormat, test_data.uri, test_data.keyFormat, test_data.systemUUID);
382 CHECK_TEXT(clearKeyHelper != NULL,
"ClearKey helper creation failed");
383 CHECK_EQUAL(
"org.w3.clearkey", clearKeyHelper->ocdmSystemId());
384 CHECK_EQUAL(
true, clearKeyHelper->isClearDecrypt());
385 CHECK_EQUAL(
false, clearKeyHelper->isHdcp22Required());
386 CHECK_EQUAL(0, clearKeyHelper->getDrmCodecType());
387 CHECK_EQUAL(
false, clearKeyHelper->isExternalLicense());
388 CHECK_EQUAL(5000U, clearKeyHelper->licenseGenerateTimeout());
389 CHECK_EQUAL(5000U, clearKeyHelper->keyProcessTimeout());
391 if (test_data.expectedKeyPayload.size() != 0)
393 std::vector<uint8_t> keyID;
394 clearKeyHelper->getKey(keyID);
395 CHECK_EQUAL(test_data.expectedKeyPayload , keyID);
400 TEST(AampDrmHelperTests, TestClearKeyHelperHlsInitDataCreation)
406 std::vector<uint8_t> initData;
407 clearKeyHelper->createInitData(initData);
410 cJSON *initDataObj = jsonWrapper.getJsonObj();
411 CHECK_TEXT(initDataObj != NULL,
"Invalid JSON init data");
414 cJSON *kidsArray = cJSON_GetObjectItem(initDataObj,
"kids");
415 CHECK_TEXT(kidsArray != NULL,
"Missing kids in JSON init data");
416 CHECK_EQUAL(1, cJSON_GetArraySize(kidsArray));
417 cJSON *kids0 = cJSON_GetArrayItem(kidsArray, 0);
418 STRCMP_EQUAL(
"1", cJSON_GetStringValue(kids0));
421 TEST(AampDrmHelperTests, TestClearKeyHelperParsePssh)
429 std::vector<uint8_t> psshData = {
430 0x00, 0x00, 0x00, 0x34, 0x70, 0x73, 0x73, 0x68, 0x01, 0x00, 0x00, 0x00, 0x10, 0x77, 0xef, 0xec,
431 0xc0, 0xb2, 0x4d, 0x02, 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 0x00, 0x00, 0x00, 0x01,
432 0xfe, 0xed, 0xf0, 0x0d, 0xee, 0xde, 0xad, 0xbe, 0xef, 0xf0, 0xba, 0xad, 0xf0, 0x0d, 0xd0, 0x0d,
433 0x00, 0x00, 0x00, 0x00};
435 CHECK_TRUE(clearKeyHelper->parsePssh(psshData.data(), psshData.size()));
437 std::vector<uint8_t> initData;
438 clearKeyHelper->createInitData(initData);
439 CHECK_EQUAL_TEXT(psshData, initData,
"Init data does not match PSSH data");
442 std::vector<uint8_t> keyID;
443 const std::vector<uint8_t> expectedKeyID = {0xfe, 0xed, 0xf0, 0x0d, 0xee, 0xde, 0xad, 0xbe, 0xef, 0xf0, 0xba, 0xad, 0xf0, 0x0d, 0xd0, 0x0d};
444 clearKeyHelper->getKey(keyID);
445 CHECK_EQUAL(expectedKeyID, keyID);
448 TEST(AampDrmHelperTests, TestClearKeyHelperGenerateLicenseRequest)
451 drmInfo.
manifestURL =
"http://stream.example/hls/playlist.m3u8";
456 challengeInfo.
url =
"http://challengeinfourl.example";
461 clearKeyHelper->generateLicenseRequest(challengeInfo, licenseRequest);
463 CHECK_EQUAL(
"http://stream.example/hls/file.key", licenseRequest.url);
464 CHECK_EQUAL(
"", licenseRequest.payload);
468 const std::string fixedCkLicenseUrl =
"http://cklicenseserver.example";
469 licenseRequest.url = fixedCkLicenseUrl;
470 clearKeyHelper->generateLicenseRequest(challengeInfo, licenseRequest);
471 CHECK_EQUAL(fixedCkLicenseUrl, licenseRequest.url);
475 licenseRequest.url.clear();
478 clearKeyHelperNoKeyUri->generateLicenseRequest(challengeInfo, licenseRequest);
479 CHECK_EQUAL(challengeInfo.
url, licenseRequest.url);
482 TEST(AampDrmHelperTests, TestClearKeyHelperTransformHlsLicenseResponse)
484 struct TransformLicenseResponseTestData
486 std::vector<uint8_t> keyResponse;
487 std::string expectedEncodedKey;
494 const std::vector<TransformLicenseResponseTestData> testData {
500 {{0x00, 0x10, 0x83, 0x10, 0x51, 0x87, 0x20, 0x92, 0x8b, 0x30, 0xd3, 0x8f, 0x41, 0x14,
501 0x93, 0x51, 0x55, 0x97, 0x61, 0x96, 0x9b, 0x71, 0xd7, 0x9f, 0x82, 0x18, 0xa3, 0x92,
502 0x59, 0xa7, 0xa2, 0x9a, 0xab, 0xb2, 0xdb, 0xaf, 0xc3, 0x1c, 0xb3, 0xd3, 0x5d, 0xb7,
503 0xe3, 0x9e, 0xbb, 0xf3, 0xdf, 0xbf}, {
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"}}
506 for (
auto& testCase : testData)
508 std::shared_ptr<DrmData> drmData = std::make_shared<DrmData>((
unsigned char *)&testCase.keyResponse[0], testCase.keyResponse.size());
509 clearKeyHelper->transformLicenseResponse(drmData);
511 TestUtilJsonWrapper jsonWrapper((
const char*)drmData->getData().c_str(), drmData->getDataLength());
512 cJSON *responseObj = jsonWrapper.getJsonObj();
513 CHECK_TEXT(responseObj != NULL,
"Invalid license response data");
516 cJSON *keysArray = cJSON_GetObjectItem(responseObj,
"keys");
517 CHECK_TEXT(keysArray != NULL,
"Missing keys in JSON response data");
518 CHECK_EQUAL(1, cJSON_GetArraySize(keysArray));
519 cJSON *keys0Obj = cJSON_GetArrayItem(keysArray, 0);
520 CHECK_JSON_STR_VALUE(keys0Obj,
"alg",
"cbc");
521 CHECK_JSON_STR_VALUE(keys0Obj,
"k", testCase.expectedEncodedKey.c_str());
522 CHECK_JSON_STR_VALUE(keys0Obj,
"kid",
"MQ");
526 TEST(AampDrmHelperTests, TestTransformDashLicenseResponse)
530 std::vector<DrmInfo> drmInfoList;
536 drmInfoList.push_back(createDrmInfo(eMETHOD_NONE,
eMEDIAFORMAT_DASH,
"",
"",
"9a04f079-9840-4286-ab92-e65be0885f95"));
538 for (
auto& drmInfo : drmInfoList)
542 unsigned char licenseResponse[] = {
'D',
'A',
'S',
'H',
'L',
'I',
'C'};
543 std::shared_ptr<DrmData> drmData = std::make_shared<DrmData>(licenseResponse,
sizeof(licenseResponse));
545 clearKeyHelper->transformLicenseResponse(drmData);
546 CHECK_EQUAL_TEXT(
sizeof(licenseResponse), drmData->getDataLength(),
"Unexpected change in license response size");
547 MEMCMP_EQUAL_TEXT(licenseResponse, drmData->getData().c_str(),
sizeof(licenseResponse),
"Unexpected transformation of license response");
551 TEST(AampDrmHelperTests, TestCreatePlayReadyHelper)
553 const std::vector<CreateHelperTestData> testData = {
559 "9a04f079-9840-4286-ab92-e65be0885f95",
567 "9a04f079-9840-4286-ab92-e65be0885f95",
574 "com.microsoft.playready",
580 for (
auto& test_data: testData)
582 drmInfo = createDrmInfo(test_data.method, test_data.mediaFormat, test_data.uri, test_data.keyFormat, test_data.systemUUID);
587 CHECK_TEXT(playReadyHelper != NULL,
"PlayReady helper creation failed");
588 CHECK_EQUAL(
"com.microsoft.playready", playReadyHelper->ocdmSystemId());
589 CHECK_EQUAL(
false, playReadyHelper->isClearDecrypt());
591 CHECK_EQUAL(
false, playReadyHelper->isExternalLicense());
592 CHECK_EQUAL(5000U, playReadyHelper->licenseGenerateTimeout());
593 CHECK_EQUAL(5000U, playReadyHelper->keyProcessTimeout());
599 TEST(AampDrmHelperTests, TestCreatePlayReadyHelperNegative)
601 const std::vector<CreateHelperTestData> testData = {
607 "9a04f079-9840-4286-ab92-e65be0885f95",
612 for (
auto& test_data: testData)
614 drmInfo = createDrmInfo(test_data.method, test_data.mediaFormat, test_data.uri, test_data.keyFormat, test_data.systemUUID);
619 CHECK(playReadyHelper == NULL);
623 TEST(AampDrmHelperTests, TestWidevineHelperParsePsshDrmMetaData)
627 std::vector<uint8_t> psshData = {
628 0x00, 0x00, 0x00, 0x34, 0x70, 0x73, 0x73, 0x68, 0x00, 0x00, 0x00, 0x00, 0x10, 0x77, 0xef, 0xec,
629 0xc0, 0xb2, 0x4d, 0x02, 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 0x00, 0x00, 0x00, 0x12,
630 0x12, 0x10, 0xfe, 0xed, 0xf0, 0x0d, 0xee, 0xde, 0xad, 0xbe, 0xef, 0xf0, 0xba, 0xad, 0xf0, 0x0d,
631 0xd0, 0x0d, 0x00, 0x00, 0x00, 0x00};
639 CHECK_TEXT(widevineHelper != NULL,
"Widevine helper creation failed");
641 CHECK_TRUE(widevineHelper->parsePssh(psshData.data(), psshData.size()));
643 std::vector<uint8_t> initData;
644 widevineHelper->createInitData(initData);
645 CHECK_EQUAL_TEXT(psshData, initData,
"Init data does not match PSSH data");
648 std::vector<uint8_t> keyID;
649 const std::vector<uint8_t> expectedKeyID = {0xfe, 0xed, 0xf0, 0x0d, 0xee, 0xde, 0xad, 0xbe, 0xef, 0xf0, 0xba, 0xad, 0xf0, 0x0d, 0xd0, 0x0d};
650 widevineHelper->getKey(keyID);
651 CHECK_EQUAL(expectedKeyID, keyID);
653 std::string contentMetadata;
654 contentMetadata = widevineHelper->getDrmMetaData();
655 CHECK_EQUAL(
"", contentMetadata);
657 std::string metaData(
"content meta data");
658 widevineHelper->setDrmMetaData(metaData);
659 contentMetadata = widevineHelper->getDrmMetaData();
660 CHECK_EQUAL(metaData, contentMetadata);
664 TEST(AampDrmHelperTests, TestCreateWidevineHelper)
666 const std::vector<CreateHelperTestData> testData = {
671 "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
678 "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
685 "com.widevine.alpha",
691 for (
auto& test_data: testData)
693 drmInfo = createDrmInfo(test_data.method, test_data.mediaFormat, test_data.uri, test_data.keyFormat, test_data.systemUUID);
698 CHECK_TEXT(widevineHelper != NULL,
"Widevine helper creation failed");
699 CHECK_EQUAL(
"com.widevine.alpha", widevineHelper->ocdmSystemId());
700 CHECK_EQUAL(
false, widevineHelper->isClearDecrypt());
701 CHECK_EQUAL(
false, widevineHelper->isHdcp22Required());
702 CHECK_EQUAL(
eDRM_WideVine, widevineHelper->getDrmCodecType());
703 CHECK_EQUAL(
false, widevineHelper->isExternalLicense());
704 CHECK_EQUAL(5000U, widevineHelper->licenseGenerateTimeout());
705 CHECK_EQUAL(5000U, widevineHelper->keyProcessTimeout());
711 TEST(AampDrmHelperTests, TestCreateWidevineHelperNegative)
713 const std::vector<CreateHelperTestData> testData = {
719 "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",
724 for (
auto& test_data: testData)
726 drmInfo = createDrmInfo(test_data.method, test_data.mediaFormat, test_data.uri, test_data.keyFormat, test_data.systemUUID);
731 CHECK(widevineHelper == NULL);
735 TEST(AampDrmHelperTests, TestPlayReadyHelperParsePssh)
741 const std::string expectedMetadata =
"testpolicydata";
743 std::ostringstream psshSs;
744 psshSs <<
"<WRMHEADER xmlns=\"http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader\" version=\"4.0.0.0\">"
746 <<
"<KID>16bytebase64enckeydata==</KID>"
747 <<
"<ckm:policy xmlns:ckm=\"urn:ccp:ckm\">" << expectedMetadata <<
"</ckm:policy>"
750 const std::string psshStr = psshSs.str();
752 CHECK_TRUE(playReadyHelper->parsePssh((
const unsigned char*)psshStr.data(), psshStr.size()));
755 std::vector<uint8_t> keyId;
756 playReadyHelper->getKey(keyId);
758 const std::string expectedKeyId =
"b5f2a6d7-dae6-eeb1-b87a-77247b275ab5";
759 const std::string actualKeyId = std::string(keyId.begin(), keyId.begin() + keyId.size());
761 CHECK_EQUAL(expectedKeyId, actualKeyId);
762 CHECK_EQUAL(expectedMetadata, playReadyHelper->getDrmMetaData());
764 playReadyHelper->setDrmMetaData(
"content meta data that should be ignored");
765 CHECK_EQUAL(expectedMetadata, playReadyHelper->getDrmMetaData());
768 const std::string badPssh =
"somerandomdatawhichisntevenxml";
769 CHECK_FALSE(playReadyHelper->parsePssh((
const unsigned char*)badPssh.data(), badPssh.size()));
772 TEST(AampDrmHelperTests, TestPlayReadyHelperParsePsshNoPolicy)
780 const std::string psshStr =
781 "<WRMHEADER xmlns=\"http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader\" version=\"4.0.0.0\">"
783 "<KID>16bytebase64enckeydata==</KID>"
787 CHECK_TRUE(playReadyHelper->parsePssh((
const unsigned char*)psshStr.data(), psshStr.size()));
790 std::vector<uint8_t> keyId;
791 playReadyHelper->getKey(keyId);
793 const std::string expectedKeyId =
"b5f2a6d7-dae6-eeb1-b87a-77247b275ab5";
794 const std::string actualKeyId = std::string(keyId.begin(), keyId.begin() + keyId.size());
796 CHECK_EQUAL(expectedKeyId, actualKeyId);
798 CHECK_EQUAL(
"", playReadyHelper->getDrmMetaData());
801 TEST(AampDrmHelperTests, TestPlayReadyHelperGenerateLicenseRequest)
808 challengeInfo.
url =
"http://challengeinfourl.example";
809 std::string challengeData =
"OCDM_CHALLENGE_DATA";
811 challengeInfo.
data = std::make_shared<DrmData>((
unsigned char*)challengeData.data(), challengeData.length());
816 playReadyHelper->generateLicenseRequest(challengeInfo, licenseRequest1);
817 CHECK_EQUAL(challengeInfo.
url, licenseRequest1.url);
818 MEMCMP_EQUAL(challengeInfo.
data->getData().c_str(), licenseRequest1.payload.data(), challengeInfo.
data->getDataLength());
822 const std::string psshStr =
823 "<WRMHEADER xmlns=\"http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader\" version=\"4.0.0.0\">"
825 "<KID>16bytebase64enckeydata==</KID>"
826 "<ckm:policy xmlns:ckm=\"urn:ccp:ckm\">policy</ckm:policy>"
829 CHECK_TRUE(playReadyHelper->parsePssh((
const unsigned char*)psshStr.data(), psshStr.size()));
831 playReadyHelper->generateLicenseRequest(challengeInfo, licenseRequest2);
832 CHECK_EQUAL(challengeInfo.
url, licenseRequest2.url);
835 cJSON *postFieldObj = jsonWrapper.getJsonObj();
836 CHECK_TEXT(postFieldObj != NULL,
"Invalid JSON challenge data");
837 CHECK_JSON_STR_VALUE(postFieldObj,
"keySystem",
"playReady");
838 CHECK_JSON_STR_VALUE(postFieldObj,
"mediaUsage",
"stream");
841 CHECK_JSON_STR_VALUE(postFieldObj,
"licenseRequest",
"T0NETV9DSEFMTEVOR0VfREFUQQ==");
842 CHECK_JSON_STR_VALUE(postFieldObj,
"contentMetadata",
"cG9saWN5");
843 CHECK_JSON_STR_VALUE(postFieldObj,
"accessToken", challengeInfo.
accessToken.c_str());
847 const std::string fixedPrLicenseUrl =
"http://prlicenseserver.example";
848 licenseRequest3.url = fixedPrLicenseUrl;
850 playReadyHelper->generateLicenseRequest(challengeInfo, licenseRequest3);
851 CHECK_EQUAL(fixedPrLicenseUrl, licenseRequest3.url);
854 TEST(AampDrmHelperTests, TestCompareHelpers)
859 "91701500000810367b131dd025ab0a7bd8d20c1314151600",
860 "A68129D3-575B-4F1A-9CBA-3223846CF7C3"));
861 CHECK_TRUE(vgdrmHelper !=
nullptr);
868 "9a04f079-9840-4286-ab92-e65be0885f95"));
869 CHECK_TRUE(playreadyHelper !=
nullptr);
876 "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"));
877 CHECK_TRUE(widevineHelper !=
nullptr);
884 "1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"));
885 CHECK_TRUE(clearKeyHelperHls !=
nullptr);
892 "1077efec-c0b2-4d02-ace3-3c1e52e2fb4b"));
893 CHECK_TRUE(clearKeyHelperDash !=
nullptr);
896 CHECK_TRUE(vgdrmHelper->compare(vgdrmHelper));
897 CHECK_TRUE(widevineHelper->compare(widevineHelper));
898 CHECK_TRUE(playreadyHelper->compare(playreadyHelper));
899 CHECK_TRUE(clearKeyHelperHls->compare(clearKeyHelperHls));
902 CHECK_FALSE(vgdrmHelper->compare(playreadyHelper) || vgdrmHelper->compare(widevineHelper) || vgdrmHelper->compare(clearKeyHelperHls));
903 CHECK_FALSE(playreadyHelper->compare(vgdrmHelper) || playreadyHelper->compare(widevineHelper) || playreadyHelper->compare(clearKeyHelperHls));
904 CHECK_FALSE(widevineHelper->compare(vgdrmHelper) || widevineHelper->compare(playreadyHelper) || widevineHelper->compare(clearKeyHelperHls));
907 CHECK_FALSE(clearKeyHelperHls->compare(clearKeyHelperDash));
910 std::shared_ptr<AampDrmHelper> nullHelper;
911 CHECK_FALSE(clearKeyHelperHls->compare(nullHelper));
916 "91701500000810387b131dd025ab0a7bd8d20c1314151600",
917 "A68129D3-575B-4F1A-9CBA-3223846CF7C3"));
918 CHECK_TRUE(vgdrmHelper !=
nullptr);
921 CHECK_FALSE(vgdrmHelper->compare(vgdrmHelper2));
928 "9a04f079-9840-4286-ab92-e65be0885f95"));
929 CHECK_TRUE(playreadyHelper2 !=
nullptr);
931 const std::string pssh1 =
932 "<WRMHEADER xmlns=\"http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader\" version=\"4.0.0.0\">"
934 "<KID>16bytebase64enckeydata==</KID>"
937 playreadyHelper->parsePssh((
const unsigned char*)pssh1.data(), pssh1.size());
938 playreadyHelper2->parsePssh((
const unsigned char*)pssh1.data(), pssh1.size());
941 CHECK_TRUE(playreadyHelper->compare(playreadyHelper2));
943 const std::string pssh2 =
944 "<WRMHEADER xmlns=\"http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader\" version=\"4.0.0.0\">"
946 "<KID>differentbase64keydata==</KID>"
949 playreadyHelper2->parsePssh((
const unsigned char*)pssh2.data(), pssh2.size());
952 CHECK_FALSE(playreadyHelper->compare(playreadyHelper2));
960 "9a04f079-9840-4286-ab92-e65be0885f95"));
961 CHECK_TRUE(playreadyHelper3 !=
nullptr);
964 CHECK_FALSE(playreadyHelper->compare(playreadyHelper3));
967 playreadyHelper3->parsePssh((
const unsigned char*)pssh1.data(), pssh1.size());
968 CHECK_TRUE(playreadyHelper->compare(playreadyHelper3));
971 const std::string pssh3 =
972 "<WRMHEADER xmlns=\"http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader\" version=\"4.0.0.0\">"
974 "<KID>16bytebase64enckeydata==</KID>"
975 "<ckm:policy xmlns:ckm=\"urn:ccp:ckm\">policy</ckm:policy>"
978 playreadyHelper3->parsePssh((
const unsigned char*)pssh3.data(), pssh3.size());
979 CHECK_FALSE(playreadyHelper->compare(playreadyHelper3));