Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 1 | // 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 Chan | 8760251 | 2014-11-07 20:50:05 -0800 | [diff] [blame] | 5 | #include "shill/ethernet/ethernet_service.h" |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 6 | |
| 7 | #include <gmock/gmock.h> |
| 8 | #include <gtest/gtest.h> |
| 9 | |
Ben Chan | 8760251 | 2014-11-07 20:50:05 -0800 | [diff] [blame] | 10 | #include "shill/ethernet/mock_ethernet.h" |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 11 | #include "shill/mock_adaptors.h" |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 12 | #include "shill/mock_manager.h" |
Paul Stewart | 000f033 | 2013-10-25 13:30:28 -0700 | [diff] [blame] | 13 | #include "shill/mock_store.h" |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 14 | #include "shill/property_store_unittest.h" |
| 15 | #include "shill/refptr_types.h" |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 16 | #include "shill/service_property_change_test.h" |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 17 | |
Paul Stewart | 000f033 | 2013-10-25 13:30:28 -0700 | [diff] [blame] | 18 | using ::testing::_; |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 19 | using ::testing::NiceMock; |
Paul Stewart | 000f033 | 2013-10-25 13:30:28 -0700 | [diff] [blame] | 20 | using ::testing::Return; |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 21 | |
| 22 | namespace shill { |
| 23 | |
| 24 | class EthernetServiceTest : public PropertyStoreTest { |
| 25 | public: |
| 26 | EthernetServiceTest() |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 27 | : mock_manager_(control_interface(), dispatcher(), metrics(), glib()), |
| 28 | ethernet_( |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 29 | new NiceMock<MockEthernet>(control_interface(), |
| 30 | dispatcher(), |
| 31 | metrics(), |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 32 | &mock_manager_, |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 33 | "ethernet", |
| 34 | fake_mac, |
| 35 | 0)), |
| 36 | service_( |
| 37 | new EthernetService(control_interface(), |
| 38 | dispatcher(), |
| 39 | metrics(), |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 40 | &mock_manager_, |
Paul Stewart | 3de88a0 | 2014-12-05 07:55:14 -0800 | [diff] [blame] | 41 | ethernet_->weak_ptr_factory_.GetWeakPtr())) {} |
| 42 | ~EthernetServiceTest() override {} |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 43 | |
| 44 | protected: |
| 45 | static const char fake_mac[]; |
| 46 | |
| 47 | bool GetAutoConnect() { |
Ben Chan | f8a2ce1 | 2014-09-30 14:42:59 -0700 | [diff] [blame] | 48 | return service_->GetAutoConnect(nullptr); |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 49 | } |
| 50 | |
mukesh agrawal | bebf1b8 | 2013-04-23 15:06:33 -0700 | [diff] [blame] | 51 | bool SetAutoConnect(const bool connect, Error *error) { |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 52 | return service_->SetAutoConnectFull(connect, error); |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 53 | } |
| 54 | |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 55 | ServiceMockAdaptor *GetAdaptor() { |
| 56 | return dynamic_cast<ServiceMockAdaptor *>(service_->adaptor()); |
| 57 | } |
| 58 | |
| 59 | MockManager mock_manager_; |
Paul Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 60 | scoped_refptr<MockEthernet> ethernet_; |
| 61 | EthernetServiceRefPtr service_; |
| 62 | }; |
| 63 | |
| 64 | // static |
| 65 | const char EthernetServiceTest::fake_mac[] = "AaBBcCDDeeFF"; |
| 66 | |
| 67 | TEST_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 Wiley | 2f1bbf0 | 2012-10-25 15:31:13 -0700 | [diff] [blame] | 84 | TEST_F(EthernetServiceTest, ConnectDisconnectDelegation) { |
Paul Stewart | 3de88a0 | 2014-12-05 07:55:14 -0800 | [diff] [blame] | 85 | EXPECT_CALL(*ethernet_, link_up()).WillRepeatedly(Return(true)); |
Christopher Wiley | 2f1bbf0 | 2012-10-25 15:31:13 -0700 | [diff] [blame] | 86 | EXPECT_CALL(*ethernet_, ConnectTo(service_.get())); |
| 87 | service_->AutoConnect(); |
| 88 | EXPECT_CALL(*ethernet_, DisconnectFrom(service_.get())); |
| 89 | Error error; |
Samuel Tan | 0d06119 | 2014-07-07 15:45:15 -0700 | [diff] [blame] | 90 | service_->Disconnect(&error, "in test"); |
Christopher Wiley | 2f1bbf0 | 2012-10-25 15:31:13 -0700 | [diff] [blame] | 91 | } |
| 92 | |
mukesh agrawal | cbfb34e | 2013-04-17 19:33:25 -0700 | [diff] [blame] | 93 | TEST_F(EthernetServiceTest, PropertyChanges) { |
| 94 | TestCommonPropertyChanges(service_, GetAdaptor()); |
| 95 | } |
| 96 | |
mukesh agrawal | bebf1b8 | 2013-04-23 15:06:33 -0700 | [diff] [blame] | 97 | // Custom property setters should return false, and make no changes, if |
| 98 | // the new value is the same as the old value. |
| 99 | TEST_F(EthernetServiceTest, CustomSetterNoopChange) { |
| 100 | TestCustomSetterNoopChange(service_, &mock_manager_); |
| 101 | } |
| 102 | |
Paul Stewart | 000f033 | 2013-10-25 13:30:28 -0700 | [diff] [blame] | 103 | TEST_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 Stewart | fa11e28 | 2013-12-02 22:04:25 -0800 | [diff] [blame] | 113 | TEST_F(EthernetServiceTest, GetTethering) { |
| 114 | EXPECT_CALL(*ethernet_, IsConnectedViaTether()) |
| 115 | .WillOnce(Return(true)) |
| 116 | .WillOnce(Return(false)); |
Ben Chan | f8a2ce1 | 2014-09-30 14:42:59 -0700 | [diff] [blame] | 117 | EXPECT_EQ(kTetheringConfirmedState, service_->GetTethering(nullptr)); |
| 118 | EXPECT_EQ(kTetheringNotDetectedState, service_->GetTethering(nullptr)); |
Paul Stewart | fa11e28 | 2013-12-02 22:04:25 -0800 | [diff] [blame] | 119 | } |
| 120 | |
Paul Stewart | 3de88a0 | 2014-12-05 07:55:14 -0800 | [diff] [blame] | 121 | TEST_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 | |
| 129 | TEST_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 Stewart | cf199de | 2012-08-16 07:50:41 -0700 | [diff] [blame] | 139 | } // namespace shill |