blob: 537ee4cdaa04a8abb0b25e21f4b3d334e3996a16 [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
Paul Stewartbc14fb72013-07-30 08:21:58 -070011#include "shill/key_value_store.h"
Paul Stewart35eff132013-04-12 12:08:40 -070012#include "shill/mock_control.h"
13#include "shill/mock_ethernet.h"
14#include "shill/mock_event_dispatcher.h"
15#include "shill/mock_manager.h"
16#include "shill/mock_metrics.h"
17
18using testing::_;
19using testing::Mock;
20using testing::SaveArg;
21
22namespace shill {
23
24class EthernetEapProviderTest : public testing::Test {
25 public:
26 EthernetEapProviderTest()
27 : metrics_(&dispatcher_),
28 manager_(&control_, &dispatcher_, &metrics_, NULL),
29 provider_(&control_, &dispatcher_, &metrics_, &manager_) {}
30 virtual ~EthernetEapProviderTest() {}
31
32 MOCK_METHOD0(Callback0, void());
33 MOCK_METHOD0(Callback1, void());
34
35 protected:
36 const EthernetEapProvider::CallbackMap &CallbackMap() {
37 return provider_.callback_map_;
38 }
39
40 MockControl control_;
41 MockEventDispatcher dispatcher_;
42 MockMetrics metrics_;
43 MockManager manager_;
44 EthernetEapProvider provider_;
45};
46
47TEST_F(EthernetEapProviderTest, Construct) {
48 EXPECT_EQ(ServiceRefPtr(), provider_.service());
49 EXPECT_TRUE(CallbackMap().empty());
50}
51
52TEST_F(EthernetEapProviderTest, StartAndStop) {
53 ServiceRefPtr service;
54 EXPECT_CALL(manager_, RegisterService(_)).WillOnce(SaveArg<0>(&service));
55 provider_.Start();
56 EXPECT_NE(ServiceRefPtr(), provider_.service());
57 EXPECT_EQ(service, provider_.service());
58
59 EXPECT_CALL(manager_, DeregisterService(service));
60 provider_.Stop();
61 EXPECT_EQ(service, provider_.service());
62
63 // Provider re-uses the same service on restart.
64 EXPECT_CALL(manager_, RegisterService(service));
65 provider_.Start();
66 Mock::VerifyAndClearExpectations(&manager_);
67}
68
69TEST_F(EthernetEapProviderTest, CredentialChangeCallback) {
70 EXPECT_CALL(*this, Callback0()).Times(0);
71 EXPECT_CALL(*this, Callback1()).Times(0);
72 provider_.OnCredentialsChanged();
73
74 scoped_refptr<MockEthernet> device0 = new MockEthernet(&control_,
75 &dispatcher_,
76 &metrics_,
77 &manager_,
78 "eth0",
79 "addr0",
80 0);
81 EthernetEapProvider::CredentialChangeCallback callback0 =
82 base::Bind(&EthernetEapProviderTest::Callback0,
83 base::Unretained(this));
84
85 provider_.SetCredentialChangeCallback(device0, callback0);
86 EXPECT_CALL(*this, Callback0());
87 EXPECT_CALL(*this, Callback1()).Times(0);
88 provider_.OnCredentialsChanged();
89
90 scoped_refptr<MockEthernet> device1 = new MockEthernet(&control_,
91 &dispatcher_,
92 &metrics_,
93 &manager_,
94 "eth1",
95 "addr1",
96 1);
97 EthernetEapProvider::CredentialChangeCallback callback1 =
98 base::Bind(&EthernetEapProviderTest::Callback1,
99 base::Unretained(this));
100
101 provider_.SetCredentialChangeCallback(device1, callback1);
102 EXPECT_CALL(*this, Callback0());
103 EXPECT_CALL(*this, Callback1());
104 provider_.OnCredentialsChanged();
105
106 provider_.SetCredentialChangeCallback(device1, callback0);
107 EXPECT_CALL(*this, Callback0()).Times(2);
108 EXPECT_CALL(*this, Callback1()).Times(0);
109 provider_.OnCredentialsChanged();
110
111 provider_.ClearCredentialChangeCallback(device0);
112 EXPECT_CALL(*this, Callback0());
113 EXPECT_CALL(*this, Callback1()).Times(0);
114 provider_.OnCredentialsChanged();
115
116 provider_.ClearCredentialChangeCallback(device1);
117 EXPECT_CALL(*this, Callback0()).Times(0);
118 EXPECT_CALL(*this, Callback1()).Times(0);
119 provider_.OnCredentialsChanged();
120}
121
Paul Stewartbc14fb72013-07-30 08:21:58 -0700122TEST_F(EthernetEapProviderTest, ServiceConstructors) {
123 ServiceRefPtr service;
124 EXPECT_CALL(manager_, RegisterService(_)).WillOnce(SaveArg<0>(&service));
125 provider_.Start();
126 KeyValueStore args;
Ben Chan783f00b2013-09-20 13:50:34 -0700127 args.SetString(kTypeProperty, kTypeEthernetEap);
Paul Stewartbc14fb72013-07-30 08:21:58 -0700128 {
129 Error error;
130 EXPECT_EQ(service, provider_.GetService(args, &error));
131 EXPECT_TRUE(error.IsSuccess());
132 }
133 {
134 Error error;
135 EXPECT_EQ(service, provider_.FindSimilarService(args, &error));
136 EXPECT_TRUE(error.IsSuccess());
137 }
138 {
139 Error error;
140 Mock::VerifyAndClearExpectations(&manager_);
141 EXPECT_CALL(manager_, RegisterService(_)).Times(0);
142 ServiceRefPtr temp_service = provider_.CreateTemporaryService(args, &error);
143 EXPECT_TRUE(error.IsSuccess());
144 // Returned service should be non-NULL but not the provider's own service.
145 EXPECT_NE(ServiceRefPtr(), temp_service);
146 EXPECT_NE(service, temp_service);
147 }
148}
149
Paul Stewart35eff132013-04-12 12:08:40 -0700150} // namespace shill