• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (C) 2013 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #include "shill/socket_info.h"
18 
19 #include <gtest/gtest.h>
20 
21 namespace shill {
22 
23 namespace {
24 
25 const unsigned char kIPAddress1[] = { 192, 168, 1, 1 };
26 const unsigned char kIPAddress2[] = { 192, 168, 1, 2 };
27 const unsigned char kIPAddress3[] = { 192, 168, 1, 3 };
28 const uint16_t kPort1 = 1000;
29 const uint16_t kPort2 = 2000;
30 const uint16_t kPort3 = 3000;
31 
32 }  // namespace
33 
34 class SocketInfoTest : public testing::Test {
35  protected:
ExpectSocketInfoEqual(const SocketInfo & info1,const SocketInfo & info2)36   void ExpectSocketInfoEqual(const SocketInfo& info1, const SocketInfo& info2) {
37     EXPECT_EQ(info1.connection_state(), info2.connection_state());
38     EXPECT_TRUE(info1.local_ip_address().Equals(info2.local_ip_address()));
39     EXPECT_EQ(info1.local_port(), info2.local_port());
40     EXPECT_TRUE(info1.remote_ip_address().Equals(info2.remote_ip_address()));
41     EXPECT_EQ(info1.remote_port(), info2.remote_port());
42     EXPECT_EQ(info1.transmit_queue_value(), info2.transmit_queue_value());
43     EXPECT_EQ(info1.receive_queue_value(), info2.receive_queue_value());
44     EXPECT_EQ(info1.timer_state(), info2.timer_state());
45   }
46 };
47 
TEST_F(SocketInfoTest,CopyConstructor)48 TEST_F(SocketInfoTest, CopyConstructor) {
49   SocketInfo info(SocketInfo::kConnectionStateEstablished,
50                   IPAddress(IPAddress::kFamilyIPv4,
51                             ByteString(kIPAddress1, sizeof(kIPAddress1))),
52                   kPort1,
53                   IPAddress(IPAddress::kFamilyIPv4,
54                             ByteString(kIPAddress2, sizeof(kIPAddress2))),
55                   kPort2,
56                   10,
57                   20,
58                   SocketInfo::kTimerStateRetransmitTimerPending);
59 
60   SocketInfo info_copy(info);
61   ExpectSocketInfoEqual(info, info_copy);
62 }
63 
TEST_F(SocketInfoTest,AssignmentOperator)64 TEST_F(SocketInfoTest, AssignmentOperator) {
65   SocketInfo info(SocketInfo::kConnectionStateEstablished,
66                   IPAddress(IPAddress::kFamilyIPv4,
67                             ByteString(kIPAddress1, sizeof(kIPAddress1))),
68                   kPort1,
69                   IPAddress(IPAddress::kFamilyIPv4,
70                             ByteString(kIPAddress2, sizeof(kIPAddress2))),
71                   kPort2,
72                   10,
73                   20,
74                   SocketInfo::kTimerStateRetransmitTimerPending);
75 
76   SocketInfo info_copy = info;
77   ExpectSocketInfoEqual(info, info_copy);
78 }
79 
TEST_F(SocketInfoTest,IsSameSocketAs)80 TEST_F(SocketInfoTest, IsSameSocketAs) {
81   IPAddress ip_address1(IPAddress::kFamilyIPv4,
82                         ByteString(kIPAddress1, sizeof(kIPAddress1)));
83   IPAddress ip_address2(IPAddress::kFamilyIPv4,
84                         ByteString(kIPAddress2, sizeof(kIPAddress2)));
85   IPAddress ip_address3(IPAddress::kFamilyIPv4,
86                         ByteString(kIPAddress3, sizeof(kIPAddress3)));
87 
88   SocketInfo info(SocketInfo::kConnectionStateEstablished,
89                   ip_address1,
90                   kPort1,
91                   ip_address2,
92                   kPort2,
93                   0,
94                   0,
95                   SocketInfo::kTimerStateNoTimerPending);
96 
97   // Differs only by local address.
98   EXPECT_FALSE(info.IsSameSocketAs(
99       SocketInfo(SocketInfo::kConnectionStateEstablished,
100                  ip_address3,
101                  kPort1,
102                  ip_address2,
103                  kPort2,
104                  0,
105                  0,
106                  SocketInfo::kTimerStateNoTimerPending)));
107 
108   // Differs only by local port.
109   EXPECT_FALSE(info.IsSameSocketAs(
110       SocketInfo(SocketInfo::kConnectionStateEstablished,
111                  ip_address1,
112                  kPort3,
113                  ip_address2,
114                  kPort2,
115                  0,
116                  0,
117                  SocketInfo::kTimerStateNoTimerPending)));
118 
119   // Differs only by remote address.
120   EXPECT_FALSE(info.IsSameSocketAs(
121       SocketInfo(SocketInfo::kConnectionStateEstablished,
122                  ip_address1,
123                  kPort1,
124                  ip_address3,
125                  kPort2,
126                  0,
127                  0,
128                  SocketInfo::kTimerStateNoTimerPending)));
129 
130   // Differs only by remote port.
131   EXPECT_FALSE(info.IsSameSocketAs(
132       SocketInfo(SocketInfo::kConnectionStateEstablished,
133                  ip_address1,
134                  kPort1,
135                  ip_address2,
136                  kPort3,
137                  0,
138                  0,
139                  SocketInfo::kTimerStateNoTimerPending)));
140 
141   // Only local address, local port, remote address, and remote port are
142   // identical.
143   EXPECT_TRUE(info.IsSameSocketAs(
144       SocketInfo(SocketInfo::kConnectionStateClosing,
145                  ip_address1,
146                  kPort1,
147                  ip_address2,
148                  kPort2,
149                  10,
150                  20,
151                  SocketInfo::kTimerStateRetransmitTimerPending)));
152 }
153 
154 }  // namespace shill
155