blob: 60a3e6a6c3e371b15ac022118c72bf0965f2aafd [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) {
33 vector<scoped_refptr<Device> > devices;
34 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) {
46 scoped_refptr<MockDevice> mock_device(
Paul Stewartb50f0b92011-05-16 16:31:42 -070047 new NiceMock<MockDevice>(&control_, &dispatcher_, "null0", -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070048 ON_CALL(*mock_device.get(), TechnologyIs(Device::kEthernet))
49 .WillByDefault(Return(true));
50
51 scoped_refptr<MockDevice> mock_device2(
Paul Stewartb50f0b92011-05-16 16:31:42 -070052 new NiceMock<MockDevice>(&control_, &dispatcher_, "null1", -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070053 ON_CALL(*mock_device2.get(), TechnologyIs(Device::kWifi))
54 .WillByDefault(Return(true));
55
56 manager_.RegisterDevice(mock_device.get());
57 manager_.RegisterDevice(mock_device2.get());
58
59 EXPECT_TRUE(IsDeviceRegistered(mock_device.get(), Device::kEthernet));
60 EXPECT_TRUE(IsDeviceRegistered(mock_device2.get(), Device::kWifi));
61}
62
63TEST_F(ManagerTest, DeviceDeregistration) {
64 scoped_refptr<MockDevice> mock_device(
Paul Stewartb50f0b92011-05-16 16:31:42 -070065 new NiceMock<MockDevice>(&control_, &dispatcher_, "null2", -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070066 ON_CALL(*mock_device.get(), TechnologyIs(Device::kEthernet))
67 .WillByDefault(Return(true));
68
69 scoped_refptr<MockDevice> mock_device2(
Paul Stewartb50f0b92011-05-16 16:31:42 -070070 new NiceMock<MockDevice>(&control_, &dispatcher_, "null2", -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070071 ON_CALL(*mock_device2.get(), TechnologyIs(Device::kWifi))
72 .WillByDefault(Return(true));
73
74 manager_.RegisterDevice(mock_device.get());
75 manager_.RegisterDevice(mock_device2.get());
76
77 ASSERT_TRUE(IsDeviceRegistered(mock_device.get(), Device::kEthernet));
78 ASSERT_TRUE(IsDeviceRegistered(mock_device2.get(), Device::kWifi));
79
80 manager_.DeregisterDevice(mock_device.get());
81 EXPECT_FALSE(IsDeviceRegistered(mock_device.get(), Device::kEthernet));
82
83 manager_.DeregisterDevice(mock_device2.get());
84 EXPECT_FALSE(IsDeviceRegistered(mock_device2.get(), Device::kWifi));
85}
86
87TEST_F(ManagerTest, ServiceRegistration) {
Paul Stewartb50f0b92011-05-16 16:31:42 -070088 scoped_refptr<MockDevice> device(new MockDevice(&control_, &dispatcher_,
89 "null3", -1));
Chris Masone9be4a9d2011-05-16 15:44:09 -070090 const char kService1[] = "service1";
91 const char kService2[] = "wifi_service2";
92 scoped_refptr<MockService> mock_service(
93 new NiceMock<MockService>(&control_, &dispatcher_, device.get()));
94 mock_service->set_name(kService1);
95
96 scoped_refptr<MockService> mock_service2(
97 new NiceMock<MockService>(&control_, &dispatcher_, device.get()));
98 mock_service2->set_name(kService2);
99
100 manager_.RegisterService(mock_service.get());
101 manager_.RegisterService(mock_service2.get());
102
103 EXPECT_TRUE(manager_.FindService(kService1));
104 EXPECT_TRUE(manager_.FindService(kService2));
105}
106
107} // namespace shill