Add vts for Aware interface

Bug: 385778768
Test: atest VtsHalWifiNanIfaceTargetTest
Change-Id: I4daed758f2c08c80f7ad6d198f0ac3454109f8bc
diff --git a/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp b/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp
index d646162..924d74d 100644
--- a/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp
+++ b/wifi/aidl/vts/functional/wifi_nan_iface_aidl_test.cpp
@@ -56,6 +56,8 @@
 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;
@@ -418,7 +420,7 @@
     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_;
@@ -437,6 +439,78 @@
     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:
@@ -446,6 +520,14 @@
 };
 
 /*
+ * 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
  * after wifi is disabled.
@@ -566,67 +648,8 @@
  */
 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);
@@ -670,6 +693,96 @@
         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);
+    }
 }
 
 /*
@@ -705,6 +818,160 @@
     }
 }
 
+/*
+ * 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)),