blob: a773866fdc2e8a4aa2289d580303a041437051de [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 Stewartcf199de2012-08-16 07:50:41 -070013#include "shill/property_store_unittest.h"
14#include "shill/refptr_types.h"
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070015#include "shill/service_property_change_test.h"
Paul Stewartcf199de2012-08-16 07:50:41 -070016
17using ::testing::NiceMock;
18
19namespace shill {
20
21class EthernetServiceTest : public PropertyStoreTest {
22 public:
23 EthernetServiceTest()
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070024 : mock_manager_(control_interface(), dispatcher(), metrics(), glib()),
25 ethernet_(
Paul Stewartcf199de2012-08-16 07:50:41 -070026 new NiceMock<MockEthernet>(control_interface(),
27 dispatcher(),
28 metrics(),
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070029 &mock_manager_,
Paul Stewartcf199de2012-08-16 07:50:41 -070030 "ethernet",
31 fake_mac,
32 0)),
33 service_(
34 new EthernetService(control_interface(),
35 dispatcher(),
36 metrics(),
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070037 &mock_manager_,
Paul Stewartcf199de2012-08-16 07:50:41 -070038 ethernet_)) {}
39 virtual ~EthernetServiceTest() {}
40
41 protected:
42 static const char fake_mac[];
43
44 bool GetAutoConnect() {
45 return service_->GetAutoConnect(NULL);
46 }
47
mukesh agrawalbebf1b82013-04-23 15:06:33 -070048 bool SetAutoConnect(const bool connect, Error *error) {
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070049 return service_->SetAutoConnectFull(connect, error);
Paul Stewartcf199de2012-08-16 07:50:41 -070050 }
51
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070052 ServiceMockAdaptor *GetAdaptor() {
53 return dynamic_cast<ServiceMockAdaptor *>(service_->adaptor());
54 }
55
56 MockManager mock_manager_;
Paul Stewartcf199de2012-08-16 07:50:41 -070057 scoped_refptr<MockEthernet> ethernet_;
58 EthernetServiceRefPtr service_;
59};
60
61// static
62const char EthernetServiceTest::fake_mac[] = "AaBBcCDDeeFF";
63
64TEST_F(EthernetServiceTest, AutoConnect) {
65 EXPECT_TRUE(service_->IsAutoConnectByDefault());
66 EXPECT_TRUE(GetAutoConnect());
67 {
68 Error error;
69 SetAutoConnect(false, &error);
70 EXPECT_FALSE(error.IsSuccess());
71 }
72 EXPECT_TRUE(GetAutoConnect());
73 {
74 Error error;
75 SetAutoConnect(true, &error);
76 EXPECT_TRUE(error.IsSuccess());
77 }
78 EXPECT_TRUE(GetAutoConnect());
79}
80
Christopher Wiley2f1bbf02012-10-25 15:31:13 -070081TEST_F(EthernetServiceTest, ConnectDisconnectDelegation) {
82 EXPECT_CALL(*ethernet_, ConnectTo(service_.get()));
83 service_->AutoConnect();
84 EXPECT_CALL(*ethernet_, DisconnectFrom(service_.get()));
85 Error error;
86 service_->Disconnect(&error);
87}
88
mukesh agrawalcbfb34e2013-04-17 19:33:25 -070089TEST_F(EthernetServiceTest, PropertyChanges) {
90 TestCommonPropertyChanges(service_, GetAdaptor());
91}
92
mukesh agrawalbebf1b82013-04-23 15:06:33 -070093// Custom property setters should return false, and make no changes, if
94// the new value is the same as the old value.
95TEST_F(EthernetServiceTest, CustomSetterNoopChange) {
96 TestCustomSetterNoopChange(service_, &mock_manager_);
97}
98
Paul Stewartcf199de2012-08-16 07:50:41 -070099} // namespace shill