blob: df72e874db54cd9314c9258ac1ed7e2d77efcc8e [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
5#include "shill/ethernet_service.h"
6
7#include <gmock/gmock.h>
8#include <gtest/gtest.h>
9
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070010#include "shill/mock_adaptors.h"
Paul Stewartcf199de2012-08-16 07:50:41 -070011#include "shill/mock_ethernet.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 Stewartcf199de2012-08-16 07:50:41 -070041 ethernet_)) {}
42 virtual ~EthernetServiceTest() {}
43
44 protected:
45 static const char fake_mac[];
46
47 bool GetAutoConnect() {
48 return service_->GetAutoConnect(NULL);
49 }
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) {
85 EXPECT_CALL(*ethernet_, ConnectTo(service_.get()));
86 service_->AutoConnect();
87 EXPECT_CALL(*ethernet_, DisconnectFrom(service_.get()));
88 Error error;
Samuel Tan0d061192014-07-07 15:45:15 -070089 service_->Disconnect(&error, "in test");
Christopher Wiley2f1bbf02012-10-25 15:31:13 -070090}
91
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070092TEST_F(EthernetServiceTest, PropertyChanges) {
93 TestCommonPropertyChanges(service_, GetAdaptor());
94}
95
mukesh agrawalbebf1b82013-04-23 15:06:33 -070096// Custom property setters should return false, and make no changes, if
97// the new value is the same as the old value.
98TEST_F(EthernetServiceTest, CustomSetterNoopChange) {
99 TestCustomSetterNoopChange(service_, &mock_manager_);
100}
101
Paul Stewart000f0332013-10-25 13:30:28 -0700102TEST_F(EthernetServiceTest, LoadAutoConnect) {
103 // Make sure when we try to load an Ethernet service, it sets AutoConnect
104 // to be true even if the property is not found.
105 NiceMock<MockStore> mock_store;
106 EXPECT_CALL(mock_store, ContainsGroup(_)).WillRepeatedly(Return(true));
107 EXPECT_CALL(mock_store, GetBool(_, _, _)).WillRepeatedly(Return(false));
108 EXPECT_TRUE(service_->Load(&mock_store));
109 EXPECT_TRUE(GetAutoConnect());
110}
111
Paul Stewartfa11e282013-12-02 22:04:25 -0800112TEST_F(EthernetServiceTest, GetTethering) {
113 EXPECT_CALL(*ethernet_, IsConnectedViaTether())
114 .WillOnce(Return(true))
115 .WillOnce(Return(false));
116 EXPECT_EQ(kTetheringConfirmedState, service_->GetTethering(NULL));
117 EXPECT_EQ(kTetheringNotDetectedState, service_->GetTethering(NULL));
118}
119
Paul Stewartcf199de2012-08-16 07:50:41 -0700120} // namespace shill