• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
32 using testing::_;
33 using testing::StrictMock;
34 
35 namespace shill {
36 
37 namespace {
38 const char kTestDeviceName[] = "tun0";
39 const int kTestInterfaceIndex = 5;
40 }  // namespace
41 
42 class VirtualDeviceTest : public testing::Test {
43  public:
VirtualDeviceTest()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 
~VirtualDeviceTest()55   virtual ~VirtualDeviceTest() {}
56 
SetUp()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 
TEST_F(VirtualDeviceTest,technology)71 TEST_F(VirtualDeviceTest, technology) {
72   EXPECT_EQ(Technology::kVPN, device_->technology());
73   EXPECT_NE(Technology::kEthernet, device_->technology());
74 }
75 
TEST_F(VirtualDeviceTest,Load)76 TEST_F(VirtualDeviceTest, Load) {
77   StrictMock<MockStore> storage;
78   EXPECT_CALL(storage, ContainsGroup(_)).Times(0);
79   EXPECT_TRUE(device_->Load(&storage));
80 }
81 
TEST_F(VirtualDeviceTest,Save)82 TEST_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 
TEST_F(VirtualDeviceTest,Start)88 TEST_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 
TEST_F(VirtualDeviceTest,Stop)95 TEST_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