blob: 82282df49c4f2ff9fa4b3de16809f607adf9df47 [file] [log] [blame]
Darin Petkovb72b62e2012-05-15 16:55:36 +02001// Copyright (c) 2012 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/wimax_provider.h"
6
Darin Petkove4b27022012-05-16 13:28:50 +02007#include <base/stringprintf.h>
Darin Petkov9893d9c2012-05-17 15:27:31 -07008#include <chromeos/dbus/service_constants.h>
Darin Petkovb72b62e2012-05-15 16:55:36 +02009#include <gtest/gtest.h>
10
Darin Petkove4b27022012-05-16 13:28:50 +020011#include "shill/mock_device_info.h"
Darin Petkovb72b62e2012-05-15 16:55:36 +020012#include "shill/mock_manager.h"
13#include "shill/mock_metrics.h"
Darin Petkove4b27022012-05-16 13:28:50 +020014#include "shill/mock_wimax.h"
Darin Petkovb72b62e2012-05-15 16:55:36 +020015#include "shill/mock_wimax_manager_proxy.h"
16#include "shill/nice_mock_control.h"
17#include "shill/proxy_factory.h"
18
19using std::string;
20using std::vector;
21using testing::_;
22using testing::Return;
23
24namespace shill {
25
Darin Petkove4b27022012-05-16 13:28:50 +020026namespace {
Darin Petkove4b27022012-05-16 13:28:50 +020027
28string GetTestLinkName(int index) {
29 return StringPrintf("wm%d", index);
30}
31
32string GetTestPath(int index) {
Darin Petkov9893d9c2012-05-17 15:27:31 -070033 return wimax_manager::kDeviceObjectPathPrefix + GetTestLinkName(index);
Darin Petkove4b27022012-05-16 13:28:50 +020034}
Darin Petkov9893d9c2012-05-17 15:27:31 -070035
Darin Petkove4b27022012-05-16 13:28:50 +020036} // namespace
37
Darin Petkovb72b62e2012-05-15 16:55:36 +020038class WiMaxProviderTest : public testing::Test {
39 public:
40 WiMaxProviderTest()
41 : manager_proxy_(new MockWiMaxManagerProxy()),
Darin Petkovb72b62e2012-05-15 16:55:36 +020042 proxy_factory_(this),
43 manager_(&control_, NULL, &metrics_, NULL),
Darin Petkove4b27022012-05-16 13:28:50 +020044 device_info_(&control_, NULL, &metrics_, &manager_),
Darin Petkovb72b62e2012-05-15 16:55:36 +020045 provider_(&control_, NULL, &metrics_, &manager_) {}
46
47 virtual ~WiMaxProviderTest() {}
48
49 protected:
50 class TestProxyFactory : public ProxyFactory {
51 public:
52 explicit TestProxyFactory(WiMaxProviderTest *test) : test_(test) {}
53
Darin Petkovb72b62e2012-05-15 16:55:36 +020054 virtual WiMaxManagerProxyInterface *CreateWiMaxManagerProxy() {
55 return test_->manager_proxy_.release();
56 }
57
58 private:
59 WiMaxProviderTest *test_;
60
61 DISALLOW_COPY_AND_ASSIGN(TestProxyFactory);
62 };
63
64 virtual void SetUp() {
65 provider_.proxy_factory_ = &proxy_factory_;
66 }
67
68 virtual void TearDown() {
Darin Petkove4b27022012-05-16 13:28:50 +020069 provider_.devices_.clear();
Darin Petkovb72b62e2012-05-15 16:55:36 +020070 provider_.proxy_factory_ = NULL;
71 }
72
73 scoped_ptr<MockWiMaxManagerProxy> manager_proxy_;
Darin Petkovb72b62e2012-05-15 16:55:36 +020074 TestProxyFactory proxy_factory_;
75 NiceMockControl control_;
76 MockMetrics metrics_;
77 MockManager manager_;
Darin Petkove4b27022012-05-16 13:28:50 +020078 MockDeviceInfo device_info_;
Darin Petkovb72b62e2012-05-15 16:55:36 +020079 WiMaxProvider provider_;
80};
81
82TEST_F(WiMaxProviderTest, StartStop) {
83 EXPECT_FALSE(provider_.manager_proxy_.get());
Darin Petkov9893d9c2012-05-17 15:27:31 -070084 EXPECT_CALL(*manager_proxy_, set_devices_changed_callback(_)).Times(1);
85 EXPECT_CALL(*manager_proxy_, Devices(_)).WillOnce(Return(RpcIdentifiers()));
Darin Petkovb72b62e2012-05-15 16:55:36 +020086 provider_.Start();
87 EXPECT_TRUE(provider_.manager_proxy_.get());
Darin Petkovb72b62e2012-05-15 16:55:36 +020088 provider_.Start();
89 EXPECT_TRUE(provider_.manager_proxy_.get());
Darin Petkove4b27022012-05-16 13:28:50 +020090 provider_.pending_devices_[GetTestLinkName(2)] = GetTestPath(2);
Darin Petkovb72b62e2012-05-15 16:55:36 +020091 provider_.Stop();
92 EXPECT_FALSE(provider_.manager_proxy_.get());
Darin Petkove4b27022012-05-16 13:28:50 +020093 EXPECT_TRUE(provider_.pending_devices_.empty());
Darin Petkovb72b62e2012-05-15 16:55:36 +020094 provider_.Stop();
95}
96
Darin Petkov9893d9c2012-05-17 15:27:31 -070097TEST_F(WiMaxProviderTest, OnDevicesChanged) {
Darin Petkove4b27022012-05-16 13:28:50 +020098 EXPECT_CALL(manager_, device_info()).WillRepeatedly(Return(&device_info_));
99
100 provider_.pending_devices_[GetTestLinkName(1)] = GetTestPath(1);
Darin Petkov9893d9c2012-05-17 15:27:31 -0700101 RpcIdentifiers live_devices;
Darin Petkove4b27022012-05-16 13:28:50 +0200102 live_devices.push_back(GetTestPath(2));
103 live_devices.push_back(GetTestPath(3));
104 EXPECT_CALL(device_info_, GetIndex(GetTestLinkName(2))).WillOnce(Return(-1));
105 EXPECT_CALL(device_info_, GetIndex(GetTestLinkName(3))).WillOnce(Return(-1));
Darin Petkov9893d9c2012-05-17 15:27:31 -0700106 provider_.OnDevicesChanged(live_devices);
Darin Petkove4b27022012-05-16 13:28:50 +0200107 ASSERT_EQ(2, provider_.pending_devices_.size());
108 EXPECT_EQ(GetTestPath(2), provider_.pending_devices_[GetTestLinkName(2)]);
109 EXPECT_EQ(GetTestPath(3), provider_.pending_devices_[GetTestLinkName(3)]);
110}
111
112TEST_F(WiMaxProviderTest, OnDeviceInfoAvailable) {
113 EXPECT_CALL(manager_, device_info()).WillRepeatedly(Return(&device_info_));
114
115 provider_.pending_devices_[GetTestLinkName(1)] = GetTestPath(1);
116 EXPECT_CALL(device_info_, GetIndex(GetTestLinkName(1))).WillOnce(Return(1));
117 EXPECT_CALL(device_info_, GetMACAddress(1, _)).WillOnce(Return(true));
118 EXPECT_CALL(device_info_, RegisterDevice(_));
119 provider_.OnDeviceInfoAvailable(GetTestLinkName(1));
120 EXPECT_TRUE(provider_.pending_devices_.empty());
121 ASSERT_EQ(1, provider_.devices_.size());
Darin Petkov0fcd3462012-05-17 11:25:11 +0200122 ASSERT_TRUE(ContainsKey(provider_.devices_, GetTestLinkName(1)));
123 EXPECT_EQ(GetTestLinkName(1),
124 provider_.devices_[GetTestLinkName(1)]->link_name());
Darin Petkove4b27022012-05-16 13:28:50 +0200125}
126
Darin Petkove4b27022012-05-16 13:28:50 +0200127TEST_F(WiMaxProviderTest, CreateDevice) {
128 EXPECT_CALL(manager_, device_info()).WillRepeatedly(Return(&device_info_));
129
130 EXPECT_CALL(device_info_, GetIndex(GetTestLinkName(1))).WillOnce(Return(-1));
131 provider_.CreateDevice(GetTestLinkName(1), GetTestPath(1));
132 EXPECT_TRUE(provider_.devices_.empty());
133 ASSERT_EQ(1, provider_.pending_devices_.size());
134 EXPECT_EQ(GetTestPath(1), provider_.pending_devices_[GetTestLinkName(1)]);
135
136 EXPECT_CALL(device_info_, GetIndex(GetTestLinkName(1))).WillOnce(Return(1));
137 EXPECT_CALL(device_info_, GetMACAddress(1, _)).WillOnce(Return(true));
138 EXPECT_CALL(device_info_, RegisterDevice(_));
139 provider_.CreateDevice(GetTestLinkName(1), GetTestPath(1));
140 EXPECT_TRUE(provider_.pending_devices_.empty());
141 ASSERT_EQ(1, provider_.devices_.size());
Darin Petkov0fcd3462012-05-17 11:25:11 +0200142 ASSERT_TRUE(ContainsKey(provider_.devices_, GetTestLinkName(1)));
143 EXPECT_EQ(GetTestLinkName(1),
144 provider_.devices_[GetTestLinkName(1)]->link_name());
145
146 WiMax *device = provider_.devices_[GetTestLinkName(1)].get();
147 provider_.CreateDevice(GetTestLinkName(1), GetTestPath(1));
148 EXPECT_EQ(device, provider_.devices_[GetTestLinkName(1)].get());
Darin Petkove4b27022012-05-16 13:28:50 +0200149}
150
151TEST_F(WiMaxProviderTest, DestroyDeadDevices) {
152 for (int i = 0; i < 4; i++) {
Darin Petkov0fcd3462012-05-17 11:25:11 +0200153 provider_.devices_[GetTestLinkName(i)] =
154 new MockWiMax(&control_, NULL, &metrics_, &manager_,
155 GetTestLinkName(i), "", i, GetTestPath(i));
Darin Petkove4b27022012-05-16 13:28:50 +0200156 }
157 for (int i = 4; i < 8; i++) {
158 provider_.pending_devices_[GetTestLinkName(i)] = GetTestPath(i);
159 }
Darin Petkov9893d9c2012-05-17 15:27:31 -0700160 RpcIdentifiers live_devices;
Darin Petkove4b27022012-05-16 13:28:50 +0200161 live_devices.push_back(GetTestPath(0));
162 live_devices.push_back(GetTestPath(3));
163 live_devices.push_back(GetTestPath(4));
164 live_devices.push_back(GetTestPath(7));
165 live_devices.push_back(GetTestPath(123));
166 EXPECT_CALL(manager_, device_info())
167 .Times(2)
168 .WillRepeatedly(Return(&device_info_));
169 EXPECT_CALL(device_info_, DeregisterDevice(_)).Times(2);
170 provider_.DestroyDeadDevices(live_devices);
171 ASSERT_EQ(2, provider_.devices_.size());
Darin Petkov0fcd3462012-05-17 11:25:11 +0200172 EXPECT_TRUE(ContainsKey(provider_.devices_, GetTestLinkName(0)));
173 EXPECT_TRUE(ContainsKey(provider_.devices_, GetTestLinkName(3)));
Darin Petkove4b27022012-05-16 13:28:50 +0200174 EXPECT_EQ(2, provider_.pending_devices_.size());
175 EXPECT_TRUE(ContainsKey(provider_.pending_devices_, GetTestLinkName(4)));
176 EXPECT_TRUE(ContainsKey(provider_.pending_devices_, GetTestLinkName(7)));
177}
178
179TEST_F(WiMaxProviderTest, GetLinkName) {
180 EXPECT_EQ("", provider_.GetLinkName("/random/path"));
181 EXPECT_EQ(GetTestLinkName(1), provider_.GetLinkName(GetTestPath(1)));
182}
183
Darin Petkovb72b62e2012-05-15 16:55:36 +0200184} // namespace shill