[AWARE] Baseline TTL discovery test
Add baseline TTL discovery test verifying that discovery sessions
expire at specified TTL, can be reconfigured with a TTL, and that
the termination indication arrives (or not) as expected.
Add utility functions to support all TTL test combinations - only
add a baseline TTL test.
Bug: 31940045
Test: new test passes
Change-Id: I1d01923c15dd3ca6117b932a55c4204bb7f32179
diff --git a/acts/tests/google/wifi/aware/functional/DiscoveryTest.py b/acts/tests/google/wifi/aware/functional/DiscoveryTest.py
index f414c8e..1c9105a 100644
--- a/acts/tests/google/wifi/aware/functional/DiscoveryTest.py
+++ b/acts/tests/google/wifi/aware/functional/DiscoveryTest.py
@@ -267,24 +267,155 @@
# sleep for timeout period and then verify all 'fail_on_event' together
time.sleep(autils.EVENT_TIMEOUT)
- # Subscriber: should not get a new service discovery (no new information)
- autils.fail_on_event(
- s_dut, aconsts.SESSION_CB_ON_SERVICE_DISCOVERED, timeout=0)
+ # verify that there were no other events
+ autils.verify_no_more_events(p_dut, 0)
+ autils.verify_no_more_events(s_dut, 0)
- # Publisher: should never get a service discovery event!
- autils.fail_on_event(
- p_dut, aconsts.SESSION_CB_ON_SERVICE_DISCOVERED, timeout=0)
+ def verify_discovery_session_term(self, dut, disc_id, config, is_publish,
+ term_ind_on):
+ """Utility to verify that the specified discovery session has terminated (by
+ waiting for the TTL and then attempting to reconfigure).
- # Publisher+Subscriber: should not get termination indication (since we're
- # destroying sessions explicitly)
- autils.fail_on_event(
- p_dut, aconsts.SESSION_CB_ON_SESSION_TERMINATED, timeout=0)
- autils.fail_on_event(
- s_dut, aconsts.SESSION_CB_ON_SESSION_TERMINATED, timeout=0)
+ Args:
+ dut: device under test
+ disc_id: discovery id for the existing session
+ config: configuration of the existing session
+ is_publish: True if the configuration was publish, False if subscribe
+ term_ind_on: True if a termination indication is expected, False otherwise
+ """
+ # Wait for session termination
+ if term_ind_on:
+ autils.wait_for_event(
+ dut,
+ autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_TERMINATED,
+ disc_id))
+ else:
+ # can't defer wait to end since in any case have to wait for session to
+ # expire
+ autils.fail_on_event(
+ dut,
+ autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_TERMINATED,
+ disc_id))
+
+ # Validate that session expired by trying to configure it (expect failure)
+ config[aconsts.DISCOVERY_KEY_SSI] = "something else"
+ if is_publish:
+ dut.droid.wifiAwareUpdatePublish(disc_id, config)
+ else:
+ dut.droid.wifiAwareUpdateSubscribe(disc_id, config)
+ # failure expected - should verify that SESSION_CB_ON_SESSION_CONFIG_UPDATED
+ # not received but instead will verify_no_more_events at end of test
+
+ def positive_ttl_test_utility(self, is_publish, ptype, stype, term_ind_on):
+ """Utility which runs a positive discovery session TTL configuration test
+
+ Iteration 1: Verify session started with TTL
+ Iteration 2: Verify session started without TTL and reconfigured with TTL
+ Iteration 3: Verify session started with (long) TTL and reconfigured with
+ (short) TTL
+
+ Args:
+ is_publish: True if testing publish, False if testing subscribe
+ ptype: Publish discovery type (used if is_publish is True)
+ stype: Subscribe discovery type (used if is_publish is False)
+ term_ind_on: Configuration of termination indication
+ """
+ SHORT_TTL = 5 # 5 seconds
+ LONG_TTL = 100 # 100 seconds
+ dut = self.android_devices[0]
+
+ # Attach and wait for confirmation
+ id = dut.droid.wifiAwareAttach(False)
+ autils.wait_for_event(dut, aconsts.EVENT_CB_ON_ATTACHED)
+
+ # Iteration 1: Start discovery session with TTL
+ config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
+ stype, self.PAYLOAD_SIZE_TYPICAL,
+ SHORT_TTL, term_ind_on, False)
+ if is_publish:
+ disc_id = dut.droid.wifiAwarePublish(id, config, True)
+ autils.wait_for_event(dut,
+ autils.decorate_event(
+ aconsts.SESSION_CB_ON_PUBLISH_STARTED, disc_id))
+ else:
+ disc_id = dut.droid.wifiAwareSubscribe(id, config, True)
+ autils.wait_for_event(
+ dut,
+ autils.decorate_event(aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED,
+ disc_id))
+
+ # Wait for session termination & verify
+ self.verify_discovery_session_term(dut, disc_id, config, is_publish,
+ term_ind_on)
+
+ # Iteration 2: Start a discovery session without TTL
+ config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
+ stype, self.PAYLOAD_SIZE_TYPICAL, 0,
+ term_ind_on, False)
+ if is_publish:
+ disc_id = dut.droid.wifiAwarePublish(id, config, True)
+ autils.wait_for_event(dut,
+ autils.decorate_event(
+ aconsts.SESSION_CB_ON_PUBLISH_STARTED, disc_id))
+ else:
+ disc_id = dut.droid.wifiAwareSubscribe(id, config, True)
+ autils.wait_for_event(
+ dut,
+ autils.decorate_event(aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED,
+ disc_id))
+
+ # Update with a TTL
+ config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
+ stype, self.PAYLOAD_SIZE_TYPICAL,
+ SHORT_TTL, term_ind_on, False)
+ if is_publish:
+ dut.droid.wifiAwareUpdatePublish(disc_id, config)
+ else:
+ dut.droid.wifiAwareUpdateSubscribe(disc_id, config)
+ autils.wait_for_event(
+ dut,
+ autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_CONFIG_UPDATED,
+ disc_id))
+
+ # Wait for session termination & verify
+ self.verify_discovery_session_term(dut, disc_id, config, is_publish,
+ term_ind_on)
+
+ # Iteration 3: Start a discovery session with (long) TTL
+ config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
+ stype, self.PAYLOAD_SIZE_TYPICAL, LONG_TTL,
+ term_ind_on, False)
+ if is_publish:
+ disc_id = dut.droid.wifiAwarePublish(id, config, True)
+ autils.wait_for_event(dut,
+ autils.decorate_event(
+ aconsts.SESSION_CB_ON_PUBLISH_STARTED, disc_id))
+ else:
+ disc_id = dut.droid.wifiAwareSubscribe(id, config, True)
+ autils.wait_for_event(
+ dut,
+ autils.decorate_event(aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED,
+ disc_id))
+
+ # Update with a TTL
+ config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
+ stype, self.PAYLOAD_SIZE_TYPICAL,
+ SHORT_TTL, term_ind_on, False)
+ if is_publish:
+ dut.droid.wifiAwareUpdatePublish(disc_id, config)
+ else:
+ dut.droid.wifiAwareUpdateSubscribe(disc_id, config)
+ autils.wait_for_event(
+ dut,
+ autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_CONFIG_UPDATED,
+ disc_id))
+
+ # Wait for session termination & verify
+ self.verify_discovery_session_term(dut, disc_id, config, is_publish,
+ term_ind_on)
# verify that there were no other events
- autils.verify_no_more_events(p_dut)
- autils.verify_no_more_events(s_dut)
+ autils.verify_no_more_events(dut)
#######################################
# Positive tests key:
@@ -370,3 +501,25 @@
ptype=aconsts.PUBLISH_TYPE_SOLICITED,
stype=aconsts.SUBSCRIBE_TYPE_ACTIVE,
payload_size=self.PAYLOAD_SIZE_MAX)
+
+ #######################################
+ # TTL tests key:
+ #
+ # names is: test_ttl_<pub_type|sub_type>_<term_ind>
+ # where:
+ #
+ # pub_type: Type of publish discovery session: unsolicited or solicited.
+ # sub_type: Type of subscribe discovery session: passive or active.
+ # term_ind: ind_on or ind_off
+ #######################################
+
+ def test_ttl_unsolicited_ind_on(self):
+ """Functional test case / Discovery test cases / TTL test case:
+ - Unsolicited publish
+ - Termination indication enabled
+ """
+ self.positive_ttl_test_utility(
+ is_publish=True,
+ ptype=aconsts.PUBLISH_TYPE_UNSOLICITED,
+ stype=None,
+ term_ind_on=True)