// // Copyright (C) 2012 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include "shill/virtual_device.h" #include <sys/socket.h> #include <linux/if.h> // NOLINT - Needs typedefs from sys/socket.h. #include <gtest/gtest.h> #include "shill/event_dispatcher.h" #include "shill/mock_manager.h" #include "shill/mock_metrics.h" #include "shill/mock_store.h" #include "shill/net/mock_rtnl_handler.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_), 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_; 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