93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  * Copyright (C) 2016, 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 <string>
 | |
| #include <vector>
 | |
| 
 | |
| #include <gtest/gtest.h>
 | |
| #include <utils/StrongPointer.h>
 | |
| #include <wifi_system/interface_tool.h>
 | |
| 
 | |
| #include "android/net/wifi/nl80211/IClientInterface.h"
 | |
| #include "android/net/wifi/nl80211/IWificond.h"
 | |
| #include "wificond/tests/integration/process_utils.h"
 | |
| 
 | |
| using android::net::wifi::nl80211::IClientInterface;
 | |
| using android::net::wifi::nl80211::IWificond;
 | |
| using android::wifi_system::InterfaceTool;
 | |
| using android::wificond::tests::integration::ScopedDevModeWificond;
 | |
| using std::string;
 | |
| using std::vector;
 | |
| 
 | |
| namespace android {
 | |
| namespace wificond {
 | |
| namespace {
 | |
| 
 | |
| const char kInterfaceName[] = "wlan0";
 | |
| }  // namespace
 | |
| 
 | |
| TEST(ClientInterfaceTest, CanCreateClientInterfaces) {
 | |
|   ScopedDevModeWificond dev_mode;
 | |
|   sp<IWificond> service = dev_mode.EnterDevModeOrDie();
 | |
| 
 | |
|   // We should be able to create an client interface.
 | |
|   sp<IClientInterface> client_interface;
 | |
|   EXPECT_TRUE(service->createClientInterface(
 | |
|       kInterfaceName, &client_interface).isOk());
 | |
|   EXPECT_NE(nullptr, client_interface.get());
 | |
| 
 | |
|   // The interface should start out down.
 | |
|   string if_name;
 | |
|   EXPECT_TRUE(client_interface->getInterfaceName(&if_name).isOk());
 | |
|   EXPECT_TRUE(!if_name.empty());
 | |
|   InterfaceTool if_tool;
 | |
|   EXPECT_FALSE(if_tool.GetUpState(if_name.c_str()));
 | |
| 
 | |
|   // Mark the interface as up, just to test that we mark it down on tearDown.
 | |
|   EXPECT_TRUE(if_tool.SetUpState(if_name.c_str(), true));
 | |
|   EXPECT_TRUE(if_tool.GetUpState(if_name.c_str()));
 | |
| 
 | |
|   // We should not be able to create two client interfaces.
 | |
|   sp<IClientInterface> client_interface2;
 | |
|   EXPECT_TRUE(service->createClientInterface(
 | |
|       kInterfaceName, &client_interface2).isOk());
 | |
|   EXPECT_EQ(nullptr, client_interface2.get());
 | |
| 
 | |
|   // We can tear down the created interface.
 | |
|   bool succes = false;
 | |
|   EXPECT_TRUE(service->tearDownClientInterface(kInterfaceName, &succes).isOk());
 | |
|   EXPECT_TRUE(succes);
 | |
|   EXPECT_FALSE(if_tool.GetUpState(if_name.c_str()));
 | |
| 
 | |
|   // Teardown everything at the end of the test.
 | |
|   EXPECT_TRUE(service->tearDownInterfaces().isOk());
 | |
| }
 | |
| 
 | |
| TEST(ClientInterfaceTest, CanGetMacAddress) {
 | |
|   ScopedDevModeWificond dev_mode;
 | |
|   sp<IWificond> service = dev_mode.EnterDevModeOrDie();
 | |
|   sp<IClientInterface> client_interface;
 | |
|   EXPECT_TRUE(service->createClientInterface(
 | |
|       kInterfaceName, &client_interface).isOk());
 | |
|   ASSERT_NE(nullptr, client_interface.get());
 | |
|   vector<uint8_t> mac_address;
 | |
|   EXPECT_TRUE(client_interface->getMacAddress(&mac_address).isOk());
 | |
|   EXPECT_TRUE(mac_address.size() == 6);
 | |
| }
 | |
| 
 | |
| }  // namespace wificond
 | |
| }  // namespace android
 |