blob: 79c8abb905a16a25754bd24cf6b76fadfc1a0621 [file] [log] [blame]
Paul Stewartcf199de2012-08-16 07:50:41 -07001// Copyright (c) 2012 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
Ben Chan87602512014-11-07 20:50:05 -08005#include "shill/ethernet/ethernet_service.h"
Paul Stewartcf199de2012-08-16 07:50:41 -07006
7#include <gmock/gmock.h>
8#include <gtest/gtest.h>
9
Ben Chan87602512014-11-07 20:50:05 -080010#include "shill/ethernet/mock_ethernet.h"
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070011#include "shill/mock_adaptors.h"
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070012#include "shill/mock_manager.h"
Paul Stewart000f0332013-10-25 13:30:28 -070013#include "shill/mock_store.h"
Paul Stewartcf199de2012-08-16 07:50:41 -070014#include "shill/property_store_unittest.h"
15#include "shill/refptr_types.h"
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070016#include "shill/service_property_change_test.h"
Paul Stewartcf199de2012-08-16 07:50:41 -070017
Paul Stewart000f0332013-10-25 13:30:28 -070018using ::testing::_;
Paul Stewartcf199de2012-08-16 07:50:41 -070019using ::testing::NiceMock;
Paul Stewart000f0332013-10-25 13:30:28 -070020using ::testing::Return;
Paul Stewartcf199de2012-08-16 07:50:41 -070021
22namespace shill {
23
24class EthernetServiceTest : public PropertyStoreTest {
25 public:
26 EthernetServiceTest()
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070027 : mock_manager_(control_interface(), dispatcher(), metrics(), glib()),
28 ethernet_(
Paul Stewartcf199de2012-08-16 07:50:41 -070029 new NiceMock<MockEthernet>(control_interface(),
30 dispatcher(),
31 metrics(),
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070032 &mock_manager_,
Paul Stewartcf199de2012-08-16 07:50:41 -070033 "ethernet",
34 fake_mac,
35 0)),
36 service_(
37 new EthernetService(control_interface(),
38 dispatcher(),
39 metrics(),
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070040 &mock_manager_,
Paul Stewart3de88a02014-12-05 07:55:14 -080041 ethernet_->weak_ptr_factory_.GetWeakPtr())) {}
42 ~EthernetServiceTest() override {}
Paul Stewartcf199de2012-08-16 07:50:41 -070043
44 protected:
45 static const char fake_mac[];
46
47 bool GetAutoConnect() {
Ben Chanf8a2ce12014-09-30 14:42:59 -070048 return service_->GetAutoConnect(nullptr);
Paul Stewartcf199de2012-08-16 07:50:41 -070049 }
50
mukesh agrawalbebf1b82013-04-23 15:06:33 -070051 bool SetAutoConnect(const bool connect, Error *error) {
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070052 return service_->SetAutoConnectFull(connect, error);
Paul Stewartcf199de2012-08-16 07:50:41 -070053 }
54
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070055 ServiceMockAdaptor *GetAdaptor() {
56 return dynamic_cast<ServiceMockAdaptor *>(service_->adaptor());
57 }
58
59 MockManager mock_manager_;
Paul Stewartcf199de2012-08-16 07:50:41 -070060 scoped_refptr<MockEthernet> ethernet_;
61 EthernetServiceRefPtr service_;
62};
63
64// static
65const char EthernetServiceTest::fake_mac[] = "AaBBcCDDeeFF";
66
67TEST_F(EthernetServiceTest, AutoConnect) {
68 EXPECT_TRUE(service_->IsAutoConnectByDefault());
69 EXPECT_TRUE(GetAutoConnect());
70 {
71 Error error;
72 SetAutoConnect(false, &error);
73 EXPECT_FALSE(error.IsSuccess());
74 }
75 EXPECT_TRUE(GetAutoConnect());
76 {
77 Error error;
78 SetAutoConnect(true, &error);
79 EXPECT_TRUE(error.IsSuccess());
80 }
81 EXPECT_TRUE(GetAutoConnect());
82}
83
Christopher Wiley2f1bbf02012-10-25 15:31:13 -070084TEST_F(EthernetServiceTest, ConnectDisconnectDelegation) {
Paul Stewart3de88a02014-12-05 07:55:14 -080085 EXPECT_CALL(*ethernet_, link_up()).WillRepeatedly(Return(true));
Christopher Wiley2f1bbf02012-10-25 15:31:13 -070086 EXPECT_CALL(*ethernet_, ConnectTo(service_.get()));
87 service_->AutoConnect();
88 EXPECT_CALL(*ethernet_, DisconnectFrom(service_.get()));
89 Error error;
Samuel Tan0d061192014-07-07 15:45:15 -070090 service_->Disconnect(&error, "in test");
Christopher Wiley2f1bbf02012-10-25 15:31:13 -070091}
92
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070093TEST_F(EthernetServiceTest, PropertyChanges) {
94 TestCommonPropertyChanges(service_, GetAdaptor());
95}
96
mukesh agrawalbebf1b82013-04-23 15:06:33 -070097// Custom property setters should return false, and make no changes, if
98// the new value is the same as the old value.
99TEST_F(EthernetServiceTest, CustomSetterNoopChange) {
100 TestCustomSetterNoopChange(service_, &mock_manager_);
101}
102
Paul Stewart000f0332013-10-25 13:30:28 -0700103TEST_F(EthernetServiceTest, LoadAutoConnect) {
104 // Make sure when we try to load an Ethernet service, it sets AutoConnect
105 // to be true even if the property is not found.
106 NiceMock<MockStore> mock_store;
107 EXPECT_CALL(mock_store, ContainsGroup(_)).WillRepeatedly(Return(true));
108 EXPECT_CALL(mock_store, GetBool(_, _, _)).WillRepeatedly(Return(false));
109 EXPECT_TRUE(service_->Load(&mock_store));
110 EXPECT_TRUE(GetAutoConnect());
111}
112
Paul Stewartfa11e282013-12-02 22:04:25 -0800113TEST_F(EthernetServiceTest, GetTethering) {
114 EXPECT_CALL(*ethernet_, IsConnectedViaTether())
115 .WillOnce(Return(true))
116 .WillOnce(Return(false));
Ben Chanf8a2ce12014-09-30 14:42:59 -0700117 EXPECT_EQ(kTetheringConfirmedState, service_->GetTethering(nullptr));
118 EXPECT_EQ(kTetheringNotDetectedState, service_->GetTethering(nullptr));
Paul Stewartfa11e282013-12-02 22:04:25 -0800119}
120
Paul Stewart3de88a02014-12-05 07:55:14 -0800121TEST_F(EthernetServiceTest, IsVisible) {
122 EXPECT_CALL(*ethernet_, link_up())
123 .WillOnce(Return(false))
124 .WillOnce(Return(true));
125 EXPECT_FALSE(service_->IsVisible());
126 EXPECT_TRUE(service_->IsVisible());
127}
128
129TEST_F(EthernetServiceTest, IsAutoConnectable) {
130 EXPECT_CALL(*ethernet_, link_up())
131 .WillOnce(Return(false))
132 .WillOnce(Return(true));
133 const char *reason;
134 EXPECT_FALSE(service_->IsAutoConnectable(&reason));
135 EXPECT_STREQ("no carrier", reason);
136 EXPECT_TRUE(service_->IsAutoConnectable(nullptr));
137}
138
Paul Stewartcf199de2012-08-16 07:50:41 -0700139} // namespace shill