blob: 42d2b2a810d877914a3a05191d040ace16b7921e [file] [log] [blame]
mukesh agrawalcbfb34e2013-04-17 19:33:25 -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/service_property_change_test.h"
6
7#include <string>
8
9#include <chromeos/dbus/service_constants.h>
10#include <gtest/gtest.h>
11#include <gmock/gmock.h>
12
13#include "shill/error.h"
14#include "shill/mock_adaptors.h"
mukesh agrawalbebf1b82013-04-23 15:06:33 -070015#include "shill/mock_manager.h"
16#include "shill/mock_profile.h"
17#include "shill/refptr_types.h"
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070018#include "shill/service.h"
19
20using std::string;
21using testing::_;
22using testing::AnyNumber;
23using testing::Mock;
mukesh agrawalbebf1b82013-04-23 15:06:33 -070024using testing::NiceMock;
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070025
26namespace shill {
27
28// Some of these tests are duplicative, as we also have broader tests
29// for specific setters. However, it's convenient to have all the property
30// change notifications documented (and tested) in one place.
31
32void TestCommonPropertyChanges(ServiceRefPtr service,
33 ServiceMockAdaptor *adaptor) {
34 Error error;
35
36 EXPECT_EQ(Service::kStateIdle, service->state());
Ben Chan923a5022013-09-20 11:23:23 -070037 EXPECT_CALL(*adaptor, EmitStringChanged(kStateProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070038 service->SetState(Service::kStateConnected);
39 Mock::VerifyAndClearExpectations(adaptor);
40
Paul Stewartee6b3d72013-07-12 16:07:51 -070041 // TODO(quiche): Once crbug.com/216664 is resolved, add a test
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070042 // that service->SetConnection emits kIPConfigProperty changed.
43
44 bool connectable = service->connectable();
Ben Chan923a5022013-09-20 11:23:23 -070045 EXPECT_CALL(*adaptor, EmitBoolChanged(kConnectableProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070046 service->SetConnectable(!connectable);
47 Mock::VerifyAndClearExpectations(adaptor);
48
49 EXPECT_EQ(string(), service->guid());
Ben Chan923a5022013-09-20 11:23:23 -070050 EXPECT_CALL(*adaptor, EmitStringChanged(kGuidProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070051 service->SetGuid("some garbage", &error);
52 Mock::VerifyAndClearExpectations(adaptor);
53
Paul Stewart2da34c02013-10-17 15:28:56 -070054 // Depending on our caller, AutoConnect may be true.
55 service->ClearAutoConnect(NULL);
56 EXPECT_FALSE(service->auto_connect());
57 EXPECT_CALL(*adaptor, EmitBoolChanged(kAutoConnectProperty, _));
58 service->SetAutoConnect(true);
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070059 Mock::VerifyAndClearExpectations(adaptor);
60
61 EXPECT_EQ(0, service->priority());
Ben Chan923a5022013-09-20 11:23:23 -070062 EXPECT_CALL(*adaptor, EmitIntChanged(kPriorityProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070063 service->SetPriority(1, &error);
64 Mock::VerifyAndClearExpectations(adaptor);
65
66 EXPECT_EQ(string(), service->GetProxyConfig(&error));
Ben Chan923a5022013-09-20 11:23:23 -070067 EXPECT_CALL(*adaptor, EmitStringChanged(kProxyConfigProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070068 service->SetProxyConfig("some garbage", &error);
69 Mock::VerifyAndClearExpectations(adaptor);
70
Ben Chan7fab8972014-08-10 17:14:46 -070071 uint8_t strength = service->strength();
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070072 EXPECT_CALL(*adaptor,
Ben Chan923a5022013-09-20 11:23:23 -070073 EmitUint8Changed(kSignalStrengthProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070074 service->SetStrength(strength+1);
75 Mock::VerifyAndClearExpectations(adaptor);
76
77 EXPECT_EQ(string(), service->error_details());
78 EXPECT_CALL(*adaptor, EmitStringChanged(kErrorDetailsProperty, _));
79 service->SetErrorDetails("some garbage");
80 Mock::VerifyAndClearExpectations(adaptor);
81
82 EXPECT_EQ(Service::kFailureUnknown, service->failure());
83 EXPECT_EQ(Service::ConnectFailureToString(Service::kFailureUnknown),
84 service->error());
Ben Chan923a5022013-09-20 11:23:23 -070085 EXPECT_CALL(*adaptor, EmitStringChanged(kStateProperty, _));
86 EXPECT_CALL(*adaptor, EmitStringChanged(kErrorProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070087 service->SetFailure(Service::kFailureAAA);
88 Mock::VerifyAndClearExpectations(adaptor);
89
90 EXPECT_NE(Service::ConnectFailureToString(Service::kFailureUnknown),
91 service->error());
Ben Chan923a5022013-09-20 11:23:23 -070092 EXPECT_CALL(*adaptor, EmitStringChanged(kStateProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070093 EXPECT_CALL(*adaptor, EmitStringChanged(kErrorDetailsProperty, _));
Ben Chan923a5022013-09-20 11:23:23 -070094 EXPECT_CALL(*adaptor, EmitStringChanged(kErrorProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070095 service->SetState(Service::kStateConnected);
96 Mock::VerifyAndClearExpectations(adaptor);
97
98 EXPECT_EQ(Service::ConnectFailureToString(Service::kFailureUnknown),
99 service->error());
Ben Chan923a5022013-09-20 11:23:23 -0700100 EXPECT_CALL(*adaptor, EmitStringChanged(kStateProperty, _));
101 EXPECT_CALL(*adaptor, EmitStringChanged(kErrorProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -0700102 service->SetFailureSilent(Service::kFailureAAA);
103 Mock::VerifyAndClearExpectations(adaptor);
104}
105
106void TestAutoConnectPropertyChange(ServiceRefPtr service,
107 ServiceMockAdaptor *adaptor) {
108 bool auto_connect = service->auto_connect();
Ben Chan923a5022013-09-20 11:23:23 -0700109 EXPECT_CALL(*adaptor, EmitBoolChanged(kAutoConnectProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -0700110 service->SetAutoConnect(!auto_connect);
111 Mock::VerifyAndClearExpectations(adaptor);
112}
113
114void TestNamePropertyChange(ServiceRefPtr service,
115 ServiceMockAdaptor *adaptor) {
116 Error error;
117 string name = service->GetNameProperty(&error);
Ben Chan923a5022013-09-20 11:23:23 -0700118 EXPECT_CALL(*adaptor, EmitStringChanged(kNameProperty, _));
mukesh agrawalcbfb34e2013-04-17 19:33:25 -0700119 service->SetNameProperty(name + " and some new stuff", &error);
120 Mock::VerifyAndClearExpectations(adaptor);
121}
122
mukesh agrawalbebf1b82013-04-23 15:06:33 -0700123void TestCustomSetterNoopChange(ServiceRefPtr service,
124 MockManager *mock_manager) {
125 // SetAutoConnectFull
126 {
127 Error error;
128 EXPECT_CALL(*mock_manager, UpdateService(_)).Times(0);
129 EXPECT_FALSE(service->SetAutoConnectFull(service->auto_connect(), &error));
130 EXPECT_TRUE(error.IsSuccess());
131 Mock::VerifyAndClearExpectations(mock_manager);
132 }
133
134 // SetCheckPortal
135 {
136 Error error;
137 EXPECT_FALSE(service->SetCheckPortal(service->check_portal_, &error));
138 EXPECT_TRUE(error.IsSuccess());
139 }
140
141 // SetNameProperty
142 {
143 Error error;
144 EXPECT_FALSE(service->SetNameProperty(service->friendly_name_, &error));
145 EXPECT_TRUE(error.IsSuccess());
146 }
147
148 // SetProfileRpcId
149 {
150 Error error;
151 scoped_refptr<MockProfile> profile(
152 new NiceMock<MockProfile>(static_cast<ControlInterface *>(NULL),
153 static_cast<Metrics *>(NULL),
154 static_cast<Manager *>(NULL)));
155 service->set_profile(profile);
156 EXPECT_FALSE(service->SetProfileRpcId(profile->GetRpcIdentifier(),
157 &error));
158 EXPECT_TRUE(error.IsSuccess());
159 }
160
161 // SetProxyConfig
162 {
163 Error error;
164 static const string kProxyConfig = "some opaque blob";
165 // Set to known value.
166 EXPECT_TRUE(service->SetProxyConfig(kProxyConfig, &error));
167 EXPECT_TRUE(error.IsSuccess());
168 // Set to same value.
169 EXPECT_FALSE(service->SetProxyConfig(kProxyConfig, &error));
170 EXPECT_TRUE(error.IsSuccess());
171 }
172}
173
Alex Vakulenko8a532292014-06-16 17:18:44 -0700174} // namespace shill