• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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 <android-base/logging.h>
18 #include <cutils/properties.h>
19 
20 #include <VtsHalHidlTargetTestBase.h>
21 
22 #include <android/hardware/wifi/supplicant/1.0/types.h>
23 #include <android/hardware/wifi/supplicant/1.1/ISupplicant.h>
24 
25 #include "supplicant_hidl_test_utils.h"
26 #include "supplicant_hidl_test_utils_1_1.h"
27 
28 using ::android::hardware::hidl_vec;
29 using ::android::hardware::wifi::supplicant::V1_0::ISupplicantIface;
30 using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatus;
31 using ::android::hardware::wifi::supplicant::V1_0::SupplicantStatusCode;
32 using ::android::hardware::wifi::supplicant::V1_0::IfaceType;
33 using ::android::hardware::wifi::supplicant::V1_1::ISupplicant;
34 using ::android::sp;
35 
36 class SupplicantHidlTest : public ::testing::VtsHalHidlTargetTestBase {
37    public:
SetUp()38     virtual void SetUp() override {
39         startSupplicantAndWaitForHidlService();
40         supplicant_ = getSupplicant_1_1();
41         ASSERT_NE(supplicant_.get(), nullptr);
42     }
43 
TearDown()44     virtual void TearDown() override { stopSupplicant(); }
45 
46    protected:
47     // ISupplicant object used for all tests in this fixture.
48     sp<ISupplicant> supplicant_;
49 
getWlan0IfaceName()50     std::string getWlan0IfaceName() {
51         std::array<char, PROPERTY_VALUE_MAX> buffer;
52         property_get("wifi.interface", buffer.data(), "wlan0");
53         return buffer.data();
54     }
55 
getP2pIfaceName()56     std::string getP2pIfaceName() {
57         std::array<char, PROPERTY_VALUE_MAX> buffer;
58         property_get("wifi.direct.interface", buffer.data(), "p2p0");
59         return buffer.data();
60     }
61 };
62 
63 /*
64  * AddStaInterface
65  */
TEST_F(SupplicantHidlTest,AddStaInterface)66 TEST_F(SupplicantHidlTest, AddStaInterface) {
67     ISupplicant::IfaceInfo iface_info;
68     iface_info.name = getWlan0IfaceName();
69     iface_info.type = IfaceType::STA;
70     supplicant_->addInterface(
71         iface_info,
72         [&](const SupplicantStatus& status, const sp<ISupplicantIface>& iface) {
73             EXPECT_TRUE(
74                 (status.code == SupplicantStatusCode::SUCCESS) ||
75                 (status.code == SupplicantStatusCode::FAILURE_IFACE_EXISTS));
76             EXPECT_NE(nullptr, iface.get());
77         });
78 }
79 
80 /*
81  * AddP2pInterface
82  */
TEST_F(SupplicantHidlTest,AddP2pInterface)83 TEST_F(SupplicantHidlTest, AddP2pInterface) {
84     ISupplicant::IfaceInfo iface_info;
85     iface_info.name = getP2pIfaceName();
86     iface_info.type = IfaceType::P2P;
87     supplicant_->addInterface(
88         iface_info,
89         [&](const SupplicantStatus& status, const sp<ISupplicantIface>& iface) {
90             EXPECT_TRUE(
91                 (status.code == SupplicantStatusCode::SUCCESS) ||
92                 (status.code == SupplicantStatusCode::FAILURE_IFACE_EXISTS));
93             EXPECT_NE(nullptr, iface.get());
94         });
95 }
96 
97 /*
98  * RemoveStaInterface
99  */
TEST_F(SupplicantHidlTest,RemoveStaInterface)100 TEST_F(SupplicantHidlTest, RemoveStaInterface) {
101     ISupplicant::IfaceInfo iface_info;
102     iface_info.name = getWlan0IfaceName();
103     iface_info.type = IfaceType::STA;
104 
105     supplicant_->addInterface(
106         iface_info,
107         [&](const SupplicantStatus& status, const sp<ISupplicantIface>& iface) {
108             EXPECT_TRUE(
109                 (status.code == SupplicantStatusCode::SUCCESS) ||
110                 (status.code == SupplicantStatusCode::FAILURE_IFACE_EXISTS));
111             EXPECT_NE(nullptr, iface.get());
112         });
113     supplicant_->removeInterface(
114         iface_info, [&](const SupplicantStatus& status) {
115             EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
116         });
117 }
118 
119 /*
120  * RemoveP2pInterface
121  */
TEST_F(SupplicantHidlTest,RemoveP2pInterface)122 TEST_F(SupplicantHidlTest, RemoveP2pInterface) {
123     ISupplicant::IfaceInfo iface_info;
124     iface_info.name = getP2pIfaceName();
125     iface_info.type = IfaceType::P2P;
126 
127     supplicant_->addInterface(
128         iface_info,
129         [&](const SupplicantStatus& status, const sp<ISupplicantIface>& iface) {
130             EXPECT_TRUE(
131                 (status.code == SupplicantStatusCode::SUCCESS) ||
132                 (status.code == SupplicantStatusCode::FAILURE_IFACE_EXISTS));
133             EXPECT_NE(nullptr, iface.get());
134         });
135     supplicant_->removeInterface(
136         iface_info, [&](const SupplicantStatus& status) {
137             EXPECT_EQ(SupplicantStatusCode::SUCCESS, status.code);
138         });
139 }
140 
141 /*
142  * Terminate
143  * This terminates the service.
144  */
TEST_F(SupplicantHidlTest,Terminate)145 TEST_F(SupplicantHidlTest, Terminate) {
146     supplicant_->terminate();
147 }
148