wimax_unittest.cc revision 912f0de92ca103568821e20412b7dc2529494f98
1c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan// Use of this source code is governed by a BSD-style license that can be
3c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan// found in the LICENSE file.
4c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
5c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/wimax.h"
6c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
7c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include <gtest/gtest.h>
8c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
9c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/event_dispatcher.h"
10c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_glib.h"
11c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_manager.h"
12c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/mock_metrics.h"
13b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov#include "shill/mock_wimax_device_proxy.h"
14c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan#include "shill/nice_mock_control.h"
15b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov#include "shill/proxy_factory.h"
16b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
17b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkovusing std::string;
18912f0de92ca103568821e20412b7dc2529494f98Darin Petkovusing testing::_;
19c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
20c07362bebe25b1db1716c24ed340b46b309868e5Ben Channamespace shill {
21c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
22c07362bebe25b1db1716c24ed340b46b309868e5Ben Channamespace {
23c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
24c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanconst char kTestLinkName[] = "wm0";
254e64d2d72eed1947ab1d15e6ce25a47c37a9e10cBen Chanconst char kTestAddress[] = "01:23:45:67:89:ab";
26c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanconst int kTestInterfaceIndex = 5;
27b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkovconst char kTestPath[] = "/org/chromium/WiMaxManager/Device/6";
28c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
29c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan}  // namespace
30c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
31c07362bebe25b1db1716c24ed340b46b309868e5Ben Chanclass WiMaxTest : public testing::Test {
32c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan public:
33c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  WiMaxTest()
34b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov      : proxy_(new MockWiMaxDeviceProxy()),
35b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov        proxy_factory_(this),
36b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov        manager_(&control_, &dispatcher_, &metrics_, &glib_),
37c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan        wimax_(new WiMax(&control_, &dispatcher_, &metrics_, &manager_,
384e64d2d72eed1947ab1d15e6ce25a47c37a9e10cBen Chan                         kTestLinkName, kTestAddress, kTestInterfaceIndex,
394e64d2d72eed1947ab1d15e6ce25a47c37a9e10cBen Chan                         kTestPath)) {}
40c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
41c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  virtual ~WiMaxTest() {}
42c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
43c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan protected:
44b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  class TestProxyFactory : public ProxyFactory {
45b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov   public:
46b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov    explicit TestProxyFactory(WiMaxTest *test) : test_(test) {}
47b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
48b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov    virtual WiMaxDeviceProxyInterface *CreateWiMaxDeviceProxy(
49b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov        const string &/*path*/) {
50b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov      return test_->proxy_.release();
51b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov    }
52b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
53b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov   private:
54b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov    WiMaxTest *test_;
55b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
56b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov    DISALLOW_COPY_AND_ASSIGN(TestProxyFactory);
57b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  };
58b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
59b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  virtual void SetUp() {
60b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov    wimax_->proxy_factory_ = &proxy_factory_;
61b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  }
62b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
63b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  virtual void TearDown() {
64b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov    wimax_->proxy_factory_ = NULL;
65b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  }
66b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
67b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  scoped_ptr<MockWiMaxDeviceProxy> proxy_;
68b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  TestProxyFactory proxy_factory_;
69c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  NiceMockControl control_;
70c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  EventDispatcher dispatcher_;
71c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  MockMetrics metrics_;
72c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  MockGLib glib_;
73c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  MockManager manager_;
74c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  WiMaxRefPtr wimax_;
75c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan};
76c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
77b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin PetkovTEST_F(WiMaxTest, Constructor) {
78b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  EXPECT_EQ(kTestPath, wimax_->path());
79b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov}
80b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
81c07362bebe25b1db1716c24ed340b46b309868e5Ben ChanTEST_F(WiMaxTest, TechnologyIs) {
82c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  EXPECT_TRUE(wimax_->TechnologyIs(Technology::kWiMax));
83c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan  EXPECT_FALSE(wimax_->TechnologyIs(Technology::kEthernet));
84c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan}
85c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan
86b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin PetkovTEST_F(WiMaxTest, StartStop) {
87b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  EXPECT_FALSE(wimax_->proxy_.get());
88912f0de92ca103568821e20412b7dc2529494f98Darin Petkov  EXPECT_CALL(*proxy_, Enable(_, _, _));
89912f0de92ca103568821e20412b7dc2529494f98Darin Petkov  EXPECT_CALL(*proxy_, Disable(_, _, _));
90b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  wimax_->Start(NULL, EnabledStateChangedCallback());
91b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  EXPECT_TRUE(wimax_->proxy_.get());
92b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov  wimax_->Stop(NULL, EnabledStateChangedCallback());
93b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov}
94b72b62ec23d13c8e84a1499a04231b79d4bd74bbDarin Petkov
95c07362bebe25b1db1716c24ed340b46b309868e5Ben Chan}  // namespace shill
96