blob: b3d897085172fc8bbeb1ab352224198b8a942d85 [file] [log] [blame]
[email protected]56681582013-07-28 20:08:441// Copyright 2013 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
avi6846aef2015-12-26 01:09:385#include <stdint.h>
[email protected]56681582013-07-28 20:08:446#include <string.h>
7
8#include "chrome/browser/net/probe_message.h"
9#include "chrome/browser/net/probe_message.pb.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12namespace chrome_browser_net {
13
14class ProbeMessageTest : public ::testing::Test {
15 protected:
16 ProbeMessageTest() {}
17
dchenge1bc7982014-10-30 00:32:4018 ~ProbeMessageTest() override {}
[email protected]56681582013-07-28 20:08:4419};
20
21TEST_F(ProbeMessageTest, TestGenerateProbeRequest) {
22 ProbeMessage pm;
23 ProbePacket_Token token;
24 token.set_timestamp_micros(1000000U);
25 token.mutable_hash()->assign("1x1x");
avi6846aef2015-12-26 01:09:3826 uint32_t group_id = 1;
27 uint32_t probe_size = 500;
28 uint32_t pacing_interval_micros = 1000000;
29 uint32_t number_probe_packets = 21;
[email protected]56681582013-07-28 20:08:4430 ProbePacket probe_packet;
31 pm.GenerateProbeRequest(token,
32 group_id,
33 probe_size,
34 pacing_interval_micros,
35 number_probe_packets,
36 &probe_packet);
37
38 EXPECT_EQ(probe_packet.header().type(), ProbePacket_Type_PROBE_REQUEST);
39 EXPECT_EQ(probe_packet.header().version(), ProbeMessage::kVersion);
40 EXPECT_EQ(probe_packet.group_id(), group_id);
41 EXPECT_EQ(probe_packet.probe_size_bytes(), probe_size);
42 EXPECT_EQ(probe_packet.pacing_interval_micros(), pacing_interval_micros);
43 EXPECT_EQ(probe_packet.number_probe_packets(), number_probe_packets);
44 EXPECT_GE(probe_packet.ByteSize(), static_cast<int>(probe_size));
45}
46
47TEST_F(ProbeMessageTest, TestSetPacketHeader) {
48 ProbeMessage pm;
49 ProbePacket probe_packet;
50 pm.SetPacketHeader(ProbePacket_Type_HELLO_REQUEST, &probe_packet);
51 EXPECT_EQ(probe_packet.header().type(), ProbePacket_Type_HELLO_REQUEST);
52 EXPECT_EQ(probe_packet.header().version(), ProbeMessage::kVersion);
53
54 pm.SetPacketHeader(ProbePacket_Type_PROBE_REPLY, &probe_packet);
55 EXPECT_EQ(probe_packet.header().type(), ProbePacket_Type_PROBE_REPLY);
56}
57
58TEST_F(ProbeMessageTest, TestMakeEncodePacketAndParseInput) {
59 ProbeMessage pm;
60 ProbePacket in_packet;
avi6846aef2015-12-26 01:09:3861 uint32_t version = 2;
[email protected]56681582013-07-28 20:08:4462 ProbePacket_Type type = ProbePacket_Type_HELLO_REPLY;
avi6846aef2015-12-26 01:09:3863 uint32_t number_probe_packets = 2;
64 uint32_t group_id = 5;
[email protected]56681582013-07-28 20:08:4465 in_packet.mutable_header()->set_version(version);
66 in_packet.mutable_header()->set_type(type);
67 in_packet.set_number_probe_packets(number_probe_packets);
68 in_packet.set_group_id(group_id);
69
70 // Encode it to string.
71 std::string output = pm.MakeEncodedPacket(in_packet);
72 // Parse to ProbePacket.
73 ProbePacket out_packet;
74 pm.ParseInput(output, &out_packet);
75
76 EXPECT_EQ(out_packet.header().type(), type);
77 EXPECT_EQ(out_packet.header().version(), version);
78 EXPECT_EQ(out_packet.number_probe_packets(), number_probe_packets);
79 EXPECT_EQ(out_packet.group_id(), group_id);
80}
81
82TEST_F(ProbeMessageTest, TestChecksum) {
83 ProbeMessage pm;
84 std::string str("ABC");
avi6846aef2015-12-26 01:09:3885 uint32_t computed_checksum = pm.Checksum(str);
86 uint32_t expected_sum = 0;
[email protected]56681582013-07-28 20:08:4487 for (unsigned i = 0; i < str.size(); ++i)
avi6846aef2015-12-26 01:09:3888 expected_sum += static_cast<uint8_t>(str[i]);
[email protected]56681582013-07-28 20:08:4489 EXPECT_EQ(computed_checksum, expected_sum);
90}
91
92TEST_F(ProbeMessageTest, TestEncode) {
93 ProbeMessage pm;
94 std::string original("ABC");
95 std::string output = pm.Encode(original);
96 std::string expected_str(original.size(), 0);
97 for (unsigned i = 0; i < original.size(); ++i) {
98 expected_str[i] = original[i] ^ ProbeMessage::kEncodingString[i];
99 }
100 EXPECT_EQ(output, expected_str);
101
102 // Do it again to decode.
103 std::string twice_encoded = pm.Encode(output);
104 EXPECT_EQ(twice_encoded, original);
105}
106
107} // namespace chrome_browser_net