blob: 7409d8d0cfa0313da6257514379944bdf0701552 [file] [log] [blame]
Paul Stewart35eff132013-04-12 12:08:40 -07001// Copyright (c) 2013 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/ethernet_eap_provider.h"
6
7#include <base/bind.h>
8#include <gmock/gmock.h>
9#include <gtest/gtest.h>
10
11#include "shill/mock_control.h"
12#include "shill/mock_ethernet.h"
13#include "shill/mock_event_dispatcher.h"
14#include "shill/mock_manager.h"
15#include "shill/mock_metrics.h"
16
17using testing::_;
18using testing::Mock;
19using testing::SaveArg;
20
21namespace shill {
22
23class EthernetEapProviderTest : public testing::Test {
24 public:
25 EthernetEapProviderTest()
26 : metrics_(&dispatcher_),
27 manager_(&control_, &dispatcher_, &metrics_, NULL),
28 provider_(&control_, &dispatcher_, &metrics_, &manager_) {}
29 virtual ~EthernetEapProviderTest() {}
30
31 MOCK_METHOD0(Callback0, void());
32 MOCK_METHOD0(Callback1, void());
33
34 protected:
35 const EthernetEapProvider::CallbackMap &CallbackMap() {
36 return provider_.callback_map_;
37 }
38
39 MockControl control_;
40 MockEventDispatcher dispatcher_;
41 MockMetrics metrics_;
42 MockManager manager_;
43 EthernetEapProvider provider_;
44};
45
46TEST_F(EthernetEapProviderTest, Construct) {
47 EXPECT_EQ(ServiceRefPtr(), provider_.service());
48 EXPECT_TRUE(CallbackMap().empty());
49}
50
51TEST_F(EthernetEapProviderTest, StartAndStop) {
52 ServiceRefPtr service;
53 EXPECT_CALL(manager_, RegisterService(_)).WillOnce(SaveArg<0>(&service));
54 provider_.Start();
55 EXPECT_NE(ServiceRefPtr(), provider_.service());
56 EXPECT_EQ(service, provider_.service());
57
58 EXPECT_CALL(manager_, DeregisterService(service));
59 provider_.Stop();
60 EXPECT_EQ(service, provider_.service());
61
62 // Provider re-uses the same service on restart.
63 EXPECT_CALL(manager_, RegisterService(service));
64 provider_.Start();
65 Mock::VerifyAndClearExpectations(&manager_);
66}
67
68TEST_F(EthernetEapProviderTest, CredentialChangeCallback) {
69 EXPECT_CALL(*this, Callback0()).Times(0);
70 EXPECT_CALL(*this, Callback1()).Times(0);
71 provider_.OnCredentialsChanged();
72
73 scoped_refptr<MockEthernet> device0 = new MockEthernet(&control_,
74 &dispatcher_,
75 &metrics_,
76 &manager_,
77 "eth0",
78 "addr0",
79 0);
80 EthernetEapProvider::CredentialChangeCallback callback0 =
81 base::Bind(&EthernetEapProviderTest::Callback0,
82 base::Unretained(this));
83
84 provider_.SetCredentialChangeCallback(device0, callback0);
85 EXPECT_CALL(*this, Callback0());
86 EXPECT_CALL(*this, Callback1()).Times(0);
87 provider_.OnCredentialsChanged();
88
89 scoped_refptr<MockEthernet> device1 = new MockEthernet(&control_,
90 &dispatcher_,
91 &metrics_,
92 &manager_,
93 "eth1",
94 "addr1",
95 1);
96 EthernetEapProvider::CredentialChangeCallback callback1 =
97 base::Bind(&EthernetEapProviderTest::Callback1,
98 base::Unretained(this));
99
100 provider_.SetCredentialChangeCallback(device1, callback1);
101 EXPECT_CALL(*this, Callback0());
102 EXPECT_CALL(*this, Callback1());
103 provider_.OnCredentialsChanged();
104
105 provider_.SetCredentialChangeCallback(device1, callback0);
106 EXPECT_CALL(*this, Callback0()).Times(2);
107 EXPECT_CALL(*this, Callback1()).Times(0);
108 provider_.OnCredentialsChanged();
109
110 provider_.ClearCredentialChangeCallback(device0);
111 EXPECT_CALL(*this, Callback0());
112 EXPECT_CALL(*this, Callback1()).Times(0);
113 provider_.OnCredentialsChanged();
114
115 provider_.ClearCredentialChangeCallback(device1);
116 EXPECT_CALL(*this, Callback0()).Times(0);
117 EXPECT_CALL(*this, Callback1()).Times(0);
118 provider_.OnCredentialsChanged();
119}
120
121} // namespace shill