blob: 47d027ad28627c6d4caea17f6e88cdbd3070b83e [file] [log] [blame]
Paul Stewart188a84a2012-01-20 16:28:15 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Paul Stewart1d18e8c2011-07-15 11:00:31 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <gtest/gtest.h>
6
7#include <arpa/inet.h>
8
9#include "shill/byte_string.h"
10#include "shill/ip_address.h"
11
Paul Stewart188a84a2012-01-20 16:28:15 -080012using std::string;
Paul Stewart1d18e8c2011-07-15 11:00:31 -070013using testing::Test;
14
15namespace shill {
16
17namespace {
18const char kV4String1[] = "192.168.10.1";
19const unsigned char kV4Address1[] = { 192, 168, 10, 1 };
20const char kV4String2[] = "192.168.10";
21const unsigned char kV4Address2[] = { 192, 168, 10 };
22const char kV6String1[] = "fe80::1aa9:5ff:7ebf:14c5";
23const unsigned char kV6Address1[] = { 0xfe, 0x80, 0x00, 0x00,
24 0x00, 0x00, 0x00, 0x00,
25 0x1a, 0xa9, 0x05, 0xff,
26 0x7e, 0xbf, 0x14, 0xc5 };
27const char kV6String2[] = "1980:0:1000:1b02:1aa9:5ff:7ebf";
28const unsigned char kV6Address2[] = { 0x19, 0x80, 0x00, 0x00,
29 0x10, 0x00, 0x1b, 0x02,
30 0x1a, 0xa9, 0x05, 0xff,
31 0x7e, 0xbf };
32} // namespace {}
33
34class IPAddressTest : public Test {
35 protected:
36 void TestAddress(IPAddress::Family family,
Paul Stewart188a84a2012-01-20 16:28:15 -080037 const string &good_string,
Paul Stewart1d18e8c2011-07-15 11:00:31 -070038 const ByteString &good_bytes,
Paul Stewart188a84a2012-01-20 16:28:15 -080039 const string &bad_string,
Paul Stewart1d18e8c2011-07-15 11:00:31 -070040 const ByteString &bad_bytes) {
41 IPAddress good_addr(family);
42
43 EXPECT_TRUE(good_addr.SetAddressFromString(good_string));
44 EXPECT_EQ(IPAddress::GetAddressLength(family), good_addr.GetLength());
45 EXPECT_EQ(family, good_addr.family());
46 EXPECT_FALSE(good_addr.IsDefault());
47 EXPECT_EQ(0, memcmp(good_addr.GetConstData(), good_bytes.GetConstData(),
48 good_bytes.GetLength()));
49 EXPECT_TRUE(good_addr.address().Equals(good_bytes));
Paul Stewart188a84a2012-01-20 16:28:15 -080050 string address_string;
51 EXPECT_TRUE(good_addr.ToString(&address_string));
52 EXPECT_EQ(good_string, address_string);
Paul Stewart1d18e8c2011-07-15 11:00:31 -070053
54 IPAddress good_addr_from_bytes(family, good_bytes);
55 EXPECT_TRUE(good_addr.Equals(good_addr_from_bytes));
56
57 IPAddress bad_addr(family);
58 EXPECT_FALSE(bad_addr.SetAddressFromString(bad_string));
59 EXPECT_FALSE(good_addr.Equals(bad_addr));
60
61 EXPECT_FALSE(bad_addr.IsValid());
62
63 IPAddress bad_addr_from_bytes(family, bad_bytes);
64 EXPECT_EQ(family, bad_addr_from_bytes.family());
65 EXPECT_FALSE(bad_addr_from_bytes.IsValid());
66
67 EXPECT_FALSE(bad_addr.Equals(bad_addr_from_bytes));
Paul Stewart188a84a2012-01-20 16:28:15 -080068 EXPECT_FALSE(bad_addr.ToString(&address_string));
Paul Stewart1d18e8c2011-07-15 11:00:31 -070069 }
70};
71
72TEST_F(IPAddressTest, Statics) {
Paul Stewart7355ce12011-09-02 10:47:01 -070073 EXPECT_EQ(4, IPAddress::GetAddressLength(IPAddress::kFamilyIPv4));
74 EXPECT_EQ(16, IPAddress::GetAddressLength(IPAddress::kFamilyIPv6));
Paul Stewart1d18e8c2011-07-15 11:00:31 -070075
Paul Stewart7355ce12011-09-02 10:47:01 -070076 IPAddress addr4(IPAddress::kFamilyIPv4);
Paul Stewart1d18e8c2011-07-15 11:00:31 -070077 addr4.SetAddressToDefault();
78
79 EXPECT_EQ(4, addr4.GetLength());
Paul Stewart7355ce12011-09-02 10:47:01 -070080 EXPECT_EQ(IPAddress::kFamilyIPv4, addr4.family());
Paul Stewart1d18e8c2011-07-15 11:00:31 -070081 EXPECT_TRUE(addr4.IsDefault());
82 EXPECT_TRUE(addr4.address().IsZero());
83 EXPECT_TRUE(addr4.address().Equals(ByteString(4)));
84
85
Paul Stewart7355ce12011-09-02 10:47:01 -070086 IPAddress addr6(IPAddress::kFamilyIPv6);
Paul Stewart1d18e8c2011-07-15 11:00:31 -070087 addr6.SetAddressToDefault();
88
89 EXPECT_EQ(16, addr6.GetLength());
Paul Stewart7355ce12011-09-02 10:47:01 -070090 EXPECT_EQ(addr6.family(), IPAddress::kFamilyIPv6);
Paul Stewart1d18e8c2011-07-15 11:00:31 -070091 EXPECT_TRUE(addr6.IsDefault());
92 EXPECT_TRUE(addr6.address().IsZero());
93 EXPECT_TRUE(addr6.address().Equals(ByteString(16)));
94
95 EXPECT_FALSE(addr4.Equals(addr6));
96}
97
98TEST_F(IPAddressTest, IPv4) {
Paul Stewart7355ce12011-09-02 10:47:01 -070099 TestAddress(IPAddress::kFamilyIPv4,
Paul Stewart1d18e8c2011-07-15 11:00:31 -0700100 kV4String1, ByteString(kV4Address1, sizeof(kV4Address1)),
101 kV4String2, ByteString(kV4Address2, sizeof(kV4Address2)));
102}
103
104
105TEST_F(IPAddressTest, IPv6) {
Paul Stewart7355ce12011-09-02 10:47:01 -0700106 TestAddress(IPAddress::kFamilyIPv6,
Paul Stewart1d18e8c2011-07-15 11:00:31 -0700107 kV6String1, ByteString(kV6Address1, sizeof(kV6Address1)),
108 kV6String2, ByteString(kV6Address2, sizeof(kV6Address2)));
109}
110
111} // namespace shill