Loading wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp +329 −62 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ using aidl::android::hardware::wifi::NanPublishType; using aidl::android::hardware::wifi::NanRespondToDataPathIndicationRequest; using aidl::android::hardware::wifi::NanStatus; using aidl::android::hardware::wifi::NanStatusCode; using aidl::android::hardware::wifi::NanSubscribeRequest; using aidl::android::hardware::wifi::NanSubscribeType; using aidl::android::hardware::wifi::NanSuspensionModeChangeInd; using aidl::android::hardware::wifi::NanTxType; using aidl::android::hardware::wifi::RttResult; Loading Loading @@ -418,7 +420,7 @@ class WifiNanIfaceAidlTest : public testing::TestWithParam<std::string> { int interface_version_; uint64_t callback_event_bitmap_; uint16_t id_; uint8_t session_id_; int8_t session_id_; uint32_t ndp_instance_id_; uint32_t pairing_instance_id_; uint32_t bootstrappping_instance_id_; Loading @@ -437,6 +439,78 @@ class WifiNanIfaceAidlTest : public testing::TestWithParam<std::string> { NanBootstrappingConfirmInd nan_bootstrapping_confirm_ind_; NanSuspensionModeChangeInd nan_suspension_mode_change_ind_; static NanEnableRequest createNanConfigRequest() { NanBandSpecificConfig config24 = {}; config24.rssiClose = 60; config24.rssiMiddle = 70; config24.rssiCloseProximity = 60; config24.dwellTimeMs = 200; config24.scanPeriodSec = 20; config24.validDiscoveryWindowIntervalVal = false; config24.discoveryWindowIntervalVal = 0; NanBandSpecificConfig config5 = {}; config5.rssiClose = 60; config5.rssiMiddle = 75; config5.rssiCloseProximity = 60; config5.dwellTimeMs = 200; config5.scanPeriodSec = 20; config5.validDiscoveryWindowIntervalVal = false; config5.discoveryWindowIntervalVal = 0; NanEnableRequest req = {}; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = false; req.hopCountMax = 2; req.configParams.masterPref = 0; req.configParams.disableDiscoveryAddressChangeIndication = true; req.configParams.disableStartedClusterIndication = true; req.configParams.disableJoinedClusterIndication = true; req.configParams.includePublishServiceIdsInBeacon = true; req.configParams.numberOfPublishServiceIdsInBeacon = 0; req.configParams.includeSubscribeServiceIdsInBeacon = true; req.configParams.numberOfSubscribeServiceIdsInBeacon = 0; req.configParams.rssiWindowSize = 8; req.configParams.macAddressRandomizationIntervalSec = 1800; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = config24; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = config5; req.debugConfigs.validClusterIdVals = true; req.debugConfigs.clusterIdTopRangeVal = 65535; req.debugConfigs.clusterIdBottomRangeVal = 0; req.debugConfigs.validIntfAddrVal = false; req.debugConfigs.validOuiVal = false; req.debugConfigs.ouiVal = 0; req.debugConfigs.validRandomFactorForceVal = false; req.debugConfigs.randomFactorForceVal = 0; req.debugConfigs.validHopCountForceVal = false; req.debugConfigs.hopCountForceVal = 0; req.debugConfigs.validDiscoveryChannelVal = false; req.debugConfigs .discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = 0; req.debugConfigs.discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = 0; req.debugConfigs.validUseBeaconsInBandVal = false; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; req.debugConfigs.validUseSdfInBandVal = false; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; return req; } NanConfigRequestSupplemental createNanConfigRequestSupplemental() { NanConfigRequestSupplemental nanConfigRequestSupp = {}; nanConfigRequestSupp.discoveryBeaconIntervalMs = 20; nanConfigRequestSupp.numberOfSpatialStreamsInDiscovery = 0; nanConfigRequestSupp.enableDiscoveryWindowEarlyTermination = false; return nanConfigRequestSupp; } const char* getInstanceName() { return GetParam().c_str(); } private: Loading @@ -445,6 +519,14 @@ class WifiNanIfaceAidlTest : public testing::TestWithParam<std::string> { std::condition_variable cv_; }; /* * GetName */ TEST_P(WifiNanIfaceAidlTest, GetName) { std::string ifaceName; EXPECT_TRUE(wifi_nan_iface_->getName(&ifaceName).isOk()); } /* * FailOnIfaceInvalid * Ensure that API calls to an interface fail with code ERROR_WIFI_IFACE_INVALID Loading Loading @@ -566,67 +648,8 @@ TEST_P(WifiNanIfaceAidlTest, NotifyCapabilitiesResponse) { */ TEST_P(WifiNanIfaceAidlTest, StartPublishRequest) { uint16_t inputCmdId = 10; NanBandSpecificConfig config24 = {}; config24.rssiClose = 60; config24.rssiMiddle = 70; config24.rssiCloseProximity = 60; config24.dwellTimeMs = 200; config24.scanPeriodSec = 20; config24.validDiscoveryWindowIntervalVal = false; config24.discoveryWindowIntervalVal = 0; NanBandSpecificConfig config5 = {}; config5.rssiClose = 60; config5.rssiMiddle = 75; config5.rssiCloseProximity = 60; config5.dwellTimeMs = 200; config5.scanPeriodSec = 20; config5.validDiscoveryWindowIntervalVal = false; config5.discoveryWindowIntervalVal = 0; NanEnableRequest req = {}; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = false; req.hopCountMax = 2; req.configParams.masterPref = 0; req.configParams.disableDiscoveryAddressChangeIndication = true; req.configParams.disableStartedClusterIndication = true; req.configParams.disableJoinedClusterIndication = true; req.configParams.includePublishServiceIdsInBeacon = true; req.configParams.numberOfPublishServiceIdsInBeacon = 0; req.configParams.includeSubscribeServiceIdsInBeacon = true; req.configParams.numberOfSubscribeServiceIdsInBeacon = 0; req.configParams.rssiWindowSize = 8; req.configParams.macAddressRandomizationIntervalSec = 1800; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = config24; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = config5; req.debugConfigs.validClusterIdVals = true; req.debugConfigs.clusterIdTopRangeVal = 65535; req.debugConfigs.clusterIdBottomRangeVal = 0; req.debugConfigs.validIntfAddrVal = false; req.debugConfigs.validOuiVal = false; req.debugConfigs.ouiVal = 0; req.debugConfigs.validRandomFactorForceVal = false; req.debugConfigs.randomFactorForceVal = 0; req.debugConfigs.validHopCountForceVal = false; req.debugConfigs.hopCountForceVal = 0; req.debugConfigs.validDiscoveryChannelVal = false; req.debugConfigs.discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = 0; req.debugConfigs.discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = 0; req.debugConfigs.validUseBeaconsInBandVal = false; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; req.debugConfigs.validUseSdfInBandVal = false; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; NanConfigRequestSupplemental nanConfigRequestSupp = {}; nanConfigRequestSupp.discoveryBeaconIntervalMs = 20; nanConfigRequestSupp.numberOfSpatialStreamsInDiscovery = 0; nanConfigRequestSupp.enableDiscoveryWindowEarlyTermination = false; NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId, req, nanConfigRequestSupp); Loading Loading @@ -670,6 +693,96 @@ TEST_P(WifiNanIfaceAidlTest, StartPublishRequest) { ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->stopPublishRequest(inputCmdId + 2, session_id_); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_STOP_PUBLISH_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_STOP_PUBLISH_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->disableRequest(inputCmdId + 3); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_DISABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_DISABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 3); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } } /* * StartSubscribeRequest */ TEST_P(WifiNanIfaceAidlTest, StartSubscribeRequest) { uint16_t inputCmdId = 10; NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } NanSubscribeRequest nanSubscribeRequest = {}; nanSubscribeRequest.baseConfigs.sessionId = 0; nanSubscribeRequest.baseConfigs.ttlSec = 0; nanSubscribeRequest.baseConfigs.discoveryWindowPeriod = 1; nanSubscribeRequest.baseConfigs.discoveryCount = 0; nanSubscribeRequest.baseConfigs.serviceName = {97}; nanSubscribeRequest.baseConfigs.discoveryMatchIndicator = NanMatchAlg::MATCH_NEVER; nanSubscribeRequest.baseConfigs.useRssiThreshold = false; nanSubscribeRequest.baseConfigs.disableDiscoveryTerminationIndication = false; nanSubscribeRequest.baseConfigs.disableMatchExpirationIndication = true; nanSubscribeRequest.baseConfigs.disableFollowupReceivedIndication = false; nanSubscribeRequest.baseConfigs.securityConfig.securityType = NanDataPathSecurityType::OPEN; nanSubscribeRequest.subscribeType = NanSubscribeType::PASSIVE; if (interface_version_ >= 2) { LOG(INFO) << "Including vendor data in Publish request"; nanSubscribeRequest.vendorData = kTestVendorDataOptional; } status = wifi_nan_iface_->startSubscribeRequest(inputCmdId + 1, nanSubscribeRequest); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->stopSubscribeRequest(inputCmdId + 2, session_id_); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_STOP_SUBSCRIBE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_STOP_SUBSCRIBE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->disableRequest(inputCmdId + 3); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_DISABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_DISABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 3); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } } /* Loading Loading @@ -705,6 +818,160 @@ TEST_P(WifiNanIfaceAidlTest, InitiateDataPathRequest_InvalidArgs) { } } /* * Test suspend/resume on publish */ TEST_P(WifiNanIfaceAidlTest, StartSuspendResumeOnPublishRequest) { uint16_t inputCmdId = 10; EXPECT_TRUE(wifi_nan_iface_->getCapabilitiesRequest(inputCmdId).isOk()); ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_CAPABILITIES_RESPONSE)); if (!capabilities_.supportsSuspension) { return; } NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId + 1, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } NanPublishRequest nanPublishRequest = {}; nanPublishRequest.baseConfigs.sessionId = 0; nanPublishRequest.baseConfigs.ttlSec = 0; nanPublishRequest.baseConfigs.discoveryWindowPeriod = 1; nanPublishRequest.baseConfigs.discoveryCount = 0; nanPublishRequest.baseConfigs.serviceName = {97}; nanPublishRequest.baseConfigs.discoveryMatchIndicator = NanMatchAlg::MATCH_NEVER; nanPublishRequest.baseConfigs.useRssiThreshold = false; nanPublishRequest.baseConfigs.disableDiscoveryTerminationIndication = false; nanPublishRequest.baseConfigs.disableMatchExpirationIndication = true; nanPublishRequest.baseConfigs.disableFollowupReceivedIndication = false; nanPublishRequest.baseConfigs.securityConfig.securityType = NanDataPathSecurityType::OPEN; nanPublishRequest.baseConfigs.enableSessionSuspendability = true; nanPublishRequest.autoAcceptDataPathRequests = false; nanPublishRequest.publishType = NanPublishType::UNSOLICITED; nanPublishRequest.txType = NanTxType::BROADCAST; status = wifi_nan_iface_->startPublishRequest(inputCmdId + 2, nanPublishRequest); ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_START_PUBLISH_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_START_PUBLISH_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); // Without NDP, suspend and resume should fail. status = wifi_nan_iface_->suspendRequest(inputCmdId + 3, session_id_); ASSERT_FALSE(status.isOk()); status = wifi_nan_iface_->resumeRequest(inputCmdId + 4, session_id_); ASSERT_FALSE(status.isOk()); } /* * Test suspend/resume on Subscribe */ TEST_P(WifiNanIfaceAidlTest, StartSuspendResumeOnSubscribeRequest) { uint16_t inputCmdId = 10; EXPECT_TRUE(wifi_nan_iface_->getCapabilitiesRequest(inputCmdId).isOk()); ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_CAPABILITIES_RESPONSE)); if (!capabilities_.supportsSuspension) { return; } NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId + 1, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } NanSubscribeRequest nanSubscribeRequest = {}; nanSubscribeRequest.baseConfigs.sessionId = 0; nanSubscribeRequest.baseConfigs.ttlSec = 0; nanSubscribeRequest.baseConfigs.discoveryWindowPeriod = 1; nanSubscribeRequest.baseConfigs.discoveryCount = 0; nanSubscribeRequest.baseConfigs.serviceName = {97}; nanSubscribeRequest.baseConfigs.discoveryMatchIndicator = NanMatchAlg::MATCH_NEVER; nanSubscribeRequest.baseConfigs.useRssiThreshold = false; nanSubscribeRequest.baseConfigs.disableDiscoveryTerminationIndication = false; nanSubscribeRequest.baseConfigs.disableMatchExpirationIndication = true; nanSubscribeRequest.baseConfigs.disableFollowupReceivedIndication = false; nanSubscribeRequest.baseConfigs.securityConfig.securityType = NanDataPathSecurityType::OPEN; nanSubscribeRequest.baseConfigs.enableSessionSuspendability = true; nanSubscribeRequest.subscribeType = NanSubscribeType::ACTIVE; status = wifi_nan_iface_->startSubscribeRequest(inputCmdId + 2, nanSubscribeRequest); ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); // Without NDP, suspend and resume should fail. status = wifi_nan_iface_->suspendRequest(inputCmdId + 3, session_id_); ASSERT_FALSE(status.isOk()); status = wifi_nan_iface_->resumeRequest(inputCmdId + 4, session_id_); ASSERT_FALSE(status.isOk()); } /* * Test create/delete Aware data interfaces */ TEST_P(WifiNanIfaceAidlTest, CreateDeleteDataInterfaces) { uint16_t inputCmdId = 10; NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->createDataInterfaceRequest(inputCmdId + 1, "aware_data0"); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_CREATE_DATA_INTERFACE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_CREATE_DATA_INTERFACE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->deleteDataInterfaceRequest(inputCmdId + 2, "aware_data0"); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_DELETE_DATA_INTERFACE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_DELETE_DATA_INTERFACE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } } GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WifiNanIfaceAidlTest); INSTANTIATE_TEST_SUITE_P(WifiTest, WifiNanIfaceAidlTest, testing::ValuesIn(android::getAidlHalInstanceNames(IWifi::descriptor)), Loading Loading
wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp +329 −62 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ using aidl::android::hardware::wifi::NanPublishType; using aidl::android::hardware::wifi::NanRespondToDataPathIndicationRequest; using aidl::android::hardware::wifi::NanStatus; using aidl::android::hardware::wifi::NanStatusCode; using aidl::android::hardware::wifi::NanSubscribeRequest; using aidl::android::hardware::wifi::NanSubscribeType; using aidl::android::hardware::wifi::NanSuspensionModeChangeInd; using aidl::android::hardware::wifi::NanTxType; using aidl::android::hardware::wifi::RttResult; Loading Loading @@ -418,7 +420,7 @@ class WifiNanIfaceAidlTest : public testing::TestWithParam<std::string> { int interface_version_; uint64_t callback_event_bitmap_; uint16_t id_; uint8_t session_id_; int8_t session_id_; uint32_t ndp_instance_id_; uint32_t pairing_instance_id_; uint32_t bootstrappping_instance_id_; Loading @@ -437,6 +439,78 @@ class WifiNanIfaceAidlTest : public testing::TestWithParam<std::string> { NanBootstrappingConfirmInd nan_bootstrapping_confirm_ind_; NanSuspensionModeChangeInd nan_suspension_mode_change_ind_; static NanEnableRequest createNanConfigRequest() { NanBandSpecificConfig config24 = {}; config24.rssiClose = 60; config24.rssiMiddle = 70; config24.rssiCloseProximity = 60; config24.dwellTimeMs = 200; config24.scanPeriodSec = 20; config24.validDiscoveryWindowIntervalVal = false; config24.discoveryWindowIntervalVal = 0; NanBandSpecificConfig config5 = {}; config5.rssiClose = 60; config5.rssiMiddle = 75; config5.rssiCloseProximity = 60; config5.dwellTimeMs = 200; config5.scanPeriodSec = 20; config5.validDiscoveryWindowIntervalVal = false; config5.discoveryWindowIntervalVal = 0; NanEnableRequest req = {}; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = false; req.hopCountMax = 2; req.configParams.masterPref = 0; req.configParams.disableDiscoveryAddressChangeIndication = true; req.configParams.disableStartedClusterIndication = true; req.configParams.disableJoinedClusterIndication = true; req.configParams.includePublishServiceIdsInBeacon = true; req.configParams.numberOfPublishServiceIdsInBeacon = 0; req.configParams.includeSubscribeServiceIdsInBeacon = true; req.configParams.numberOfSubscribeServiceIdsInBeacon = 0; req.configParams.rssiWindowSize = 8; req.configParams.macAddressRandomizationIntervalSec = 1800; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = config24; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = config5; req.debugConfigs.validClusterIdVals = true; req.debugConfigs.clusterIdTopRangeVal = 65535; req.debugConfigs.clusterIdBottomRangeVal = 0; req.debugConfigs.validIntfAddrVal = false; req.debugConfigs.validOuiVal = false; req.debugConfigs.ouiVal = 0; req.debugConfigs.validRandomFactorForceVal = false; req.debugConfigs.randomFactorForceVal = 0; req.debugConfigs.validHopCountForceVal = false; req.debugConfigs.hopCountForceVal = 0; req.debugConfigs.validDiscoveryChannelVal = false; req.debugConfigs .discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = 0; req.debugConfigs.discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = 0; req.debugConfigs.validUseBeaconsInBandVal = false; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; req.debugConfigs.validUseSdfInBandVal = false; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; return req; } NanConfigRequestSupplemental createNanConfigRequestSupplemental() { NanConfigRequestSupplemental nanConfigRequestSupp = {}; nanConfigRequestSupp.discoveryBeaconIntervalMs = 20; nanConfigRequestSupp.numberOfSpatialStreamsInDiscovery = 0; nanConfigRequestSupp.enableDiscoveryWindowEarlyTermination = false; return nanConfigRequestSupp; } const char* getInstanceName() { return GetParam().c_str(); } private: Loading @@ -445,6 +519,14 @@ class WifiNanIfaceAidlTest : public testing::TestWithParam<std::string> { std::condition_variable cv_; }; /* * GetName */ TEST_P(WifiNanIfaceAidlTest, GetName) { std::string ifaceName; EXPECT_TRUE(wifi_nan_iface_->getName(&ifaceName).isOk()); } /* * FailOnIfaceInvalid * Ensure that API calls to an interface fail with code ERROR_WIFI_IFACE_INVALID Loading Loading @@ -566,67 +648,8 @@ TEST_P(WifiNanIfaceAidlTest, NotifyCapabilitiesResponse) { */ TEST_P(WifiNanIfaceAidlTest, StartPublishRequest) { uint16_t inputCmdId = 10; NanBandSpecificConfig config24 = {}; config24.rssiClose = 60; config24.rssiMiddle = 70; config24.rssiCloseProximity = 60; config24.dwellTimeMs = 200; config24.scanPeriodSec = 20; config24.validDiscoveryWindowIntervalVal = false; config24.discoveryWindowIntervalVal = 0; NanBandSpecificConfig config5 = {}; config5.rssiClose = 60; config5.rssiMiddle = 75; config5.rssiCloseProximity = 60; config5.dwellTimeMs = 200; config5.scanPeriodSec = 20; config5.validDiscoveryWindowIntervalVal = false; config5.discoveryWindowIntervalVal = 0; NanEnableRequest req = {}; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.operateInBand[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = false; req.hopCountMax = 2; req.configParams.masterPref = 0; req.configParams.disableDiscoveryAddressChangeIndication = true; req.configParams.disableStartedClusterIndication = true; req.configParams.disableJoinedClusterIndication = true; req.configParams.includePublishServiceIdsInBeacon = true; req.configParams.numberOfPublishServiceIdsInBeacon = 0; req.configParams.includeSubscribeServiceIdsInBeacon = true; req.configParams.numberOfSubscribeServiceIdsInBeacon = 0; req.configParams.rssiWindowSize = 8; req.configParams.macAddressRandomizationIntervalSec = 1800; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = config24; req.configParams.bandSpecificConfig[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = config5; req.debugConfigs.validClusterIdVals = true; req.debugConfigs.clusterIdTopRangeVal = 65535; req.debugConfigs.clusterIdBottomRangeVal = 0; req.debugConfigs.validIntfAddrVal = false; req.debugConfigs.validOuiVal = false; req.debugConfigs.ouiVal = 0; req.debugConfigs.validRandomFactorForceVal = false; req.debugConfigs.randomFactorForceVal = 0; req.debugConfigs.validHopCountForceVal = false; req.debugConfigs.hopCountForceVal = 0; req.debugConfigs.validDiscoveryChannelVal = false; req.debugConfigs.discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = 0; req.debugConfigs.discoveryChannelMhzVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = 0; req.debugConfigs.validUseBeaconsInBandVal = false; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useBeaconsInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; req.debugConfigs.validUseSdfInBandVal = false; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_24GHZ)] = true; req.debugConfigs.useSdfInBandVal[static_cast<int32_t>(NanBandIndex::NAN_BAND_5GHZ)] = true; NanConfigRequestSupplemental nanConfigRequestSupp = {}; nanConfigRequestSupp.discoveryBeaconIntervalMs = 20; nanConfigRequestSupp.numberOfSpatialStreamsInDiscovery = 0; nanConfigRequestSupp.enableDiscoveryWindowEarlyTermination = false; NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId, req, nanConfigRequestSupp); Loading Loading @@ -670,6 +693,96 @@ TEST_P(WifiNanIfaceAidlTest, StartPublishRequest) { ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->stopPublishRequest(inputCmdId + 2, session_id_); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_STOP_PUBLISH_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_STOP_PUBLISH_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->disableRequest(inputCmdId + 3); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_DISABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_DISABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 3); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } } /* * StartSubscribeRequest */ TEST_P(WifiNanIfaceAidlTest, StartSubscribeRequest) { uint16_t inputCmdId = 10; NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } NanSubscribeRequest nanSubscribeRequest = {}; nanSubscribeRequest.baseConfigs.sessionId = 0; nanSubscribeRequest.baseConfigs.ttlSec = 0; nanSubscribeRequest.baseConfigs.discoveryWindowPeriod = 1; nanSubscribeRequest.baseConfigs.discoveryCount = 0; nanSubscribeRequest.baseConfigs.serviceName = {97}; nanSubscribeRequest.baseConfigs.discoveryMatchIndicator = NanMatchAlg::MATCH_NEVER; nanSubscribeRequest.baseConfigs.useRssiThreshold = false; nanSubscribeRequest.baseConfigs.disableDiscoveryTerminationIndication = false; nanSubscribeRequest.baseConfigs.disableMatchExpirationIndication = true; nanSubscribeRequest.baseConfigs.disableFollowupReceivedIndication = false; nanSubscribeRequest.baseConfigs.securityConfig.securityType = NanDataPathSecurityType::OPEN; nanSubscribeRequest.subscribeType = NanSubscribeType::PASSIVE; if (interface_version_ >= 2) { LOG(INFO) << "Including vendor data in Publish request"; nanSubscribeRequest.vendorData = kTestVendorDataOptional; } status = wifi_nan_iface_->startSubscribeRequest(inputCmdId + 1, nanSubscribeRequest); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->stopSubscribeRequest(inputCmdId + 2, session_id_); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_STOP_SUBSCRIBE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_STOP_SUBSCRIBE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->disableRequest(inputCmdId + 3); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_DISABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_DISABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 3); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } } /* Loading Loading @@ -705,6 +818,160 @@ TEST_P(WifiNanIfaceAidlTest, InitiateDataPathRequest_InvalidArgs) { } } /* * Test suspend/resume on publish */ TEST_P(WifiNanIfaceAidlTest, StartSuspendResumeOnPublishRequest) { uint16_t inputCmdId = 10; EXPECT_TRUE(wifi_nan_iface_->getCapabilitiesRequest(inputCmdId).isOk()); ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_CAPABILITIES_RESPONSE)); if (!capabilities_.supportsSuspension) { return; } NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId + 1, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } NanPublishRequest nanPublishRequest = {}; nanPublishRequest.baseConfigs.sessionId = 0; nanPublishRequest.baseConfigs.ttlSec = 0; nanPublishRequest.baseConfigs.discoveryWindowPeriod = 1; nanPublishRequest.baseConfigs.discoveryCount = 0; nanPublishRequest.baseConfigs.serviceName = {97}; nanPublishRequest.baseConfigs.discoveryMatchIndicator = NanMatchAlg::MATCH_NEVER; nanPublishRequest.baseConfigs.useRssiThreshold = false; nanPublishRequest.baseConfigs.disableDiscoveryTerminationIndication = false; nanPublishRequest.baseConfigs.disableMatchExpirationIndication = true; nanPublishRequest.baseConfigs.disableFollowupReceivedIndication = false; nanPublishRequest.baseConfigs.securityConfig.securityType = NanDataPathSecurityType::OPEN; nanPublishRequest.baseConfigs.enableSessionSuspendability = true; nanPublishRequest.autoAcceptDataPathRequests = false; nanPublishRequest.publishType = NanPublishType::UNSOLICITED; nanPublishRequest.txType = NanTxType::BROADCAST; status = wifi_nan_iface_->startPublishRequest(inputCmdId + 2, nanPublishRequest); ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_START_PUBLISH_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_START_PUBLISH_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); // Without NDP, suspend and resume should fail. status = wifi_nan_iface_->suspendRequest(inputCmdId + 3, session_id_); ASSERT_FALSE(status.isOk()); status = wifi_nan_iface_->resumeRequest(inputCmdId + 4, session_id_); ASSERT_FALSE(status.isOk()); } /* * Test suspend/resume on Subscribe */ TEST_P(WifiNanIfaceAidlTest, StartSuspendResumeOnSubscribeRequest) { uint16_t inputCmdId = 10; EXPECT_TRUE(wifi_nan_iface_->getCapabilitiesRequest(inputCmdId).isOk()); ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_CAPABILITIES_RESPONSE)); if (!capabilities_.supportsSuspension) { return; } NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId + 1, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } NanSubscribeRequest nanSubscribeRequest = {}; nanSubscribeRequest.baseConfigs.sessionId = 0; nanSubscribeRequest.baseConfigs.ttlSec = 0; nanSubscribeRequest.baseConfigs.discoveryWindowPeriod = 1; nanSubscribeRequest.baseConfigs.discoveryCount = 0; nanSubscribeRequest.baseConfigs.serviceName = {97}; nanSubscribeRequest.baseConfigs.discoveryMatchIndicator = NanMatchAlg::MATCH_NEVER; nanSubscribeRequest.baseConfigs.useRssiThreshold = false; nanSubscribeRequest.baseConfigs.disableDiscoveryTerminationIndication = false; nanSubscribeRequest.baseConfigs.disableMatchExpirationIndication = true; nanSubscribeRequest.baseConfigs.disableFollowupReceivedIndication = false; nanSubscribeRequest.baseConfigs.securityConfig.securityType = NanDataPathSecurityType::OPEN; nanSubscribeRequest.baseConfigs.enableSessionSuspendability = true; nanSubscribeRequest.subscribeType = NanSubscribeType::ACTIVE; status = wifi_nan_iface_->startSubscribeRequest(inputCmdId + 2, nanSubscribeRequest); ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_START_SUBSCRIBE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); // Without NDP, suspend and resume should fail. status = wifi_nan_iface_->suspendRequest(inputCmdId + 3, session_id_); ASSERT_FALSE(status.isOk()); status = wifi_nan_iface_->resumeRequest(inputCmdId + 4, session_id_); ASSERT_FALSE(status.isOk()); } /* * Test create/delete Aware data interfaces */ TEST_P(WifiNanIfaceAidlTest, CreateDeleteDataInterfaces) { uint16_t inputCmdId = 10; NanEnableRequest req = createNanConfigRequest(); NanConfigRequestSupplemental nanConfigRequestSupp = createNanConfigRequestSupplemental(); callback_event_bitmap_ = 0; auto status = wifi_nan_iface_->enableRequest(inputCmdId, req, nanConfigRequestSupp); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_ENABLE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_ENABLE_RESPONSE)); ASSERT_EQ(id_, inputCmdId); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->createDataInterfaceRequest(inputCmdId + 1, "aware_data0"); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_CREATE_DATA_INTERFACE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_CREATE_DATA_INTERFACE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 1); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } status = wifi_nan_iface_->deleteDataInterfaceRequest(inputCmdId + 2, "aware_data0"); if (!checkStatusCode(&status, WifiStatusCode::ERROR_NOT_SUPPORTED)) { ASSERT_TRUE(status.isOk()); // Wait for a callback. ASSERT_EQ(std::cv_status::no_timeout, wait(NOTIFY_DELETE_DATA_INTERFACE_RESPONSE)); ASSERT_TRUE(receivedCallback(NOTIFY_DELETE_DATA_INTERFACE_RESPONSE)); ASSERT_EQ(id_, inputCmdId + 2); ASSERT_EQ(status_.status, NanStatusCode::SUCCESS); } } GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(WifiNanIfaceAidlTest); INSTANTIATE_TEST_SUITE_P(WifiTest, WifiNanIfaceAidlTest, testing::ValuesIn(android::getAidlHalInstanceNames(IWifi::descriptor)), Loading