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

Side by Side Diff: components/gcm_driver/crypto/message_payload_parser_unittest.cc

Issue 2888763006: Add a parser for messages with a Web Push Protocol-based payload (Closed)
Patch Set: Created 3 years, 7 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/gcm_driver/crypto/message_payload_parser.h"
6
7 #include "base/big_endian.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace gcm {
11
12 namespace {
13
14 const uint8_t kValidMessage[] = {
15 // salt (16 bytes)
16 0x59, 0xFD, 0x35, 0x97, 0x3B, 0xF3, 0x66, 0xA7, 0xEB, 0x8D, 0x44, 0x1E,
17 0xCB, 0x4D, 0xFC, 0xD8,
18 // rs (4 bytes)
johnme 2017/05/22 16:18:39 Nit: add "in network byte order"
Peter Beverloo 2017/05/22 17:25:13 Done.
19 0x00, 0x00, 0x00, 0x12,
20 // idlen (1 byte)
21 0x41,
22 // public key (65 bytes)
23 0x04, 0x35, 0x02, 0x67, 0xB9, 0x10, 0x8F, 0x9B, 0xF1, 0x85, 0xF5, 0x1B,
24 0xD7, 0xA4, 0xEF, 0xBD, 0x28, 0xB3, 0x11, 0x40, 0xBA, 0xD0, 0xEE, 0xB2,
25 0x97, 0xDA, 0x6A, 0x93, 0x2D, 0x26, 0x45, 0xBD, 0xB2, 0x9A, 0x9F, 0xB8,
26 0x19, 0xD8, 0x21, 0x6F, 0x66, 0xE3, 0xF6, 0x0B, 0x74, 0xB2, 0x28, 0x38,
27 0xDC, 0xA7, 0x8A, 0x58, 0x0D, 0x56, 0x47, 0x3E, 0xD0, 0x5B, 0x5C, 0x93,
28 0x4E, 0xB3, 0x89, 0x87, 0x64,
29 // payload (18 bytes)
30 0x3F, 0xD8, 0x95, 0x2C, 0xA2, 0x11, 0xBD, 0x7B, 0x57, 0xB2, 0x00, 0xBD,
31 0x57, 0x68, 0x3F, 0xF0, 0x14, 0x57};
32
33 static_assert(arraysize(kValidMessage) == 104,
34 "The smallest valid message is 104 bytes in size.");
35
36 // Creates an std::string for the |kValidMessage| constant.
johnme 2017/05/22 16:18:39 Nit: s/an/a/
Peter Beverloo 2017/05/22 17:25:13 No, "an" is correct :). Esteedee.
37 std::string CreateMessageString() {
38 return std::string(reinterpret_cast<const char*>(kValidMessage),
39 arraysize(kValidMessage));
40 }
41
42 TEST(MessagePayloadParserTest, ValidMessage) {
43 MessagePayloadParser parser(CreateMessageString());
44 EXPECT_TRUE(parser.IsValid());
johnme 2017/05/22 16:18:39 Consider exercising the getters here?
Peter Beverloo 2017/05/22 17:25:13 Done.
45 }
46
47 TEST(MessagePayloadParserTest, MinimumMessageSize) {
48 std::string message = CreateMessageString();
49 message.resize(arraysize(kValidMessage) / 2);
50
51 MessagePayloadParser parser(message);
52 EXPECT_FALSE(parser.IsValid());
53 }
54
55 TEST(MessagePayloadParserTest, MinimumRecordSize) {
56 std::string message = CreateMessageString();
57
58 uint32_t invalid_record_size = 11;
59 base::WriteBigEndian(&message[0] + 16 /* salt */, invalid_record_size);
60
61 MessagePayloadParser parser(message);
62 EXPECT_FALSE(parser.IsValid());
63 }
64
65 TEST(MessagePayloadParserTest, InvalidPublicKey) {
66 std::string message = CreateMessageString();
67
68 uint8_t invalid_public_key_size = 42;
69 base::WriteBigEndian(&message[0] + 16 /* salt */ + 4 /* rs */,
70 invalid_public_key_size);
71
72 MessagePayloadParser parser(message);
73 EXPECT_FALSE(parser.IsValid());
74 }
75
76 } // namespace
77
78 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698