blob: 2b21501f0b2aedb07cd1f428e3cf0098b1fdd275 [file] [log] [blame]
Ben Chanc07362b2012-05-12 10:54:11 -07001// 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.h"
6
Darin Petkovd1cd7972012-05-22 15:26:15 +02007#include <string>
Darin Petkovd1cd7972012-05-22 15:26:15 +02008
Darin Petkov9893d9c2012-05-17 15:27:31 -07009#include <base/stringprintf.h>
Ben Chanc07362b2012-05-12 10:54:11 -070010#include <gtest/gtest.h>
11
12#include "shill/event_dispatcher.h"
Ben Chanc07362b2012-05-12 10:54:11 -070013#include "shill/mock_manager.h"
14#include "shill/mock_metrics.h"
Darin Petkovb72b62e2012-05-15 16:55:36 +020015#include "shill/mock_wimax_device_proxy.h"
Darin Petkovc63dcf02012-05-24 11:51:43 +020016#include "shill/mock_wimax_provider.h"
Darin Petkov9893d9c2012-05-17 15:27:31 -070017#include "shill/mock_wimax_service.h"
Ben Chanc07362b2012-05-12 10:54:11 -070018#include "shill/nice_mock_control.h"
Darin Petkovb72b62e2012-05-15 16:55:36 +020019#include "shill/proxy_factory.h"
20
21using std::string;
Darin Petkov912f0de2012-05-16 14:12:14 +020022using testing::_;
Darin Petkov8ea0eaf2012-05-29 11:21:33 +020023using testing::NiceMock;
Darin Petkov9893d9c2012-05-17 15:27:31 -070024using testing::Return;
Ben Chanc07362b2012-05-12 10:54:11 -070025
26namespace shill {
27
28namespace {
29
30const char kTestLinkName[] = "wm0";
Ben Chan4e64d2d2012-05-16 00:02:25 -070031const char kTestAddress[] = "01:23:45:67:89:ab";
Ben Chanc07362b2012-05-12 10:54:11 -070032const int kTestInterfaceIndex = 5;
Darin Petkovb72b62e2012-05-15 16:55:36 +020033const char kTestPath[] = "/org/chromium/WiMaxManager/Device/6";
Ben Chanc07362b2012-05-12 10:54:11 -070034
35} // namespace
36
37class WiMaxTest : public testing::Test {
38 public:
39 WiMaxTest()
Darin Petkovb72b62e2012-05-15 16:55:36 +020040 : proxy_(new MockWiMaxDeviceProxy()),
41 proxy_factory_(this),
Darin Petkovc63dcf02012-05-24 11:51:43 +020042 manager_(&control_, &dispatcher_, &metrics_, NULL),
Darin Petkovd1cd7972012-05-22 15:26:15 +020043 device_(new WiMax(&control_, &dispatcher_, &metrics_, &manager_,
44 kTestLinkName, kTestAddress, kTestInterfaceIndex,
45 kTestPath)) {}
Ben Chanc07362b2012-05-12 10:54:11 -070046
47 virtual ~WiMaxTest() {}
48
49 protected:
Darin Petkovb72b62e2012-05-15 16:55:36 +020050 class TestProxyFactory : public ProxyFactory {
51 public:
52 explicit TestProxyFactory(WiMaxTest *test) : test_(test) {}
53
54 virtual WiMaxDeviceProxyInterface *CreateWiMaxDeviceProxy(
55 const string &/*path*/) {
56 return test_->proxy_.release();
57 }
58
59 private:
60 WiMaxTest *test_;
61
62 DISALLOW_COPY_AND_ASSIGN(TestProxyFactory);
63 };
64
65 virtual void SetUp() {
Darin Petkovd1cd7972012-05-22 15:26:15 +020066 device_->proxy_factory_ = &proxy_factory_;
Darin Petkovb72b62e2012-05-15 16:55:36 +020067 }
68
69 virtual void TearDown() {
Darin Petkovc63dcf02012-05-24 11:51:43 +020070 device_->SelectService(NULL);
71 device_->pending_service_ = NULL;
Darin Petkovd1cd7972012-05-22 15:26:15 +020072 device_->proxy_factory_ = NULL;
Darin Petkovb72b62e2012-05-15 16:55:36 +020073 }
74
75 scoped_ptr<MockWiMaxDeviceProxy> proxy_;
76 TestProxyFactory proxy_factory_;
Ben Chanc07362b2012-05-12 10:54:11 -070077 NiceMockControl control_;
78 EventDispatcher dispatcher_;
79 MockMetrics metrics_;
Ben Chanc07362b2012-05-12 10:54:11 -070080 MockManager manager_;
Darin Petkovd1cd7972012-05-22 15:26:15 +020081 WiMaxRefPtr device_;
Ben Chanc07362b2012-05-12 10:54:11 -070082};
83
Darin Petkovb72b62e2012-05-15 16:55:36 +020084TEST_F(WiMaxTest, Constructor) {
Darin Petkovd1cd7972012-05-22 15:26:15 +020085 EXPECT_EQ(kTestPath, device_->path());
86 EXPECT_FALSE(device_->scanning());
Darin Petkovb72b62e2012-05-15 16:55:36 +020087}
88
Ben Chanc07362b2012-05-12 10:54:11 -070089TEST_F(WiMaxTest, TechnologyIs) {
Darin Petkovd1cd7972012-05-22 15:26:15 +020090 EXPECT_TRUE(device_->TechnologyIs(Technology::kWiMax));
91 EXPECT_FALSE(device_->TechnologyIs(Technology::kEthernet));
Ben Chanc07362b2012-05-12 10:54:11 -070092}
93
Darin Petkovb72b62e2012-05-15 16:55:36 +020094TEST_F(WiMaxTest, StartStop) {
Darin Petkovd1cd7972012-05-22 15:26:15 +020095 EXPECT_FALSE(device_->proxy_.get());
Darin Petkov912f0de2012-05-16 14:12:14 +020096 EXPECT_CALL(*proxy_, Enable(_, _, _));
Darin Petkov9893d9c2012-05-17 15:27:31 -070097 EXPECT_CALL(*proxy_, set_networks_changed_callback(_));
Darin Petkov8ea0eaf2012-05-29 11:21:33 +020098 EXPECT_CALL(*proxy_, set_status_changed_callback(_));
Darin Petkov912f0de2012-05-16 14:12:14 +020099 EXPECT_CALL(*proxy_, Disable(_, _, _));
Darin Petkovd1cd7972012-05-22 15:26:15 +0200100 device_->Start(NULL, EnabledStateChangedCallback());
Darin Petkovc63dcf02012-05-24 11:51:43 +0200101 ASSERT_TRUE(device_->proxy_.get());
Darin Petkovd1cd7972012-05-22 15:26:15 +0200102
Darin Petkovc63dcf02012-05-24 11:51:43 +0200103 device_->networks_.insert("path");
104 MockWiMaxProvider provider;
105 EXPECT_CALL(manager_, wimax_provider()).WillOnce(Return(&provider));
106 EXPECT_CALL(provider, OnNetworksChanged());
Darin Petkovd1cd7972012-05-22 15:26:15 +0200107 device_->Stop(NULL, EnabledStateChangedCallback());
108 EXPECT_TRUE(device_->networks_.empty());
Darin Petkovd1cd7972012-05-22 15:26:15 +0200109}
110
Darin Petkovc63dcf02012-05-24 11:51:43 +0200111TEST_F(WiMaxTest, OnServiceStopped) {
Darin Petkov8ea0eaf2012-05-29 11:21:33 +0200112 scoped_refptr<NiceMock<MockWiMaxService> > service0(
113 new NiceMock<MockWiMaxService>(
114 &control_,
115 reinterpret_cast<EventDispatcher *>(NULL),
116 &metrics_,
117 &manager_));
Darin Petkovc63dcf02012-05-24 11:51:43 +0200118 scoped_refptr<MockWiMaxService> service1(
119 new MockWiMaxService(&control_, NULL, &metrics_, &manager_));
120 device_->SelectService(service0);
121 device_->pending_service_ = service1;
Darin Petkovd1cd7972012-05-22 15:26:15 +0200122
Darin Petkovc63dcf02012-05-24 11:51:43 +0200123 device_->OnServiceStopped(NULL);
Darin Petkovd1cd7972012-05-22 15:26:15 +0200124 EXPECT_TRUE(device_->selected_service());
125 EXPECT_TRUE(device_->pending_service_);
126
Darin Petkovc63dcf02012-05-24 11:51:43 +0200127 device_->OnServiceStopped(service0);
Darin Petkovd1cd7972012-05-22 15:26:15 +0200128 EXPECT_FALSE(device_->selected_service());
Darin Petkovc63dcf02012-05-24 11:51:43 +0200129 EXPECT_TRUE(device_->pending_service_);
Darin Petkovd1cd7972012-05-22 15:26:15 +0200130
Darin Petkovc63dcf02012-05-24 11:51:43 +0200131 device_->OnServiceStopped(service1);
132 EXPECT_FALSE(device_->selected_service());
133 EXPECT_FALSE(device_->pending_service_);
Darin Petkovb72b62e2012-05-15 16:55:36 +0200134}
135
Darin Petkov9893d9c2012-05-17 15:27:31 -0700136TEST_F(WiMaxTest, OnNetworksChanged) {
Darin Petkovc63dcf02012-05-24 11:51:43 +0200137 MockWiMaxProvider provider;
138 EXPECT_CALL(manager_, wimax_provider()).WillOnce(Return(&provider));
139 EXPECT_CALL(provider, OnNetworksChanged());
140 device_->networks_.insert("foo");
Darin Petkovd1cd7972012-05-22 15:26:15 +0200141 RpcIdentifiers networks;
Darin Petkovc63dcf02012-05-24 11:51:43 +0200142 networks.push_back("bar");
143 networks.push_back("zoo");
144 networks.push_back("bar");
Darin Petkovd1cd7972012-05-22 15:26:15 +0200145 device_->OnNetworksChanged(networks);
Darin Petkovc63dcf02012-05-24 11:51:43 +0200146 EXPECT_EQ(2, device_->networks_.size());
147 EXPECT_TRUE(ContainsKey(device_->networks_, "bar"));
148 EXPECT_TRUE(ContainsKey(device_->networks_, "zoo"));
Darin Petkov9893d9c2012-05-17 15:27:31 -0700149}
150
Darin Petkov8ea0eaf2012-05-29 11:21:33 +0200151TEST_F(WiMaxTest, OnConnectComplete) {
152 scoped_refptr<MockWiMaxService> service(
153 new MockWiMaxService(&control_, NULL, &metrics_, &manager_));
154 device_->pending_service_ = service;
155 EXPECT_CALL(*service, SetState(_)).Times(0);
156 EXPECT_TRUE(device_->pending_service_);
157 EXPECT_CALL(*service, SetState(Service::kStateFailure));
158 device_->OnConnectComplete(Error(Error::kOperationFailed));
159 EXPECT_FALSE(device_->pending_service_);
160}
161
Ben Chanc07362b2012-05-12 10:54:11 -0700162} // namespace shill