blob: 165cb64f43b7dc26d1485ab560d5deb0c46e25df [file] [log] [blame]
Peter Qiuc0beca52015-09-03 11:25:46 -07001//
2// Copyright (C) 2013 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
Paul Stewart35eff132013-04-12 12:08:40 -070016
Ben Chan87602512014-11-07 20:50:05 -080017#include "shill/ethernet/ethernet_eap_provider.h"
Paul Stewart35eff132013-04-12 12:08:40 -070018
19#include <base/bind.h>
20#include <gmock/gmock.h>
21#include <gtest/gtest.h>
22
Ben Chan87602512014-11-07 20:50:05 -080023#include "shill/ethernet/mock_ethernet.h"
Paul Stewartbc14fb72013-07-30 08:21:58 -070024#include "shill/key_value_store.h"
Paul Stewart35eff132013-04-12 12:08:40 -070025#include "shill/mock_control.h"
Paul Stewart35eff132013-04-12 12:08:40 -070026#include "shill/mock_event_dispatcher.h"
27#include "shill/mock_manager.h"
28#include "shill/mock_metrics.h"
29
30using testing::_;
31using testing::Mock;
32using testing::SaveArg;
33
34namespace shill {
35
36class EthernetEapProviderTest : public testing::Test {
37 public:
38 EthernetEapProviderTest()
39 : metrics_(&dispatcher_),
mukesh agrawalbad1c102015-09-18 16:15:08 -070040 manager_(&control_, &dispatcher_, &metrics_),
Paul Stewart35eff132013-04-12 12:08:40 -070041 provider_(&control_, &dispatcher_, &metrics_, &manager_) {}
42 virtual ~EthernetEapProviderTest() {}
43
44 MOCK_METHOD0(Callback0, void());
45 MOCK_METHOD0(Callback1, void());
46
47 protected:
Paul Stewart7e779d82015-06-16 13:13:10 -070048 const EthernetEapProvider::CallbackMap& CallbackMap() {
Paul Stewart35eff132013-04-12 12:08:40 -070049 return provider_.callback_map_;
50 }
51
52 MockControl control_;
53 MockEventDispatcher dispatcher_;
54 MockMetrics metrics_;
55 MockManager manager_;
56 EthernetEapProvider provider_;
57};
58
59TEST_F(EthernetEapProviderTest, Construct) {
60 EXPECT_EQ(ServiceRefPtr(), provider_.service());
61 EXPECT_TRUE(CallbackMap().empty());
62}
63
64TEST_F(EthernetEapProviderTest, StartAndStop) {
65 ServiceRefPtr service;
66 EXPECT_CALL(manager_, RegisterService(_)).WillOnce(SaveArg<0>(&service));
67 provider_.Start();
68 EXPECT_NE(ServiceRefPtr(), provider_.service());
69 EXPECT_EQ(service, provider_.service());
70
71 EXPECT_CALL(manager_, DeregisterService(service));
72 provider_.Stop();
73 EXPECT_EQ(service, provider_.service());
74
75 // Provider re-uses the same service on restart.
76 EXPECT_CALL(manager_, RegisterService(service));
77 provider_.Start();
78 Mock::VerifyAndClearExpectations(&manager_);
79}
80
81TEST_F(EthernetEapProviderTest, CredentialChangeCallback) {
82 EXPECT_CALL(*this, Callback0()).Times(0);
83 EXPECT_CALL(*this, Callback1()).Times(0);
84 provider_.OnCredentialsChanged();
85
86 scoped_refptr<MockEthernet> device0 = new MockEthernet(&control_,
87 &dispatcher_,
88 &metrics_,
89 &manager_,
90 "eth0",
91 "addr0",
92 0);
93 EthernetEapProvider::CredentialChangeCallback callback0 =
94 base::Bind(&EthernetEapProviderTest::Callback0,
95 base::Unretained(this));
96
Alex Vakulenko0951ccb2014-12-10 12:52:31 -080097 provider_.SetCredentialChangeCallback(device0.get(), callback0);
Paul Stewart35eff132013-04-12 12:08:40 -070098 EXPECT_CALL(*this, Callback0());
99 EXPECT_CALL(*this, Callback1()).Times(0);
100 provider_.OnCredentialsChanged();
101
102 scoped_refptr<MockEthernet> device1 = new MockEthernet(&control_,
103 &dispatcher_,
104 &metrics_,
105 &manager_,
106 "eth1",
107 "addr1",
108 1);
109 EthernetEapProvider::CredentialChangeCallback callback1 =
110 base::Bind(&EthernetEapProviderTest::Callback1,
111 base::Unretained(this));
112
Alex Vakulenko0951ccb2014-12-10 12:52:31 -0800113 provider_.SetCredentialChangeCallback(device1.get(), callback1);
Paul Stewart35eff132013-04-12 12:08:40 -0700114 EXPECT_CALL(*this, Callback0());
115 EXPECT_CALL(*this, Callback1());
116 provider_.OnCredentialsChanged();
117
Alex Vakulenko0951ccb2014-12-10 12:52:31 -0800118 provider_.SetCredentialChangeCallback(device1.get(), callback0);
Paul Stewart35eff132013-04-12 12:08:40 -0700119 EXPECT_CALL(*this, Callback0()).Times(2);
120 EXPECT_CALL(*this, Callback1()).Times(0);
121 provider_.OnCredentialsChanged();
122
Alex Vakulenko0951ccb2014-12-10 12:52:31 -0800123 provider_.ClearCredentialChangeCallback(device0.get());
Paul Stewart35eff132013-04-12 12:08:40 -0700124 EXPECT_CALL(*this, Callback0());
125 EXPECT_CALL(*this, Callback1()).Times(0);
126 provider_.OnCredentialsChanged();
127
Alex Vakulenko0951ccb2014-12-10 12:52:31 -0800128 provider_.ClearCredentialChangeCallback(device1.get());
Paul Stewart35eff132013-04-12 12:08:40 -0700129 EXPECT_CALL(*this, Callback0()).Times(0);
130 EXPECT_CALL(*this, Callback1()).Times(0);
131 provider_.OnCredentialsChanged();
132}
133
Paul Stewartbc14fb72013-07-30 08:21:58 -0700134TEST_F(EthernetEapProviderTest, ServiceConstructors) {
135 ServiceRefPtr service;
136 EXPECT_CALL(manager_, RegisterService(_)).WillOnce(SaveArg<0>(&service));
137 provider_.Start();
138 KeyValueStore args;
Ben Chan783f00b2013-09-20 13:50:34 -0700139 args.SetString(kTypeProperty, kTypeEthernetEap);
Paul Stewartbc14fb72013-07-30 08:21:58 -0700140 {
141 Error error;
142 EXPECT_EQ(service, provider_.GetService(args, &error));
143 EXPECT_TRUE(error.IsSuccess());
144 }
145 {
146 Error error;
147 EXPECT_EQ(service, provider_.FindSimilarService(args, &error));
148 EXPECT_TRUE(error.IsSuccess());
149 }
150 {
151 Error error;
152 Mock::VerifyAndClearExpectations(&manager_);
153 EXPECT_CALL(manager_, RegisterService(_)).Times(0);
154 ServiceRefPtr temp_service = provider_.CreateTemporaryService(args, &error);
155 EXPECT_TRUE(error.IsSuccess());
156 // Returned service should be non-NULL but not the provider's own service.
157 EXPECT_NE(ServiceRefPtr(), temp_service);
158 EXPECT_NE(service, temp_service);
159 }
160}
161
Paul Stewart35eff132013-04-12 12:08:40 -0700162} // namespace shill