blob: 6e71b2d946baac07635356a0bb9f509f34bd3877 [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
Darin Petkovefb09c32011-06-07 20:24:17 -07005#include <base/callback_old.h>
Darin Petkovf65e9282011-06-21 14:29:56 -07006#include <gtest/gtest.h>
Darin Petkovefb09c32011-06-07 20:24:17 -07007
Darin Petkove02b3ca2011-05-31 16:00:44 -07008#include "shill/ipconfig.h"
Darin Petkove02b3ca2011-05-31 16:00:44 -07009
Darin Petkovefb09c32011-06-07 20:24:17 -070010using testing::Test;
11
Darin Petkove02b3ca2011-05-31 16:00:44 -070012namespace shill {
Darin Petkove02b3ca2011-05-31 16:00:44 -070013
Darin Petkovf65e9282011-06-21 14:29:56 -070014namespace {
15const char kDeviceName[] = "testdevice";
16} // namespace {}
17
Darin Petkove02b3ca2011-05-31 16:00:44 -070018class IPConfigTest : public Test {
19 public:
Darin Petkovf65e9282011-06-21 14:29:56 -070020 IPConfigTest() : ipconfig_(new IPConfig(kDeviceName)) {}
Darin Petkove02b3ca2011-05-31 16:00:44 -070021
22 protected:
Darin Petkovefb09c32011-06-07 20:24:17 -070023 IPConfigRefPtr ipconfig_;
Darin Petkove02b3ca2011-05-31 16:00:44 -070024};
25
Darin Petkovf65e9282011-06-21 14:29:56 -070026TEST_F(IPConfigTest, DeviceName) {
27 EXPECT_EQ(kDeviceName, ipconfig_->device_name());
Darin Petkovefb09c32011-06-07 20:24:17 -070028}
29
Darin Petkov92c43902011-06-09 20:46:06 -070030TEST_F(IPConfigTest, RequestIP) {
31 EXPECT_FALSE(ipconfig_->RequestIP());
Darin Petkovefb09c32011-06-07 20:24:17 -070032}
33
Darin Petkov92c43902011-06-09 20:46:06 -070034TEST_F(IPConfigTest, RenewIP) {
35 EXPECT_FALSE(ipconfig_->RenewIP());
36}
37
38TEST_F(IPConfigTest, ReleaseIP) {
39 EXPECT_FALSE(ipconfig_->ReleaseIP());
Darin Petkovefb09c32011-06-07 20:24:17 -070040}
41
42TEST_F(IPConfigTest, UpdateProperties) {
43 IPConfig::Properties properties;
44 properties.address = "1.2.3.4";
45 properties.subnet_cidr = 24;
46 properties.broadcast_address = "11.22.33.44";
47 properties.gateway = "5.6.7.8";
48 properties.dns_servers.push_back("10.20.30.40");
49 properties.dns_servers.push_back("20.30.40.50");
50 properties.domain_name = "foo.org";
51 properties.domain_search.push_back("zoo.org");
52 properties.domain_search.push_back("zoo.com");
53 properties.mtu = 700;
Darin Petkovf9b0ca82011-06-20 12:10:23 -070054 ipconfig_->UpdateProperties(properties, true);
Darin Petkovefb09c32011-06-07 20:24:17 -070055 EXPECT_EQ("1.2.3.4", ipconfig_->properties().address);
56 EXPECT_EQ(24, ipconfig_->properties().subnet_cidr);
57 EXPECT_EQ("11.22.33.44", ipconfig_->properties().broadcast_address);
58 EXPECT_EQ("5.6.7.8", ipconfig_->properties().gateway);
59 ASSERT_EQ(2, ipconfig_->properties().dns_servers.size());
60 EXPECT_EQ("10.20.30.40", ipconfig_->properties().dns_servers[0]);
61 EXPECT_EQ("20.30.40.50", ipconfig_->properties().dns_servers[1]);
62 ASSERT_EQ(2, ipconfig_->properties().domain_search.size());
63 EXPECT_EQ("zoo.org", ipconfig_->properties().domain_search[0]);
64 EXPECT_EQ("zoo.com", ipconfig_->properties().domain_search[1]);
65 EXPECT_EQ("foo.org", ipconfig_->properties().domain_name);
66 EXPECT_EQ(700, ipconfig_->properties().mtu);
67}
68
Darin Petkovf9b0ca82011-06-20 12:10:23 -070069namespace {
70
Darin Petkovefb09c32011-06-07 20:24:17 -070071class UpdateCallbackTest {
72 public:
Chris Masone2b105542011-06-22 10:58:09 -070073 UpdateCallbackTest(const IPConfigRefPtr &ipconfig, bool success)
Darin Petkovefb09c32011-06-07 20:24:17 -070074 : ipconfig_(ipconfig),
Darin Petkovf9b0ca82011-06-20 12:10:23 -070075 success_(success),
Darin Petkovefb09c32011-06-07 20:24:17 -070076 called_(false) {}
77
Chris Masone2b105542011-06-22 10:58:09 -070078 void Callback(const IPConfigRefPtr &ipconfig, bool success) {
Darin Petkovefb09c32011-06-07 20:24:17 -070079 called_ = true;
Darin Petkovf9b0ca82011-06-20 12:10:23 -070080 EXPECT_EQ(ipconfig_.get(), ipconfig.get());
81 EXPECT_EQ(success_, success);
Darin Petkovefb09c32011-06-07 20:24:17 -070082 }
83
84 bool called() const { return called_; }
85
86 private:
87 IPConfigRefPtr ipconfig_;
Darin Petkovf9b0ca82011-06-20 12:10:23 -070088 bool success_;
Darin Petkovefb09c32011-06-07 20:24:17 -070089 bool called_;
90};
91
Darin Petkovf9b0ca82011-06-20 12:10:23 -070092} // namespace {}
93
Darin Petkovefb09c32011-06-07 20:24:17 -070094TEST_F(IPConfigTest, UpdateCallback) {
Darin Petkovf9b0ca82011-06-20 12:10:23 -070095 for (int success = 0; success < 2; success++) {
96 UpdateCallbackTest callback_test(ipconfig_, success);
97 ASSERT_FALSE(callback_test.called());
98 ipconfig_->RegisterUpdateCallback(
99 NewCallback(&callback_test, &UpdateCallbackTest::Callback));
100 ipconfig_->UpdateProperties(IPConfig::Properties(), success);
101 EXPECT_TRUE(callback_test.called());
102 }
Darin Petkove02b3ca2011-05-31 16:00:44 -0700103}
104
105} // namespace shill