Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(49)

Side by Side Diff: media/cdm/json_web_key_unittest.cc

Issue 427993002: Implement ClearKey message format as JSON. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/cdm/json_web_key.h" 5 #include "media/cdm/json_web_key.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace media { 10 namespace media {
11 11
12 class JSONWebKeyTest : public testing::Test { 12 class JSONWebKeyTest : public testing::Test {
13 public: 13 public:
14 JSONWebKeyTest() {} 14 JSONWebKeyTest() {}
15 15
16 protected: 16 protected:
17 void ExtractJWKKeysAndExpect(const std::string& jwk, 17 void ExtractJWKKeysAndExpect(const std::string& jwk,
18 bool expected_result, 18 bool expected_result,
19 size_t expected_number_of_keys) { 19 size_t expected_number_of_keys) {
20 DCHECK(!jwk.empty()); 20 DCHECK(!jwk.empty());
21 KeyIdAndKeyPairs keys; 21 KeyIdAndKeyPairs keys;
22 EXPECT_EQ(expected_result, ExtractKeysFromJWKSet(jwk, &keys)); 22 MediaKeys::SessionType session_type;
23 EXPECT_EQ(expected_result,
24 ExtractKeysFromJWKSet(jwk, &keys, &session_type));
23 EXPECT_EQ(expected_number_of_keys, keys.size()); 25 EXPECT_EQ(expected_number_of_keys, keys.size());
24 } 26 }
27
28 void ExtractSessionTypeAndExpect(const std::string& jwk,
29 bool expected_result,
30 MediaKeys::SessionType expected_type) {
31 DCHECK(!jwk.empty());
32 KeyIdAndKeyPairs keys;
33 MediaKeys::SessionType session_type;
34 EXPECT_EQ(expected_result,
35 ExtractKeysFromJWKSet(jwk, &keys, &session_type));
36 if (expected_result) {
37 // Only check if successful.
38 EXPECT_EQ(expected_type, session_type);
39 }
40 }
41
42 void CreateLicenseAndExpect(const uint8* key_id,
43 int key_id_length,
44 MediaKeys::SessionType session_type,
45 std::string expected_result) {
xhwang 2014/07/30 05:56:08 pass by const ref
jrummell 2014/07/30 18:44:16 Done.
46 std::vector<uint8> result;
47 CreateLicenseRequest(key_id, key_id_length, session_type, result);
48 std::string s(result.begin(), result.end());
49 EXPECT_EQ(expected_result, s);
50 }
51
52 std::string HexString(const uint8* data, int length) {
xhwang 2014/07/30 05:56:08 Can you use HexEncode? https://code.google.com/p
jrummell 2014/07/30 18:44:16 No longer needed.
53 std::stringstream ss;
54 for (int i = 0; i < length; ++i, ++data) {
55 ss << std::hex << *data;
56 }
57 return ss.str();
58 }
59
60 void ExtractKeyFromLicenseAndExpect(const std::string license,
xhwang 2014/07/30 05:56:08 pass by const ref
jrummell 2014/07/30 18:44:16 Done.
61 bool expected_result,
62 const uint8* expected_key,
63 int expected_key_length) {
64 std::vector<uint8> expanded_license(license.begin(), license.end());
xhwang 2014/07/30 05:56:08 what do you mean by "expanded"? If we just convert
jrummell 2014/07/30 18:44:16 Done.
65 std::vector<uint8> key;
66 EXPECT_EQ(expected_result, ExtractLicenseKey(expanded_license, key));
67 if (expected_result) {
68 EXPECT_EQ(HexString(expected_key, expected_key_length),
69 HexString(key.data(), key.size()));
xhwang 2014/07/30 05:56:08 Why do you need to HexString() and then compare? C
jrummell 2014/07/30 18:44:16 Didn't realize that EXPECT_EQ displays the vector
70 }
71 }
25 }; 72 };
26 73
27 TEST_F(JSONWebKeyTest, GenerateJWKSet) { 74 TEST_F(JSONWebKeyTest, GenerateJWKSet) {
28 const uint8 data1[] = { 0x01, 0x02 }; 75 const uint8 data1[] = { 0x01, 0x02 };
29 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 }; 76 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 };
30 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 77 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
31 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; 78 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 };
32 79
33 EXPECT_EQ("{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}", 80 EXPECT_EQ("{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}",
34 GenerateJWKSet(data1, arraysize(data1), data1, arraysize(data1))); 81 GenerateJWKSet(data1, arraysize(data1), data1, arraysize(data1)));
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 " {" 222 " {"
176 " \"kty\": \"oct\"," 223 " \"kty\": \"oct\","
177 " \"kid\": \"JCUmJygpKissLS4vMA\"," 224 " \"kid\": \"JCUmJygpKissLS4vMA\","
178 " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\"" 225 " \"k\":\"MTIzNDU2Nzg5Ojs8PT4/QA\""
179 " }" 226 " }"
180 " ]" 227 " ]"
181 "}"; 228 "}";
182 ExtractJWKKeysAndExpect(kJwksDuplicateKids, true, 2); 229 ExtractJWKKeysAndExpect(kJwksDuplicateKids, true, 2);
183 } 230 }
184 231
232 TEST_F(JSONWebKeyTest, SessionType) {
233 ExtractSessionTypeAndExpect(
234 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}]}",
235 true,
236 MediaKeys::TEMPORARY_SESSION);
237 ExtractSessionTypeAndExpect(
238 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
239 "\"temporary\"}",
240 true,
241 MediaKeys::TEMPORARY_SESSION);
242 ExtractSessionTypeAndExpect(
243 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
244 "\"persistent\"}",
245 true,
246 MediaKeys::PERSISTENT_SESSION);
247 ExtractSessionTypeAndExpect(
248 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":"
249 "\"unknown\"}",
250 false,
251 MediaKeys::TEMPORARY_SESSION);
252 ExtractSessionTypeAndExpect(
253 "{\"keys\":[{\"k\":\"AQI\",\"kid\":\"AQI\",\"kty\":\"oct\"}],\"type\":3}",
254 false,
255 MediaKeys::TEMPORARY_SESSION);
256 }
257
258 TEST_F(JSONWebKeyTest, CreateLicense) {
259 const uint8 data1[] = { 0x01, 0x02 };
260 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 };
261 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
262 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 };
263
264 CreateLicenseAndExpect(data1,
265 arraysize(data1),
266 MediaKeys::TEMPORARY_SESSION,
267 "{\"kids\":[\"AQI\"],\"type\":\"temporary\"}");
268 CreateLicenseAndExpect(data1,
269 arraysize(data1),
270 MediaKeys::PERSISTENT_SESSION,
271 "{\"kids\":[\"AQI\"],\"type\":\"persistent\"}");
272 CreateLicenseAndExpect(data2,
273 arraysize(data2),
274 MediaKeys::TEMPORARY_SESSION,
275 "{\"kids\":[\"AQIDBA\"],\"type\":\"temporary\"}");
276 CreateLicenseAndExpect(
277 data3,
278 arraysize(data3),
279 MediaKeys::PERSISTENT_SESSION,
280 "{\"kids\":[\"AQIDBAUGBwgJCgsMDQ4PEA\"],\"type\":\"persistent\"}");
281 }
282
283 TEST_F(JSONWebKeyTest, ExtractLicense) {
284 const uint8 data1[] = { 0x01, 0x02 };
285 const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 };
286 const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
287 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 };
288
289 ExtractKeyFromLicenseAndExpect(
290 "{\"kids\":[\"AQI\"],\"type\":\"temporary\"}",
291 true,
292 data1,
293 arraysize(data1));
294 ExtractKeyFromLicenseAndExpect(
295 "{\"kids\":[\"AQIDBA\"],\"type\":\"temporary\"}",
296 true,
297 data2,
298 arraysize(data2));
299 ExtractKeyFromLicenseAndExpect(
300 "{\"kids\":[\"AQIDBAUGBwgJCgsMDQ4PEA\"],\"type\":\"persistent\"}",
301 true,
302 data3,
303 arraysize(data3));
304
305 // Try some incorrect JSON.
306 ExtractKeyFromLicenseAndExpect("", false, NULL, 0);
307 ExtractKeyFromLicenseAndExpect("!@#$%^&*()", false, NULL, 0);
308
309 // Valid JSON, but not a dictionary.
310 ExtractKeyFromLicenseAndExpect("6", false, NULL, 0);
311 ExtractKeyFromLicenseAndExpect("[\"AQI\"]", false, NULL, 0);
312
313 // Dictionary, but missing expected tag.
314 ExtractKeyFromLicenseAndExpect("{\"kid\":[\"AQI\"]}", false, NULL, 0);
315
316 // Correct tag, but empty list.
317 ExtractKeyFromLicenseAndExpect("{\"kids\":[]}", false, NULL, 0);
318
319 // Correct tag, but list doesn't contain a string.
320 ExtractKeyFromLicenseAndExpect("{\"kids\":[[\"AQI\"]]}", false, NULL, 0);
321
322 // Correct tag, but invalid base64 encoding.
323 ExtractKeyFromLicenseAndExpect("{\"kids\":[\"!@#$%^&*()\"]}", false, NULL, 0);
324 }
325
185 } // namespace media 326 } // namespace media
186 327
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698