blob: 8f906076c0181891ee5c1bceefdb557334d56e55 [file] [log] [blame]
Darin Petkove02b3ca2011-05-31 16:00:44 -07001// Copyright (c) 2011 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
Chris Masone19e30402011-07-19 15:48:47 -07005#include "shill/ipconfig.h"
6
Darin Petkovefb09c32011-06-07 20:24:17 -07007#include <base/callback_old.h>
Darin Petkovf65e9282011-06-21 14:29:56 -07008#include <gtest/gtest.h>
Darin Petkovefb09c32011-06-07 20:24:17 -07009
Chris Masone19e30402011-07-19 15:48:47 -070010#include "shill/mock_control.h"
Darin Petkove02b3ca2011-05-31 16:00:44 -070011
Darin Petkovefb09c32011-06-07 20:24:17 -070012using testing::Test;
13
Darin Petkove02b3ca2011-05-31 16:00:44 -070014namespace shill {
Darin Petkove02b3ca2011-05-31 16:00:44 -070015
Darin Petkovf65e9282011-06-21 14:29:56 -070016namespace {
17const char kDeviceName[] = "testdevice";
18} // namespace {}
19
Darin Petkove02b3ca2011-05-31 16:00:44 -070020class IPConfigTest : public Test {
21 public:
Chris Masone19e30402011-07-19 15:48:47 -070022 IPConfigTest() : ipconfig_(new IPConfig(&control_, kDeviceName)) {}
Darin Petkove02b3ca2011-05-31 16:00:44 -070023
24 protected:
Chris Masone19e30402011-07-19 15:48:47 -070025 MockControl control_;
Darin Petkovefb09c32011-06-07 20:24:17 -070026 IPConfigRefPtr ipconfig_;
Darin Petkove02b3ca2011-05-31 16:00:44 -070027};
28
Darin Petkovf65e9282011-06-21 14:29:56 -070029TEST_F(IPConfigTest, DeviceName) {
30 EXPECT_EQ(kDeviceName, ipconfig_->device_name());
Darin Petkovefb09c32011-06-07 20:24:17 -070031}
32
Darin Petkov92c43902011-06-09 20:46:06 -070033TEST_F(IPConfigTest, RequestIP) {
34 EXPECT_FALSE(ipconfig_->RequestIP());
Darin Petkovefb09c32011-06-07 20:24:17 -070035}
36
Darin Petkov92c43902011-06-09 20:46:06 -070037TEST_F(IPConfigTest, RenewIP) {
38 EXPECT_FALSE(ipconfig_->RenewIP());
39}
40
41TEST_F(IPConfigTest, ReleaseIP) {
42 EXPECT_FALSE(ipconfig_->ReleaseIP());
Darin Petkovefb09c32011-06-07 20:24:17 -070043}
44
45TEST_F(IPConfigTest, UpdateProperties) {
46 IPConfig::Properties properties;
47 properties.address = "1.2.3.4";
48 properties.subnet_cidr = 24;
49 properties.broadcast_address = "11.22.33.44";
50 properties.gateway = "5.6.7.8";
51 properties.dns_servers.push_back("10.20.30.40");
52 properties.dns_servers.push_back("20.30.40.50");
53 properties.domain_name = "foo.org";
54 properties.domain_search.push_back("zoo.org");
55 properties.domain_search.push_back("zoo.com");
56 properties.mtu = 700;
Darin Petkovf9b0ca82011-06-20 12:10:23 -070057 ipconfig_->UpdateProperties(properties, true);
Darin Petkovefb09c32011-06-07 20:24:17 -070058 EXPECT_EQ("1.2.3.4", ipconfig_->properties().address);
59 EXPECT_EQ(24, ipconfig_->properties().subnet_cidr);
60 EXPECT_EQ("11.22.33.44", ipconfig_->properties().broadcast_address);
61 EXPECT_EQ("5.6.7.8", ipconfig_->properties().gateway);
62 ASSERT_EQ(2, ipconfig_->properties().dns_servers.size());
63 EXPECT_EQ("10.20.30.40", ipconfig_->properties().dns_servers[0]);
64 EXPECT_EQ("20.30.40.50", ipconfig_->properties().dns_servers[1]);
65 ASSERT_EQ(2, ipconfig_->properties().domain_search.size());
66 EXPECT_EQ("zoo.org", ipconfig_->properties().domain_search[0]);
67 EXPECT_EQ("zoo.com", ipconfig_->properties().domain_search[1]);
68 EXPECT_EQ("foo.org", ipconfig_->properties().domain_name);
69 EXPECT_EQ(700, ipconfig_->properties().mtu);
70}
71
Darin Petkovf9b0ca82011-06-20 12:10:23 -070072namespace {
73
Darin Petkovefb09c32011-06-07 20:24:17 -070074class UpdateCallbackTest {
75 public:
Chris Masone2b105542011-06-22 10:58:09 -070076 UpdateCallbackTest(const IPConfigRefPtr &ipconfig, bool success)
Darin Petkovefb09c32011-06-07 20:24:17 -070077 : ipconfig_(ipconfig),
Darin Petkovf9b0ca82011-06-20 12:10:23 -070078 success_(success),
Darin Petkovefb09c32011-06-07 20:24:17 -070079 called_(false) {}
80
Chris Masone2b105542011-06-22 10:58:09 -070081 void Callback(const IPConfigRefPtr &ipconfig, bool success) {
Darin Petkovefb09c32011-06-07 20:24:17 -070082 called_ = true;
Darin Petkovf9b0ca82011-06-20 12:10:23 -070083 EXPECT_EQ(ipconfig_.get(), ipconfig.get());
84 EXPECT_EQ(success_, success);
Darin Petkovefb09c32011-06-07 20:24:17 -070085 }
86
87 bool called() const { return called_; }
88
89 private:
90 IPConfigRefPtr ipconfig_;
Darin Petkovf9b0ca82011-06-20 12:10:23 -070091 bool success_;
Darin Petkovefb09c32011-06-07 20:24:17 -070092 bool called_;
93};
94
Darin Petkovf9b0ca82011-06-20 12:10:23 -070095} // namespace {}
96
Darin Petkovefb09c32011-06-07 20:24:17 -070097TEST_F(IPConfigTest, UpdateCallback) {
Darin Petkovf9b0ca82011-06-20 12:10:23 -070098 for (int success = 0; success < 2; success++) {
99 UpdateCallbackTest callback_test(ipconfig_, success);
100 ASSERT_FALSE(callback_test.called());
101 ipconfig_->RegisterUpdateCallback(
102 NewCallback(&callback_test, &UpdateCallbackTest::Callback));
103 ipconfig_->UpdateProperties(IPConfig::Properties(), success);
104 EXPECT_TRUE(callback_test.called());
105 }
Darin Petkove02b3ca2011-05-31 16:00:44 -0700106}
107
108} // namespace shill