| // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "shill/virtual_device.h" |
| |
| #include <sys/socket.h> |
| #include <linux/if.h> // Needs typedefs from sys/socket.h. |
| |
| #include <gtest/gtest.h> |
| |
| #include "shill/event_dispatcher.h" |
| #include "shill/mock_glib.h" |
| #include "shill/mock_manager.h" |
| #include "shill/mock_metrics.h" |
| #include "shill/mock_rtnl_handler.h" |
| #include "shill/mock_store.h" |
| #include "shill/nice_mock_control.h" |
| #include "shill/technology.h" |
| |
| using testing::_; |
| using testing::StrictMock; |
| |
| namespace shill { |
| |
| namespace { |
| const char kTestDeviceName[] = "tun0"; |
| const int kTestInterfaceIndex = 5; |
| } // namespace {} |
| |
| class VirtualDeviceTest : public testing::Test { |
| public: |
| VirtualDeviceTest() |
| : metrics_(&dispatcher_), |
| manager_(&control_, &dispatcher_, &metrics_, &glib_), |
| device_(new VirtualDevice(&control_, |
| &dispatcher_, |
| &metrics_, |
| &manager_, |
| kTestDeviceName, |
| kTestInterfaceIndex, |
| Technology::kVPN)) {} |
| |
| virtual ~VirtualDeviceTest() {} |
| |
| virtual void SetUp() { |
| device_->rtnl_handler_ = &rtnl_handler_; |
| } |
| |
| protected: |
| NiceMockControl control_; |
| EventDispatcher dispatcher_; |
| MockMetrics metrics_; |
| MockGLib glib_; |
| MockManager manager_; |
| StrictMock<MockRTNLHandler> rtnl_handler_; |
| |
| VirtualDeviceRefPtr device_; |
| }; |
| |
| TEST_F(VirtualDeviceTest, technology) { |
| EXPECT_EQ(Technology::kVPN, device_->technology()); |
| EXPECT_NE(Technology::kEthernet, device_->technology()); |
| } |
| |
| TEST_F(VirtualDeviceTest, Load) { |
| StrictMock<MockStore> storage; |
| EXPECT_CALL(storage, ContainsGroup(_)).Times(0); |
| EXPECT_TRUE(device_->Load(&storage)); |
| } |
| |
| TEST_F(VirtualDeviceTest, Save) { |
| StrictMock<MockStore> storage; |
| EXPECT_CALL(storage, SetBool(_, _, _)).Times(0); // Or any type, really. |
| EXPECT_TRUE(device_->Save(&storage)); |
| } |
| |
| TEST_F(VirtualDeviceTest, Start) { |
| Error error(Error::kOperationInitiated); |
| EXPECT_CALL(rtnl_handler_, SetInterfaceFlags(_, IFF_UP, IFF_UP)); |
| device_->Start(&error, EnabledStateChangedCallback()); |
| EXPECT_TRUE(error.IsSuccess()); |
| } |
| |
| TEST_F(VirtualDeviceTest, Stop) { |
| Error error(Error::kOperationInitiated); |
| device_->Stop(&error, EnabledStateChangedCallback()); |
| EXPECT_TRUE(error.IsSuccess()); |
| } |
| |
| // TODO(quiche): Add test for UpdateIPConfig. crbug.com/266404 |
| |
| } // namespace shill |