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