11ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius/* 21ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * Copyright (C) 2016 The Android Open Source Project 31ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * 41ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * Licensed under the Nanache License, Version 2.0 (the "License"); 51ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * you may not use this file except in compliance with the License. 61ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * You may obtain a copy of the License at 71ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * 81ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * http://www.apache.org/licenses/LICENSE-2.0 91ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * 101ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * Unless required by applicable law or agreed to in writing, software 111ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * distributed under the License is distributed on an "AS IS" BASIS, 121ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * See the License for the specific language governing permissions and 141ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * limitations under the License. 151ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius */ 161ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 171ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius#include <android-base/logging.h> 181ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 191ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius#include <android/hardware/wifi/1.0/IWifiNanIface.h> 2080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen#include <android/hardware/wifi/1.0/IWifiNanIfaceEventCallback.h> 211ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 226b8720110bf2d40ac1364c364a85c31b358889f1Yuexi Ma#include <VtsHalHidlTargetTestBase.h> 2380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen#include <chrono> 2480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen#include <condition_variable> 2580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen#include <mutex> 261ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 2780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen#include "wifi_hidl_call_util.h" 281ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius#include "wifi_hidl_test_utils.h" 291ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 3080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohenusing namespace ::android::hardware::wifi::V1_0; 3180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 3280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohenusing ::android::hardware::Return; 3380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohenusing ::android::hardware::Void; 341ae4cbbb82d778a8945c78a569331c1616842befRoshan Piususing ::android::sp; 351ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 3680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen#define TIMEOUT_PERIOD 10 3780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 381ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius/** 391ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * Fixture to use for all NAN Iface HIDL interface tests. 401ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius */ 416b8720110bf2d40ac1364c364a85c31b358889f1Yuexi Maclass WifiNanIfaceHidlTest : public ::testing::VtsHalHidlTargetTestBase { 4280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen public: 4380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen virtual void SetUp() override { 4480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen iwifiNanIface = getWifiNanIface(); 4580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_NE(nullptr, iwifiNanIface.get()); 4680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_EQ(WifiStatusCode::SUCCESS, HIDL_INVOKE(iwifiNanIface, registerEventCallback, 4780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen new WifiNanIfaceEventCallback(*this)).code); 4880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 4980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 5080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen virtual void TearDown() override { 5180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen stopWifi(); 5280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 5380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 5480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen /* Used as a mechanism to inform the test about data/event callback */ 5580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen inline void notify() { 5680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen std::unique_lock<std::mutex> lock(mtx_); 5780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen count_++; 5880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen cv_.notify_one(); 5980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 6080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 6180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen enum CallbackType { 6280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen INVALID = -2, 6380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ANY_CALLBACK = -1, 6480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 6580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_CAPABILITIES_RESPONSE = 0, 6680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_ENABLE_RESPONSE, 6780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_CONFIG_RESPONSE, 6880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_DISABLE_RESPONSE, 6980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_START_PUBLISH_RESPONSE, 7080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_STOP_PUBLISH_RESPONSE, 7180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_START_SUBSCRIBE_RESPONSE, 7280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_STOP_SUBSCRIBE_RESPONSE, 7380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_TRANSMIT_FOLLOWUP_RESPONSE, 7480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_CREATE_DATA_INTERFACE_RESPONSE, 7580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_DELETE_DATA_INTERFACE_RESPONSE, 7680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_INITIATE_DATA_PATH_RESPONSE, 7780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_RESPOND_TO_DATA_PATH_INDICATION_RESPONSE, 7880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NOTIFY_TERMINATE_DATA_PATH_RESPONSE, 7980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 8080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_CLUSTER_EVENT, 8180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_DISABLED, 8280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_PUBLISH_TERMINATED, 8380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_SUBSCRIBE_TERMINATED, 8480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_MATCH, 8580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_MATCH_EXPIRED, 8680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_FOLLOWUP_RECEIVED, 8780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_TRANSMIT_FOLLOWUP, 8880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_DATA_PATH_REQUEST, 8980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_DATA_PATH_CONFIRM, 9080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EVENT_DATA_PATH_TERMINATED 9180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen }; 9280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 9380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen /* Test code calls this function to wait for data/event callback */ 9480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen inline std::cv_status wait(CallbackType waitForCallbackType) { 9580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen std::unique_lock<std::mutex> lock(mtx_); 9680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 9780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_NE(INVALID, waitForCallbackType); // can't ASSERT in a non-void-returning method 9880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 9980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen callbackType = INVALID; 10080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen std::cv_status status = std::cv_status::no_timeout; 10180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen auto now = std::chrono::system_clock::now(); 10280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen while (count_ == 0) { 10380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen status = cv_.wait_until(lock, now + std::chrono::seconds(TIMEOUT_PERIOD)); 10480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen if (status == std::cv_status::timeout) return status; 10580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen if (waitForCallbackType != ANY_CALLBACK && callbackType != INVALID 10680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen && callbackType != waitForCallbackType) { 10780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen count_--; 10880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 10980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 11080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen count_--; 11180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return status; 11280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 11380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 11480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen class WifiNanIfaceEventCallback: public IWifiNanIfaceEventCallback { 11580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen WifiNanIfaceHidlTest& parent_; 11680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 11780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen public: 11880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen WifiNanIfaceEventCallback(WifiNanIfaceHidlTest& parent) : parent_(parent) {}; 11980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 12080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen virtual ~WifiNanIfaceEventCallback() = default; 12180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 12280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyCapabilitiesResponse( 12380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 12480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status, 12580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const NanCapabilities& capabilities) override { 12680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_CAPABILITIES_RESPONSE; 12780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 12880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 12980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 13080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.capabilities = capabilities; 13180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 13280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 13380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 13480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 13580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 13680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyEnableResponse( 13780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 13880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 13980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_ENABLE_RESPONSE; 14080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 14180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 14280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 14380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 14480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 14580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 14680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 14780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 14880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyConfigResponse( 14980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 15080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 15180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_CONFIG_RESPONSE; 15280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 15380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 15480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 15580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 15680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 15780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 15880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 15980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 16080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyDisableResponse( 16180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 16280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 16380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_DISABLE_RESPONSE; 16480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 16580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 16680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 16780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 16880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 16980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 17080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 17180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 17280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyStartPublishResponse( 17380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 17480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status, 17580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint8_t sessionId) override { 17680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_START_PUBLISH_RESPONSE; 17780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 17880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 17980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 18080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.sessionId = sessionId; 18180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 18280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 18380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 18480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 18580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 18680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyStopPublishResponse( 18780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 18880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 18980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_STOP_PUBLISH_RESPONSE; 19080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 19180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 19280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 19380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 19480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 19580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 19680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 19780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 19880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyStartSubscribeResponse( 19980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 20080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status, 20180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint8_t sessionId) override { 20280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_START_SUBSCRIBE_RESPONSE; 20380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 20480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 20580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 20680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.sessionId = sessionId; 20780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 20880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 20980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 21080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 21180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 21280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyStopSubscribeResponse( 21380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 21480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 21580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_STOP_SUBSCRIBE_RESPONSE; 21680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 21780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 21880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 21980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 22080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 22180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 22280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 22380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 22480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyTransmitFollowupResponse( 22580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 22680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 22780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_TRANSMIT_FOLLOWUP_RESPONSE; 22880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 22980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 23080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 23180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 23280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 23380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 23480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 23580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 23680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyCreateDataInterfaceResponse( 23780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 23880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 23980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_CREATE_DATA_INTERFACE_RESPONSE; 24080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 24180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 24280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 24380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 24480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 24580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 24680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 24780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 24880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyDeleteDataInterfaceResponse( 24980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 25080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 25180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_DELETE_DATA_INTERFACE_RESPONSE; 25280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 25380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 25480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 25580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 25680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 25780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 25880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 25980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 26080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyInitiateDataPathResponse( 26180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 26280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status, 26380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint32_t ndpInstanceId) override { 26480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_INITIATE_DATA_PATH_RESPONSE; 26580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 26680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 26780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 26880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.ndpInstanceId = ndpInstanceId; 26980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 27080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 27180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 27280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 2731ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 27480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyRespondToDataPathIndicationResponse( 27580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 27680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 27780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_RESPOND_TO_DATA_PATH_INDICATION_RESPONSE; 2781ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 27980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 28080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 28180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 28280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 28380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 28480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 28580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 28680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> notifyTerminateDataPathResponse( 28780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 28880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 28980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = NOTIFY_TERMINATE_DATA_PATH_RESPONSE; 29080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 29180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 29280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 29380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 29480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 29580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 29680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 29780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 29880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventClusterEvent( 29980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const NanClusterEventInd& event) override { 30080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_CLUSTER_EVENT; 30180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 30280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.nanClusterEventInd = event; 30380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 30480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 30580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 30680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 30780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 30880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventDisabled( 30980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 31080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_DISABLED; 31180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 31280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 31380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 31480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 31580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 31680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 31780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 31880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventPublishTerminated( 31980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint8_t sessionId, 32080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 32180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_PUBLISH_TERMINATED; 32280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 32380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.sessionId = sessionId; 32480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 32580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 32680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 32780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 32880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 32980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 33080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventSubscribeTerminated( 33180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint8_t sessionId, 33280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 33380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_SUBSCRIBE_TERMINATED; 33480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 33580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.sessionId = sessionId; 33680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 33780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 33880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 33980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 34080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 34180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 34280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventMatch( 34380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const NanMatchInd& event) override { 34480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_MATCH; 34580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 34680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.nanMatchInd = event; 34780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 34880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 34980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 35080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 35180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 35280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventMatchExpired( 35380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint8_t discoverySessionId, 35480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint32_t peerId) override { 35580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_MATCH_EXPIRED; 35680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 35780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.sessionId = discoverySessionId; 35880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.peerId = peerId; 35980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 36080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 36180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 36280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 36380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 36480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventFollowupReceived( 36580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const NanFollowupReceivedInd& event) override { 36680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_FOLLOWUP_RECEIVED; 36780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 36880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.nanFollowupReceivedInd = event; 36980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 37080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 37180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 37280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 37380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 37480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventTransmitFollowup( 37580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id, 37680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const WifiNanStatus& status) override { 37780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_TRANSMIT_FOLLOWUP; 37880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 37980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.id = id; 38080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.status = status; 38180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 38280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 38380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 38480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 38580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 38680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventDataPathRequest( 38780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const NanDataPathRequestInd& event) override { 38880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_DATA_PATH_REQUEST; 38980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 39080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.nanDataPathRequestInd = event; 39180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 39280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 39380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 39480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 39580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 39680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventDataPathConfirm( 39780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen const NanDataPathConfirmInd& event) override { 39880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_DATA_PATH_CONFIRM; 39980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 40080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.nanDataPathConfirmInd = event; 40180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 40280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 40380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 40480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 40580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 40680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen Return<void> eventDataPathTerminated( 40780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint32_t ndpInstanceId) override { 40880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.callbackType = EVENT_DATA_PATH_TERMINATED; 40980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 41080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.ndpInstanceId = ndpInstanceId; 41180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 41280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen parent_.notify(); 41380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen return Void(); 41480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen } 41580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen }; 41680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 41780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen private: 41880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen // synchronization objects 41980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen std::mutex mtx_; 42080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen std::condition_variable cv_; 42180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen int count_; 42280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 42380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen protected: 42480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen android::sp<IWifiNanIface> iwifiNanIface; 42580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 42680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen // Data from IWifiNanIfaceEventCallback callbacks: this is the collection of all 42780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen // arguments to all callbacks. They are set by the callback (notifications or 42880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen // events) and can be retrieved by tests. 42980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen CallbackType callbackType; 43080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t id; 43180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen WifiNanStatus status; 43280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NanCapabilities capabilities; 43380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint8_t sessionId; 43480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint32_t ndpInstanceId; 43580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NanClusterEventInd nanClusterEventInd; 43680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NanMatchInd nanMatchInd; 43780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint32_t peerId; 43880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NanFollowupReceivedInd nanFollowupReceivedInd; 43980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NanDataPathRequestInd nanDataPathRequestInd; 44080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen NanDataPathConfirmInd nanDataPathConfirmInd; 4411ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius}; 4421ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius 4431ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius/* 4441ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * Create: 4451ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * Ensures that an instance of the IWifiNanIface proxy object is 4461ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius * successfully created. 4471ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius */ 4481ae4cbbb82d778a8945c78a569331c1616842befRoshan PiusTEST(WifiNanIfaceHidlTestNoFixture, Create) { 44980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_NE(nullptr, getWifiNanIface().get()); 45080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen stopWifi(); 45180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen} 45280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 45380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen/* 45480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen * Fail: use past destruction 45580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen * Ensure that API calls fail with ERROR_WIFI_IFACE_INVALID when using an interface once wifi 45680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen * is disabled. 45780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen */ 45880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan CohenTEST(WifiNanIfaceHidlTestNoFixture, FailOnIfaceInvalid) { 45980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen android::sp<IWifiNanIface> iwifiNanIface = getWifiNanIface(); 46080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_NE(nullptr, iwifiNanIface.get()); 46180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen stopWifi(); 46280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen sleep(5); // make sure that all chips/interfaces are invalidated 46380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_EQ(WifiStatusCode::ERROR_WIFI_IFACE_INVALID, 46480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen HIDL_INVOKE(iwifiNanIface, getCapabilitiesRequest, 0).code); 46580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen} 46680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 46780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen/* 46880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen * getCapabilitiesRequest: validate that returns capabilities. 46980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen */ 47080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan CohenTEST_F(WifiNanIfaceHidlTest, getCapabilitiesRequest) { 47180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen uint16_t inputCmdId = 10; 47280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_EQ(WifiStatusCode::SUCCESS, 47380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen HIDL_INVOKE(iwifiNanIface, getCapabilitiesRequest, inputCmdId).code); 47480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen // wait for a callback 47580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_CAPABILITIES_RESPONSE)); 47680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_EQ(NOTIFY_CAPABILITIES_RESPONSE, callbackType); 47780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen ASSERT_EQ(id, inputCmdId); 47880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen 47980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen // check for reasonable capability values 48080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxConcurrentClusters, (unsigned int) 0); 48180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxPublishes, (unsigned int) 0); 48280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxSubscribes, (unsigned int) 0); 48380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_EQ(capabilities.maxServiceNameLen, (unsigned int) 255); 48480054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_EQ(capabilities.maxMatchFilterLen, (unsigned int) 255); 48580054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxTotalMatchFilterLen, (unsigned int) 255); 48680054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_EQ(capabilities.maxServiceSpecificInfoLen, (unsigned int) 255); 48780054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GE(capabilities.maxExtendedServiceSpecificInfoLen, (unsigned int) 255); 48880054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxNdiInterfaces, (unsigned int) 0); 48980054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxNdpSessions, (unsigned int) 0); 49080054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxAppInfoLen, (unsigned int) 0); 49180054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxQueuedTransmitFollowupMsgs, (unsigned int) 0); 49280054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_GT(capabilities.maxSubscribeInterfaceAddresses, (unsigned int) 0); 49380054133dc500ab0c460d9b4e146cf70db7a6f0aEtan Cohen EXPECT_NE(capabilities.supportedCipherSuites, (unsigned int) 0); 4941ae4cbbb82d778a8945c78a569331c1616842befRoshan Pius} 495