virtual_device_unittest.cc revision bad1c10ffd2d4ac14f7bd9f4ef6a8982e711f566
1// 2// Copyright (C) 2012 The Android Open Source Project 3// 4// Licensed under the Apache License, Version 2.0 (the "License"); 5// you may not use this file except in compliance with the License. 6// You may obtain a copy of the License at 7// 8// http://www.apache.org/licenses/LICENSE-2.0 9// 10// Unless required by applicable law or agreed to in writing, software 11// distributed under the License is distributed on an "AS IS" BASIS, 12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13// See the License for the specific language governing permissions and 14// limitations under the License. 15// 16 17#include "shill/virtual_device.h" 18 19#include <sys/socket.h> 20#include <linux/if.h> // NOLINT - Needs typedefs from sys/socket.h. 21 22#include <gtest/gtest.h> 23 24#include "shill/event_dispatcher.h" 25#include "shill/mock_manager.h" 26#include "shill/mock_metrics.h" 27#include "shill/mock_store.h" 28#include "shill/net/mock_rtnl_handler.h" 29#include "shill/nice_mock_control.h" 30#include "shill/technology.h" 31 32using testing::_; 33using testing::StrictMock; 34 35namespace shill { 36 37namespace { 38const char kTestDeviceName[] = "tun0"; 39const int kTestInterfaceIndex = 5; 40} // namespace 41 42class VirtualDeviceTest : public testing::Test { 43 public: 44 VirtualDeviceTest() 45 : metrics_(&dispatcher_), 46 manager_(&control_, &dispatcher_, &metrics_), 47 device_(new VirtualDevice(&control_, 48 &dispatcher_, 49 &metrics_, 50 &manager_, 51 kTestDeviceName, 52 kTestInterfaceIndex, 53 Technology::kVPN)) {} 54 55 virtual ~VirtualDeviceTest() {} 56 57 virtual void SetUp() { 58 device_->rtnl_handler_ = &rtnl_handler_; 59 } 60 61 protected: 62 NiceMockControl control_; 63 EventDispatcher dispatcher_; 64 MockMetrics metrics_; 65 MockManager manager_; 66 StrictMock<MockRTNLHandler> rtnl_handler_; 67 68 VirtualDeviceRefPtr device_; 69}; 70 71TEST_F(VirtualDeviceTest, technology) { 72 EXPECT_EQ(Technology::kVPN, device_->technology()); 73 EXPECT_NE(Technology::kEthernet, device_->technology()); 74} 75 76TEST_F(VirtualDeviceTest, Load) { 77 StrictMock<MockStore> storage; 78 EXPECT_CALL(storage, ContainsGroup(_)).Times(0); 79 EXPECT_TRUE(device_->Load(&storage)); 80} 81 82TEST_F(VirtualDeviceTest, Save) { 83 StrictMock<MockStore> storage; 84 EXPECT_CALL(storage, SetBool(_, _, _)).Times(0); // Or any type, really. 85 EXPECT_TRUE(device_->Save(&storage)); 86} 87 88TEST_F(VirtualDeviceTest, Start) { 89 Error error(Error::kOperationInitiated); 90 EXPECT_CALL(rtnl_handler_, SetInterfaceFlags(_, IFF_UP, IFF_UP)); 91 device_->Start(&error, EnabledStateChangedCallback()); 92 EXPECT_TRUE(error.IsSuccess()); 93} 94 95TEST_F(VirtualDeviceTest, Stop) { 96 Error error(Error::kOperationInitiated); 97 device_->Stop(&error, EnabledStateChangedCallback()); 98 EXPECT_TRUE(error.IsSuccess()); 99} 100 101// TODO(quiche): Add test for UpdateIPConfig. crbug.com/266404 102 103} // namespace shill 104