blob: 26a1ed94a185ed0217d97c4cddef5974ebf60478 [file] [log] [blame]
Chris Masone9be4a9d2011-05-16 15:44:09 -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#include <glib.h>
5
6#include <base/callback_old.h>
7#include <base/logging.h>
8#include <base/memory/ref_counted.h>
9#include <base/message_loop.h>
10#include <gtest/gtest.h>
11#include <gmock/gmock.h>
12
Chris Masoned7732e42011-05-20 11:08:56 -070013#include "shill/mock_control.h"
Chris Masone9be4a9d2011-05-16 15:44:09 -070014#include "shill/manager.h"
15#include "shill/mock_device.h"
16#include "shill/mock_service.h"
17
18namespace shill {
19using ::testing::Test;
20using ::testing::_;
21using ::testing::NiceMock;
22using ::testing::Return;
23using std::vector;
24
25class ManagerTest : public Test {
26 public:
27 ManagerTest()
28 : manager_(&control_, &dispatcher_),
29 factory_(this) {
30 }
31
32 bool IsDeviceRegistered(Device *device, Device::Technology tech) {
Chris Masonec1e50412011-06-07 13:04:53 -070033 vector<DeviceRefPtr> devices;
Chris Masone9be4a9d2011-05-16 15:44:09 -070034 manager_.FilterByTechnology(tech, &devices);
35 return (devices.size() == 1 && devices[0].get() == device);
36 }
37
Paul Stewartf1ce5d22011-05-19 13:10:20 -070038 protected:
Chris Masoned7732e42011-05-20 11:08:56 -070039 MockControl control_;
Chris Masone9be4a9d2011-05-16 15:44:09 -070040 Manager manager_;
41 EventDispatcher dispatcher_;
42 ScopedRunnableMethodFactory<ManagerTest> factory_;
43};
44
45TEST_F(ManagerTest, DeviceRegistration) {
Chris Masonea82b7112011-05-25 15:16:29 -070046 scoped_refptr<MockDevice> mock_device(new NiceMock<MockDevice>(&control_,
47 &dispatcher_,
48 &manager_,
49 "null0",
50 -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070051 ON_CALL(*mock_device.get(), TechnologyIs(Device::kEthernet))
52 .WillByDefault(Return(true));
53
Chris Masonea82b7112011-05-25 15:16:29 -070054 scoped_refptr<MockDevice> mock_device2(new NiceMock<MockDevice>(&control_,
55 &dispatcher_,
56 &manager_,
57 "null1",
58 -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070059 ON_CALL(*mock_device2.get(), TechnologyIs(Device::kWifi))
60 .WillByDefault(Return(true));
61
62 manager_.RegisterDevice(mock_device.get());
63 manager_.RegisterDevice(mock_device2.get());
64
65 EXPECT_TRUE(IsDeviceRegistered(mock_device.get(), Device::kEthernet));
66 EXPECT_TRUE(IsDeviceRegistered(mock_device2.get(), Device::kWifi));
67}
68
69TEST_F(ManagerTest, DeviceDeregistration) {
Chris Masonea82b7112011-05-25 15:16:29 -070070 scoped_refptr<MockDevice> mock_device(new NiceMock<MockDevice>(&control_,
71 &dispatcher_,
72 &manager_,
73 "null2",
74 -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070075 ON_CALL(*mock_device.get(), TechnologyIs(Device::kEthernet))
76 .WillByDefault(Return(true));
77
Chris Masonea82b7112011-05-25 15:16:29 -070078 scoped_refptr<MockDevice> mock_device2(new NiceMock<MockDevice>(&control_,
79 &dispatcher_,
80 &manager_,
81 "null2",
82 -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070083 ON_CALL(*mock_device2.get(), TechnologyIs(Device::kWifi))
84 .WillByDefault(Return(true));
85
86 manager_.RegisterDevice(mock_device.get());
87 manager_.RegisterDevice(mock_device2.get());
88
89 ASSERT_TRUE(IsDeviceRegistered(mock_device.get(), Device::kEthernet));
90 ASSERT_TRUE(IsDeviceRegistered(mock_device2.get(), Device::kWifi));
91
92 manager_.DeregisterDevice(mock_device.get());
93 EXPECT_FALSE(IsDeviceRegistered(mock_device.get(), Device::kEthernet));
94
95 manager_.DeregisterDevice(mock_device2.get());
96 EXPECT_FALSE(IsDeviceRegistered(mock_device2.get(), Device::kWifi));
97}
98
99TEST_F(ManagerTest, ServiceRegistration) {
Chris Masonea82b7112011-05-25 15:16:29 -0700100 scoped_refptr<MockDevice> device(new MockDevice(&control_,
101 &dispatcher_,
102 &manager_,
103 "null3",
104 -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -0700105 const char kService1[] = "service1";
106 const char kService2[] = "wifi_service2";
107 scoped_refptr<MockService> mock_service(
Chris Masonea82b7112011-05-25 15:16:29 -0700108 new NiceMock<MockService>(&control_,
109 &dispatcher_,
110 device.get(),
111 kService1));
Chris Masone9be4a9d2011-05-16 15:44:09 -0700112
113 scoped_refptr<MockService> mock_service2(
Chris Masonea82b7112011-05-25 15:16:29 -0700114 new NiceMock<MockService>(&control_,
115 &dispatcher_,
116 device.get(),
117 kService2));
Chris Masone9be4a9d2011-05-16 15:44:09 -0700118
Chris Masonee0dea762011-06-09 09:06:03 -0700119 manager_.RegisterService(mock_service);
120 manager_.RegisterService(mock_service2);
Chris Masone9be4a9d2011-05-16 15:44:09 -0700121
Chris Masonee0dea762011-06-09 09:06:03 -0700122 EXPECT_TRUE(manager_.FindService(kService1).get() != NULL);
123 EXPECT_TRUE(manager_.FindService(kService2).get() != NULL);
Chris Masone9be4a9d2011-05-16 15:44:09 -0700124}
125
126} // namespace shill