OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/formats/webm/webm_content_encodings_client.h" |
| 6 |
| 7 #include <string> |
| 8 |
5 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "media/base/mock_media_log.h" |
6 #include "media/formats/webm/webm_constants.h" | 12 #include "media/formats/webm/webm_constants.h" |
7 #include "media/formats/webm/webm_content_encodings_client.h" | |
8 #include "media/formats/webm/webm_parser.h" | 13 #include "media/formats/webm/webm_parser.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
10 | 16 |
| 17 using ::testing::StrictMock; |
| 18 |
11 namespace media { | 19 namespace media { |
12 | 20 |
| 21 // Matchers for verifying common media log entry strings. |
| 22 MATCHER(MissingContentEncoding, "") { |
| 23 return CONTAINS_STRING(arg, "Missing ContentEncoding."); |
| 24 } |
| 25 |
| 26 MATCHER(UnexpectedContentEncodingOrder, "") { |
| 27 return CONTAINS_STRING(arg, "Unexpected ContentEncodingOrder."); |
| 28 } |
| 29 |
| 30 MATCHER(UnexpectedContentEncodingScope, "") { |
| 31 return CONTAINS_STRING(arg, "Unexpected ContentEncodingScope."); |
| 32 } |
| 33 |
| 34 MATCHER(ContentCompressionNotSupported, "") { |
| 35 return CONTAINS_STRING(arg, "ContentCompression not supported."); |
| 36 } |
| 37 |
| 38 MATCHER(MissingContentEncryption, "") { |
| 39 return CONTAINS_STRING( |
| 40 arg, |
| 41 "ContentEncodingType is encryption but ContentEncryption is missing."); |
| 42 } |
| 43 |
| 44 MATCHER_P(UnexpectedContentEncAlgo, algo, "") { |
| 45 return CONTAINS_STRING( |
| 46 arg, "Unexpected ContentEncAlgo " + base::IntToString(algo) + "."); |
| 47 } |
| 48 |
13 class WebMContentEncodingsClientTest : public testing::Test { | 49 class WebMContentEncodingsClientTest : public testing::Test { |
14 public: | 50 public: |
15 WebMContentEncodingsClientTest() | 51 WebMContentEncodingsClientTest() |
16 : client_(new MediaLog()), parser_(kWebMIdContentEncodings, &client_) {} | 52 : media_log_(new StrictMock<MockMediaLog>()), |
| 53 client_(media_log_), |
| 54 parser_(kWebMIdContentEncodings, &client_) {} |
17 | 55 |
18 void ParseAndExpectToFail(const uint8* buf, int size) { | 56 void ParseAndExpectToFail(const uint8* buf, int size) { |
19 int result = parser_.Parse(buf, size); | 57 int result = parser_.Parse(buf, size); |
20 EXPECT_EQ(-1, result); | 58 EXPECT_EQ(-1, result); |
21 } | 59 } |
22 | 60 |
23 protected: | 61 protected: |
| 62 scoped_refptr<StrictMock<MockMediaLog>> media_log_; |
24 WebMContentEncodingsClient client_; | 63 WebMContentEncodingsClient client_; |
25 WebMListParser parser_; | 64 WebMListParser parser_; |
26 }; | 65 }; |
27 | 66 |
28 TEST_F(WebMContentEncodingsClientTest, EmptyContentEncodings) { | 67 TEST_F(WebMContentEncodingsClientTest, EmptyContentEncodings) { |
29 const uint8 kContentEncodings[] = { | 68 const uint8 kContentEncodings[] = { |
30 0x6D, 0x80, 0x80, // ContentEncodings (size = 0) | 69 0x6D, 0x80, 0x80, // ContentEncodings (size = 0) |
31 }; | 70 }; |
32 int size = sizeof(kContentEncodings); | 71 int size = sizeof(kContentEncodings); |
| 72 EXPECT_MEDIA_LOG(MissingContentEncoding()); |
33 ParseAndExpectToFail(kContentEncodings, size); | 73 ParseAndExpectToFail(kContentEncodings, size); |
34 } | 74 } |
35 | 75 |
36 TEST_F(WebMContentEncodingsClientTest, EmptyContentEncoding) { | 76 TEST_F(WebMContentEncodingsClientTest, EmptyContentEncoding) { |
37 const uint8 kContentEncodings[] = { | 77 const uint8 kContentEncodings[] = { |
38 0x6D, 0x80, 0x83, // ContentEncodings (size = 3) | 78 0x6D, 0x80, 0x83, // ContentEncodings (size = 3) |
39 0x63, 0x40, 0x80, // ContentEncoding (size = 0) | 79 0x63, 0x40, 0x80, // ContentEncoding (size = 0) |
40 }; | 80 }; |
41 int size = sizeof(kContentEncodings); | 81 int size = sizeof(kContentEncodings); |
42 ParseAndExpectToFail(kContentEncodings, size); | 82 ParseAndExpectToFail(kContentEncodings, size); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 | 215 |
176 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingOrder) { | 216 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingOrder) { |
177 const uint8 kContentEncodings[] = { | 217 const uint8 kContentEncodings[] = { |
178 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) | 218 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) |
179 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) | 219 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) |
180 0x50, 0x31, 0x81, 0xEE, // ContentEncodingOrder (size = 1), invalid | 220 0x50, 0x31, 0x81, 0xEE, // ContentEncodingOrder (size = 1), invalid |
181 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) | 221 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) |
182 0x50, 0x35, 0x80, // ContentEncryption (size = 0) | 222 0x50, 0x35, 0x80, // ContentEncryption (size = 0) |
183 }; | 223 }; |
184 int size = sizeof(kContentEncodings); | 224 int size = sizeof(kContentEncodings); |
| 225 EXPECT_MEDIA_LOG(UnexpectedContentEncodingOrder()); |
185 ParseAndExpectToFail(kContentEncodings, size); | 226 ParseAndExpectToFail(kContentEncodings, size); |
186 } | 227 } |
187 | 228 |
188 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingScope) { | 229 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingScope) { |
189 const uint8 kContentEncodings[] = { | 230 const uint8 kContentEncodings[] = { |
190 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) | 231 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) |
191 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) | 232 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) |
192 0x50, 0x32, 0x81, 0xEE, // ContentEncodingScope (size = 1), invalid | 233 0x50, 0x32, 0x81, 0xEE, // ContentEncodingScope (size = 1), invalid |
193 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) | 234 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) |
194 0x50, 0x35, 0x80, // ContentEncryption (size = 0) | 235 0x50, 0x35, 0x80, // ContentEncryption (size = 0) |
195 }; | 236 }; |
196 int size = sizeof(kContentEncodings); | 237 int size = sizeof(kContentEncodings); |
| 238 EXPECT_MEDIA_LOG(UnexpectedContentEncodingScope()); |
197 ParseAndExpectToFail(kContentEncodings, size); | 239 ParseAndExpectToFail(kContentEncodings, size); |
198 } | 240 } |
199 | 241 |
200 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingType) { | 242 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingType) { |
201 const uint8 kContentEncodings[] = { | 243 const uint8 kContentEncodings[] = { |
202 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) | 244 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) |
203 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) | 245 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) |
204 0x50, 0x33, 0x81, 0x00, // ContentEncodingType (size = 1), invalid | 246 0x50, 0x33, 0x81, 0x00, // ContentEncodingType (size = 1), invalid |
205 0x50, 0x35, 0x80, // ContentEncryption (size = 0) | 247 0x50, 0x35, 0x80, // ContentEncryption (size = 0) |
206 }; | 248 }; |
207 int size = sizeof(kContentEncodings); | 249 int size = sizeof(kContentEncodings); |
| 250 EXPECT_MEDIA_LOG(ContentCompressionNotSupported()); |
208 ParseAndExpectToFail(kContentEncodings, size); | 251 ParseAndExpectToFail(kContentEncodings, size); |
209 } | 252 } |
210 | 253 |
211 // ContentEncodingType is encryption but no ContentEncryption present. | 254 // ContentEncodingType is encryption but no ContentEncryption present. |
212 TEST_F(WebMContentEncodingsClientTest, MissingContentEncryption) { | 255 TEST_F(WebMContentEncodingsClientTest, MissingContentEncryption) { |
213 const uint8 kContentEncodings[] = { | 256 const uint8 kContentEncodings[] = { |
214 0x6D, 0x80, 0x87, // ContentEncodings (size = 7) | 257 0x6D, 0x80, 0x87, // ContentEncodings (size = 7) |
215 0x62, 0x40, 0x84, // ContentEncoding (size = 4) | 258 0x62, 0x40, 0x84, // ContentEncoding (size = 4) |
216 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) | 259 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) |
217 // ContentEncryption missing | 260 // ContentEncryption missing |
218 }; | 261 }; |
219 int size = sizeof(kContentEncodings); | 262 int size = sizeof(kContentEncodings); |
| 263 EXPECT_MEDIA_LOG(MissingContentEncryption()); |
220 ParseAndExpectToFail(kContentEncodings, size); | 264 ParseAndExpectToFail(kContentEncodings, size); |
221 } | 265 } |
222 | 266 |
223 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncAlgo) { | 267 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncAlgo) { |
224 const uint8 kContentEncodings[] = { | 268 const uint8 kContentEncodings[] = { |
225 0x6D, 0x80, 0x99, // ContentEncodings (size = 25) | 269 0x6D, 0x80, 0x99, // ContentEncodings (size = 25) |
226 0x62, 0x40, 0x96, // ContentEncoding (size = 22) | 270 0x62, 0x40, 0x96, // ContentEncoding (size = 22) |
227 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) | 271 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) |
228 0x50, 0x35, 0x8F, // ContentEncryption (size = 15) | 272 0x50, 0x35, 0x8F, // ContentEncryption (size = 15) |
229 0x47, 0xE1, 0x81, 0xEE, // ContentEncAlgo (size = 1), invalid | 273 0x47, 0xE1, 0x81, 0xEE, // ContentEncAlgo (size = 1), invalid |
230 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8) | 274 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8) |
231 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, | 275 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, |
232 }; | 276 }; |
233 int size = sizeof(kContentEncodings); | 277 int size = sizeof(kContentEncodings); |
| 278 EXPECT_MEDIA_LOG(UnexpectedContentEncAlgo(0xEE)); |
234 ParseAndExpectToFail(kContentEncodings, size); | 279 ParseAndExpectToFail(kContentEncodings, size); |
235 } | 280 } |
236 | 281 |
237 } // namespace media | 282 } // namespace media |
OLD | NEW |