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

Side by Side Diff: device/u2f/u2f_message_unittest.cc

Issue 2502103002: Add FIDO U2F message and packet classes (Closed)
Patch Set: Add FIDO U2F message and packet classes Created 4 years 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 2016 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 "device/u2f/u2f_message.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7
8 class U2fMessageTest : public testing::Test {};
9
10 // Packets should be 64 bytes + 1 report ID byte
11 TEST_F(U2fMessageTest, TestPacketSize) {
12 uint8_t channel_id[4] = {5, 6, 7, 8};
13 std::vector<uint8_t> data;
14
15 scoped_refptr<device::U2fPacket> init_packet(
16 new device::U2fInitPacket(channel_id, 0, data, data.size()));
17 ASSERT_EQ(init_packet->GetBuffer()->size(), 65);
18
19 scoped_refptr<device::U2fPacket> cont_packet(
20 new device::U2fContPacket(channel_id, 0, data));
21 ASSERT_EQ(init_packet->GetBuffer()->size(), 65);
Reilly Grant (use Gerrit) 2016/11/30 20:53:47 cont_packet?
Casey Piper 2016/11/30 22:05:46 Done.
22 }
23
24 /*
25 * U2f Init Packets are of the format:
26 * Byte 0: 0
27 * Byte 1-4: Channel ID
28 * Byte 5: Command byte
29 * Byte 6-7: Big Endian size of data
30 * Byte 8-n: Data block
31 *
32 * Remaining buffer is padded with 0
33 */
34 TEST_F(U2fMessageTest, TestPacketData) {
35 uint8_t channel_id[4] = {5, 6, 7, 8};
36 std::vector<uint8_t> data{10, 11};
37 uint8_t cmd = 0x88;
Reilly Grant (use Gerrit) 2016/11/30 20:53:47 CMD_WINK?
Casey Piper 2016/11/30 22:05:46 I'll add a static cast here to add clarity. My int
38 scoped_refptr<device::U2fPacket> init_packet(
39 new device::U2fInitPacket(channel_id, cmd, data, data.size()));
40 int index = 0;
41
42 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], 0);
43 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[0]);
44 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[1]);
45 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[2]);
46 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], channel_id[3]);
47 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], (char)cmd);
Reilly Grant (use Gerrit) 2016/11/30 20:53:47 This cast shouldn't be necessary if it wasn't for
Casey Piper 2016/11/30 22:05:46 Weirdly, the test will fail if I don't have the ca
Reilly Grant (use Gerrit) 2016/11/30 22:18:53 Ah, right, they both get converted to an int for t
48
49 ASSERT_EQ(init_packet->GetBuffer()->data()[index++],
50 (char)(data.size() >> 8));
51 ASSERT_EQ(init_packet->GetBuffer()->data()[index++],
52 (char)(data.size() & 0xff));
53 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], data.at(0));
54 ASSERT_EQ(init_packet->GetBuffer()->data()[index++], data.at(1));
55 for (; index < init_packet->GetBuffer()->size(); index++) {
56 ASSERT_EQ(init_packet->GetBuffer()->data()[index], 0);
57 }
Reilly Grant (use Gerrit) 2016/11/30 20:53:47 Just use this loop for all the elements in the arr
Casey Piper 2016/11/30 22:05:46 Can you clarify what you mean in the first sentenc
Reilly Grant (use Gerrit) 2016/11/30 22:18:53 My mistake. I forgot that data.size() != init_pack
58 }
59
60 TEST_F(U2fMessageTest, TestMessagePartioning) {
61 uint8_t channel_id[4] = {1, 1, 2, 3};
62 std::vector<uint8_t> data(device::U2fMessage::kInitPacketDataSize + 1);
63 scoped_refptr<device::U2fMessage> two_packet_message =
64 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
65 data);
66 ASSERT_EQ(two_packet_message->NumPackets(), 2U);
67
68 data.resize(device::U2fMessage::kInitPacketDataSize);
69 scoped_refptr<device::U2fMessage> one_packet_message =
70 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
71 data);
72 ASSERT_EQ(one_packet_message->NumPackets(), 1U);
73
74 data.resize(device::U2fMessage::kInitPacketDataSize +
75 device::U2fMessage::kContPacketDataSize + 1);
76 scoped_refptr<device::U2fMessage> three_packet_message =
77 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
78 data);
79 ASSERT_EQ(three_packet_message->NumPackets(), 3U);
80 }
81
82 TEST_F(U2fMessageTest, TestMaxSize) {
83 uint8_t channel_id[4] = {0, 1, 2, 3};
84 std::vector<uint8_t> data(device::U2fMessage::kMaxMessageSize + 1);
85 scoped_refptr<device::U2fMessage> oversize_message =
86 device::U2fMessage::Create(channel_id, device::U2fMessage::Type::CMD_PING,
87 data);
88 ASSERT_EQ(oversize_message, nullptr);
89 }
Reilly Grant (use Gerrit) 2016/11/30 20:53:47 General comment about these tests: We try to use E
Casey Piper 2016/11/30 22:05:46 Acknowledged.
Reilly Grant (use Gerrit) 2016/11/30 22:18:53 Also, EXPECT_EQ wants the expected value first. Ot
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698