blob: 69dc51398006928aba1a5b3472dc43c8ca6eb590 [file] [log] [blame]
Ben Chan086d9802013-04-02 16:39:48 -07001// Copyright (c) 2013 The Chromium OS 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 "shill/socket_info.h"
6
7#include <gtest/gtest.h>
8
9namespace shill {
10
11namespace {
12
13const unsigned char kIPAddress1[] = { 192, 168, 1, 1 };
14const unsigned char kIPAddress2[] = { 192, 168, 1, 2 };
15const unsigned char kIPAddress3[] = { 192, 168, 1, 3 };
Ben Chan7fab8972014-08-10 17:14:46 -070016const uint16_t kPort1 = 1000;
17const uint16_t kPort2 = 2000;
18const uint16_t kPort3 = 3000;
Ben Chan086d9802013-04-02 16:39:48 -070019
20} // namespace
21
22class SocketInfoTest : public testing::Test {
23 protected:
24 void ExpectSocketInfoEqual(const SocketInfo &info1, const SocketInfo &info2) {
25 EXPECT_EQ(info1.connection_state(), info2.connection_state());
26 EXPECT_TRUE(info1.local_ip_address().Equals(info2.local_ip_address()));
27 EXPECT_EQ(info1.local_port(), info2.local_port());
28 EXPECT_TRUE(info1.remote_ip_address().Equals(info2.remote_ip_address()));
29 EXPECT_EQ(info1.remote_port(), info2.remote_port());
30 EXPECT_EQ(info1.transmit_queue_value(), info2.transmit_queue_value());
31 EXPECT_EQ(info1.receive_queue_value(), info2.receive_queue_value());
32 EXPECT_EQ(info1.timer_state(), info2.timer_state());
33 }
34};
35
36TEST_F(SocketInfoTest, CopyConstructor) {
37 SocketInfo info(SocketInfo::kConnectionStateEstablished,
38 IPAddress(IPAddress::kFamilyIPv4,
39 ByteString(kIPAddress1, sizeof(kIPAddress1))),
40 kPort1,
41 IPAddress(IPAddress::kFamilyIPv4,
42 ByteString(kIPAddress2, sizeof(kIPAddress2))),
43 kPort2,
44 10,
45 20,
46 SocketInfo::kTimerStateRetransmitTimerPending);
47
48 SocketInfo info_copy(info);
49 ExpectSocketInfoEqual(info, info_copy);
50}
51
52TEST_F(SocketInfoTest, AssignmentOperator) {
53 SocketInfo info(SocketInfo::kConnectionStateEstablished,
54 IPAddress(IPAddress::kFamilyIPv4,
55 ByteString(kIPAddress1, sizeof(kIPAddress1))),
56 kPort1,
57 IPAddress(IPAddress::kFamilyIPv4,
58 ByteString(kIPAddress2, sizeof(kIPAddress2))),
59 kPort2,
60 10,
61 20,
62 SocketInfo::kTimerStateRetransmitTimerPending);
63
64 SocketInfo info_copy = info;
65 ExpectSocketInfoEqual(info, info_copy);
66}
67
68TEST_F(SocketInfoTest, IsSameSocketAs) {
69 IPAddress ip_address1(IPAddress::kFamilyIPv4,
70 ByteString(kIPAddress1, sizeof(kIPAddress1)));
71 IPAddress ip_address2(IPAddress::kFamilyIPv4,
72 ByteString(kIPAddress2, sizeof(kIPAddress2)));
73 IPAddress ip_address3(IPAddress::kFamilyIPv4,
74 ByteString(kIPAddress3, sizeof(kIPAddress3)));
75
76 SocketInfo info(SocketInfo::kConnectionStateEstablished,
77 ip_address1,
78 kPort1,
79 ip_address2,
80 kPort2,
81 0,
82 0,
83 SocketInfo::kTimerStateNoTimerPending);
84
85 // Differs only by local address.
86 EXPECT_FALSE(info.IsSameSocketAs(
87 SocketInfo(SocketInfo::kConnectionStateEstablished,
88 ip_address3,
89 kPort1,
90 ip_address2,
91 kPort2,
92 0,
93 0,
94 SocketInfo::kTimerStateNoTimerPending)));
95
96 // Differs only by local port.
97 EXPECT_FALSE(info.IsSameSocketAs(
98 SocketInfo(SocketInfo::kConnectionStateEstablished,
99 ip_address1,
100 kPort3,
101 ip_address2,
102 kPort2,
103 0,
104 0,
105 SocketInfo::kTimerStateNoTimerPending)));
106
107 // Differs only by remote address.
108 EXPECT_FALSE(info.IsSameSocketAs(
109 SocketInfo(SocketInfo::kConnectionStateEstablished,
110 ip_address1,
111 kPort1,
112 ip_address3,
113 kPort2,
114 0,
115 0,
116 SocketInfo::kTimerStateNoTimerPending)));
117
118 // Differs only by remote port.
119 EXPECT_FALSE(info.IsSameSocketAs(
120 SocketInfo(SocketInfo::kConnectionStateEstablished,
121 ip_address1,
122 kPort1,
123 ip_address2,
124 kPort3,
125 0,
126 0,
127 SocketInfo::kTimerStateNoTimerPending)));
128
129 // Only local address, local port, remote address, and remote port are
130 // identical.
131 EXPECT_TRUE(info.IsSameSocketAs(
132 SocketInfo(SocketInfo::kConnectionStateClosing,
133 ip_address1,
134 kPort1,
135 ip_address2,
136 kPort2,
137 10,
138 20,
139 SocketInfo::kTimerStateRetransmitTimerPending)));
140}
141
142} // namespace shill