blob: ce174048d9d67bd3de8064b6eb9e3a449d02daee [file] [log] [blame]
Etan Cohen872a6be2017-05-16 08:08:15 -07001#!/usr/bin/python3.4
2#
3# Copyright 2017 - The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17import string
Etan Cohenfb7f3b12017-05-19 06:54:03 -070018import time
Etan Cohen872a6be2017-05-16 08:08:15 -070019
20from acts import asserts
21from acts.test_utils.wifi.aware import aware_const as aconsts
22from acts.test_utils.wifi.aware import aware_test_utils as autils
23from acts.test_utils.wifi.aware.AwareBaseTest import AwareBaseTest
24
25
26class DiscoveryTest(AwareBaseTest):
27 """Set of tests for Wi-Fi Aware discovery."""
28
29 # configuration parameters used by tests
30 PAYLOAD_SIZE_MIN = 0
31 PAYLOAD_SIZE_TYPICAL = 1
32 PAYLOAD_SIZE_MAX = 2
33
34 # message strings
35 query_msg = "How are you doing? 你好嗎?"
36 response_msg = "Doing ok - thanks! 做的不錯 - 謝謝!"
37
38 # message re-transmit counter (increases reliability in open-environment)
39 # Note: reliability of message transmission is tested elsewhere
40 msg_retx_count = 5 # hard-coded max value, internal API
41
42 def __init__(self, controllers):
43 AwareBaseTest.__init__(self, controllers)
44
Etan Cohenfb7f3b12017-05-19 06:54:03 -070045 def create_base_config(self, caps, is_publish, ptype, stype, payload_size,
46 ttl, term_ind_on, null_match):
Etan Cohen872a6be2017-05-16 08:08:15 -070047 """Create a base configuration based on input parameters.
48
49 Args:
Etan Cohenfb7f3b12017-05-19 06:54:03 -070050 caps: device capability dictionary
Etan Cohen872a6be2017-05-16 08:08:15 -070051 is_publish: True if a publish config, else False
52 ptype: unsolicited or solicited (used if is_publish is True)
53 stype: passive or active (used if is_publish is False)
54 payload_size: min, typical, max (PAYLOAD_SIZE_xx)
55 ttl: time-to-live configuration (0 - forever)
56 term_ind_on: is termination indication enabled
57 null_match: null-out the middle match filter
58 Returns:
59 publish discovery configuration object.
60 """
61 config = {}
62 if is_publish:
63 config[aconsts.DISCOVERY_KEY_DISCOVERY_TYPE] = ptype
64 else:
65 config[aconsts.DISCOVERY_KEY_DISCOVERY_TYPE] = stype
66 config[aconsts.DISCOVERY_KEY_TTL] = ttl
67 config[aconsts.DISCOVERY_KEY_TERM_CB_ENABLED] = term_ind_on
68 if payload_size == self.PAYLOAD_SIZE_MIN:
69 config[aconsts.DISCOVERY_KEY_SERVICE_NAME] = "a"
70 config[aconsts.DISCOVERY_KEY_SSI] = None
Etan Cohen0bc1cab2017-05-18 15:30:41 -070071 config[aconsts.DISCOVERY_KEY_MATCH_FILTER_LIST] = []
Etan Cohen872a6be2017-05-16 08:08:15 -070072 elif payload_size == self.PAYLOAD_SIZE_TYPICAL:
73 config[aconsts.DISCOVERY_KEY_SERVICE_NAME] = "GoogleTestServiceX"
74 if is_publish:
75 config[aconsts.DISCOVERY_KEY_SSI] = string.ascii_letters
76 else:
77 config[aconsts.DISCOVERY_KEY_SSI] = string.ascii_letters[::
78 -1] # reverse
79 config[aconsts.DISCOVERY_KEY_MATCH_FILTER_LIST] = autils.encode_list(
80 [(10).to_bytes(1, byteorder="big"), "hello there string"
81 if not null_match else None,
82 bytes(range(40))])
Etan Cohen5a629a62017-05-19 15:11:18 -070083 else: # PAYLOAD_SIZE_MAX
84 config[aconsts.DISCOVERY_KEY_SERVICE_NAME] = "VeryLong" + "X" * (
85 caps[aconsts.CAP_MAX_SERVICE_NAME_LEN] - 8)
86 config[aconsts.DISCOVERY_KEY_SSI] = ("P" if is_publish else "S") * caps[
87 aconsts.CAP_MAX_SERVICE_SPECIFIC_INFO_LEN]
88 mf = autils.construct_max_match_filter(
89 caps[aconsts.CAP_MAX_MATCH_FILTER_LEN])
90 if null_match:
91 mf[2] = None
92 config[aconsts.DISCOVERY_KEY_MATCH_FILTER_LIST] = autils.encode_list(mf)
93
Etan Cohen872a6be2017-05-16 08:08:15 -070094 return config
95
Etan Cohenfb7f3b12017-05-19 06:54:03 -070096 def create_publish_config(self, caps, ptype, payload_size, ttl, term_ind_on,
Etan Cohen872a6be2017-05-16 08:08:15 -070097 null_match):
98 """Create a publish configuration based on input parameters.
99
100 Args:
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700101 caps: device capability dictionary
Etan Cohen872a6be2017-05-16 08:08:15 -0700102 ptype: unsolicited or solicited
103 payload_size: min, typical, max (PAYLOAD_SIZE_xx)
104 ttl: time-to-live configuration (0 - forever)
105 term_ind_on: is termination indication enabled
106 null_match: null-out the middle match filter
107 Returns:
108 publish discovery configuration object.
109 """
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700110 return self.create_base_config(caps, True, ptype, None, payload_size, ttl,
Etan Cohen872a6be2017-05-16 08:08:15 -0700111 term_ind_on, null_match)
112
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700113 def create_subscribe_config(self, caps, stype, payload_size, ttl, term_ind_on,
Etan Cohen872a6be2017-05-16 08:08:15 -0700114 null_match):
115 """Create a subscribe configuration based on input parameters.
116
117 Args:
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700118 caps: device capability dictionary
Etan Cohen872a6be2017-05-16 08:08:15 -0700119 stype: passive or active
120 payload_size: min, typical, max (PAYLOAD_SIZE_xx)
121 ttl: time-to-live configuration (0 - forever)
122 term_ind_on: is termination indication enabled
123 null_match: null-out the middle match filter
124 Returns:
125 subscribe discovery configuration object.
126 """
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700127 return self.create_base_config(caps, False, None, stype, payload_size, ttl,
Etan Cohen872a6be2017-05-16 08:08:15 -0700128 term_ind_on, null_match)
129
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700130 def positive_discovery_test_utility(self, ptype, stype, payload_size):
Etan Cohen872a6be2017-05-16 08:08:15 -0700131 """Utility which runs a positive discovery test:
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700132 - Discovery (publish/subscribe) with TTL=0 (non-self-terminating)
Etan Cohen872a6be2017-05-16 08:08:15 -0700133 - Exchange messages
134 - Update publish/subscribe
135 - Terminate
136
137 Args:
138 ptype: Publish discovery type
139 stype: Subscribe discovery type
140 payload_size: One of PAYLOAD_SIZE_* constants - MIN, TYPICAL, MAX
Etan Cohen872a6be2017-05-16 08:08:15 -0700141 """
142 p_dut = self.android_devices[0]
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700143 p_dut.pretty_name = "Publisher"
Etan Cohen872a6be2017-05-16 08:08:15 -0700144 s_dut = self.android_devices[1]
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700145 s_dut.pretty_name = "Subscriber"
Etan Cohen872a6be2017-05-16 08:08:15 -0700146
147 # Publisher+Subscriber: attach and wait for confirmation
148 p_id = p_dut.droid.wifiAwareAttach(False)
149 autils.wait_for_event(p_dut, aconsts.EVENT_CB_ON_ATTACHED)
150 s_id = s_dut.droid.wifiAwareAttach(False)
151 autils.wait_for_event(s_dut, aconsts.EVENT_CB_ON_ATTACHED)
152
153 # Publisher: start publish and wait for confirmation
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700154 p_config = self.create_publish_config(
155 p_dut.aware_capabilities,
156 ptype,
157 payload_size,
158 ttl=0,
159 term_ind_on=False,
160 null_match=False)
Etan Cohen872a6be2017-05-16 08:08:15 -0700161 p_disc_id = p_dut.droid.wifiAwarePublish(p_id, p_config)
162 autils.wait_for_event(p_dut, aconsts.SESSION_CB_ON_PUBLISH_STARTED)
163
164 # Subscriber: start subscribe and wait for confirmation
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700165 s_config = self.create_subscribe_config(
166 s_dut.aware_capabilities,
167 stype,
168 payload_size,
169 ttl=0,
170 term_ind_on=False,
171 null_match=True)
Etan Cohen872a6be2017-05-16 08:08:15 -0700172 s_disc_id = s_dut.droid.wifiAwareSubscribe(s_id, s_config)
173 autils.wait_for_event(s_dut, aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED)
174
175 # Subscriber: wait for service discovery
176 discovery_event = autils.wait_for_event(
177 s_dut, aconsts.SESSION_CB_ON_SERVICE_DISCOVERED)
178 peer_id_on_sub = discovery_event["data"][aconsts.SESSION_CB_KEY_PEER_ID]
179
180 # Subscriber: validate contents of discovery (specifically that getting the
181 # Publisher's SSI and MatchFilter!)
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700182 autils.assert_equal_strings(
Etan Cohen872a6be2017-05-16 08:08:15 -0700183 bytes(discovery_event["data"][
184 aconsts.SESSION_CB_KEY_SERVICE_SPECIFIC_INFO]).decode("utf-8"),
185 p_config[aconsts.DISCOVERY_KEY_SSI],
186 "Discovery mismatch: service specific info (SSI)")
187 asserts.assert_equal(
188 autils.decode_list(
189 discovery_event["data"][aconsts.SESSION_CB_KEY_MATCH_FILTER_LIST]),
190 autils.decode_list(p_config[aconsts.DISCOVERY_KEY_MATCH_FILTER_LIST]),
191 "Discovery mismatch: match filter")
192
193 # Subscriber: send message to peer (Publisher)
194 s_dut.droid.wifiAwareSendMessage(s_disc_id, peer_id_on_sub,
195 self.get_next_msg_id(), self.query_msg,
196 self.msg_retx_count)
197 autils.wait_for_event(s_dut, aconsts.SESSION_CB_ON_MESSAGE_SENT)
198
199 # Publisher: wait for received message
200 pub_rx_msg_event = autils.wait_for_event(
201 p_dut, aconsts.SESSION_CB_ON_MESSAGE_RECEIVED)
202 peer_id_on_pub = pub_rx_msg_event["data"][aconsts.SESSION_CB_KEY_PEER_ID]
203
204 # Publisher: validate contents of message
205 asserts.assert_equal(
206 pub_rx_msg_event["data"][aconsts.SESSION_CB_KEY_MESSAGE_AS_STRING],
207 self.query_msg, "Subscriber -> Publisher message corrupted")
208
209 # Publisher: send message to peer (Subscriber)
210 p_dut.droid.wifiAwareSendMessage(p_disc_id, peer_id_on_pub,
211 self.get_next_msg_id(), self.response_msg,
212 self.msg_retx_count)
213 autils.wait_for_event(p_dut, aconsts.SESSION_CB_ON_MESSAGE_SENT)
214
215 # Subscriber: wait for received message
216 sub_rx_msg_event = autils.wait_for_event(
217 s_dut, aconsts.SESSION_CB_ON_MESSAGE_RECEIVED)
218
219 # Subscriber: validate contents of message
220 asserts.assert_equal(
221 sub_rx_msg_event["data"][aconsts.SESSION_CB_KEY_PEER_ID],
222 peer_id_on_sub,
223 "Subscriber received message from different peer ID then discovery!?")
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700224 autils.assert_equal_strings(
Etan Cohen872a6be2017-05-16 08:08:15 -0700225 sub_rx_msg_event["data"][aconsts.SESSION_CB_KEY_MESSAGE_AS_STRING],
226 self.response_msg, "Publisher -> Subscriber message corrupted")
227
228 # Subscriber: validate that we're not getting another Service Discovery
229 autils.fail_on_event(s_dut, aconsts.SESSION_CB_ON_SERVICE_DISCOVERED)
230
231 # Publisher: update publish and wait for confirmation
232 p_config[aconsts.DISCOVERY_KEY_SSI] = "something else"
233 p_dut.droid.wifiAwareUpdatePublish(p_disc_id, p_config)
234 autils.wait_for_event(p_dut, aconsts.SESSION_CB_ON_SESSION_CONFIG_UPDATED)
235
236 # Subscriber: expect a new service discovery
237 discovery_event = autils.wait_for_event(
238 s_dut, aconsts.SESSION_CB_ON_SERVICE_DISCOVERED)
239
240 # Subscriber: validate contents of discovery
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700241 autils.assert_equal_strings(
Etan Cohen872a6be2017-05-16 08:08:15 -0700242 bytes(discovery_event["data"][
243 aconsts.SESSION_CB_KEY_SERVICE_SPECIFIC_INFO]).decode("utf-8"),
244 p_config[aconsts.DISCOVERY_KEY_SSI],
245 "Discovery mismatch (after pub update): service specific info (SSI)")
246 asserts.assert_equal(
247 autils.decode_list(
248 discovery_event["data"][aconsts.SESSION_CB_KEY_MATCH_FILTER_LIST]),
249 autils.decode_list(p_config[aconsts.DISCOVERY_KEY_MATCH_FILTER_LIST]),
250 "Discovery mismatch: match filter")
251
252 # Subscribe: update subscribe and wait for confirmation
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700253 s_config = self.create_subscribe_config(
254 s_dut.aware_capabilities,
255 stype,
256 payload_size,
257 ttl=0,
258 term_ind_on=False,
259 null_match=False)
Etan Cohen872a6be2017-05-16 08:08:15 -0700260 s_dut.droid.wifiAwareUpdateSubscribe(s_disc_id, s_config)
261 autils.wait_for_event(s_dut, aconsts.SESSION_CB_ON_SESSION_CONFIG_UPDATED)
262
Etan Cohen872a6be2017-05-16 08:08:15 -0700263 # Publisher+Subscriber: Terminate sessions
264 p_dut.droid.wifiAwareDestroyDiscoverySession(p_disc_id)
265 s_dut.droid.wifiAwareDestroyDiscoverySession(s_disc_id)
266
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700267 # sleep for timeout period and then verify all 'fail_on_event' together
268 time.sleep(autils.EVENT_TIMEOUT)
269
Etan Cohen2c8db552017-05-22 11:00:03 -0700270 # verify that there were no other events
271 autils.verify_no_more_events(p_dut, 0)
272 autils.verify_no_more_events(s_dut, 0)
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700273
Etan Cohen2c8db552017-05-22 11:00:03 -0700274 def verify_discovery_session_term(self, dut, disc_id, config, is_publish,
275 term_ind_on):
276 """Utility to verify that the specified discovery session has terminated (by
277 waiting for the TTL and then attempting to reconfigure).
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700278
Etan Cohen2c8db552017-05-22 11:00:03 -0700279 Args:
280 dut: device under test
281 disc_id: discovery id for the existing session
282 config: configuration of the existing session
283 is_publish: True if the configuration was publish, False if subscribe
284 term_ind_on: True if a termination indication is expected, False otherwise
285 """
286 # Wait for session termination
287 if term_ind_on:
288 autils.wait_for_event(
289 dut,
290 autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_TERMINATED,
291 disc_id))
292 else:
293 # can't defer wait to end since in any case have to wait for session to
294 # expire
295 autils.fail_on_event(
296 dut,
297 autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_TERMINATED,
298 disc_id))
299
300 # Validate that session expired by trying to configure it (expect failure)
301 config[aconsts.DISCOVERY_KEY_SSI] = "something else"
302 if is_publish:
303 dut.droid.wifiAwareUpdatePublish(disc_id, config)
304 else:
305 dut.droid.wifiAwareUpdateSubscribe(disc_id, config)
306 # failure expected - should verify that SESSION_CB_ON_SESSION_CONFIG_UPDATED
307 # not received but instead will verify_no_more_events at end of test
308
309 def positive_ttl_test_utility(self, is_publish, ptype, stype, term_ind_on):
310 """Utility which runs a positive discovery session TTL configuration test
311
312 Iteration 1: Verify session started with TTL
313 Iteration 2: Verify session started without TTL and reconfigured with TTL
314 Iteration 3: Verify session started with (long) TTL and reconfigured with
315 (short) TTL
316
317 Args:
318 is_publish: True if testing publish, False if testing subscribe
319 ptype: Publish discovery type (used if is_publish is True)
320 stype: Subscribe discovery type (used if is_publish is False)
321 term_ind_on: Configuration of termination indication
322 """
323 SHORT_TTL = 5 # 5 seconds
324 LONG_TTL = 100 # 100 seconds
325 dut = self.android_devices[0]
326
327 # Attach and wait for confirmation
328 id = dut.droid.wifiAwareAttach(False)
329 autils.wait_for_event(dut, aconsts.EVENT_CB_ON_ATTACHED)
330
331 # Iteration 1: Start discovery session with TTL
332 config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
333 stype, self.PAYLOAD_SIZE_TYPICAL,
334 SHORT_TTL, term_ind_on, False)
335 if is_publish:
336 disc_id = dut.droid.wifiAwarePublish(id, config, True)
337 autils.wait_for_event(dut,
338 autils.decorate_event(
339 aconsts.SESSION_CB_ON_PUBLISH_STARTED, disc_id))
340 else:
341 disc_id = dut.droid.wifiAwareSubscribe(id, config, True)
342 autils.wait_for_event(
343 dut,
344 autils.decorate_event(aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED,
345 disc_id))
346
347 # Wait for session termination & verify
348 self.verify_discovery_session_term(dut, disc_id, config, is_publish,
349 term_ind_on)
350
351 # Iteration 2: Start a discovery session without TTL
352 config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
353 stype, self.PAYLOAD_SIZE_TYPICAL, 0,
354 term_ind_on, False)
355 if is_publish:
356 disc_id = dut.droid.wifiAwarePublish(id, config, True)
357 autils.wait_for_event(dut,
358 autils.decorate_event(
359 aconsts.SESSION_CB_ON_PUBLISH_STARTED, disc_id))
360 else:
361 disc_id = dut.droid.wifiAwareSubscribe(id, config, True)
362 autils.wait_for_event(
363 dut,
364 autils.decorate_event(aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED,
365 disc_id))
366
367 # Update with a TTL
368 config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
369 stype, self.PAYLOAD_SIZE_TYPICAL,
370 SHORT_TTL, term_ind_on, False)
371 if is_publish:
372 dut.droid.wifiAwareUpdatePublish(disc_id, config)
373 else:
374 dut.droid.wifiAwareUpdateSubscribe(disc_id, config)
375 autils.wait_for_event(
376 dut,
377 autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_CONFIG_UPDATED,
378 disc_id))
379
380 # Wait for session termination & verify
381 self.verify_discovery_session_term(dut, disc_id, config, is_publish,
382 term_ind_on)
383
384 # Iteration 3: Start a discovery session with (long) TTL
385 config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
386 stype, self.PAYLOAD_SIZE_TYPICAL, LONG_TTL,
387 term_ind_on, False)
388 if is_publish:
389 disc_id = dut.droid.wifiAwarePublish(id, config, True)
390 autils.wait_for_event(dut,
391 autils.decorate_event(
392 aconsts.SESSION_CB_ON_PUBLISH_STARTED, disc_id))
393 else:
394 disc_id = dut.droid.wifiAwareSubscribe(id, config, True)
395 autils.wait_for_event(
396 dut,
397 autils.decorate_event(aconsts.SESSION_CB_ON_SUBSCRIBE_STARTED,
398 disc_id))
399
400 # Update with a TTL
401 config = self.create_base_config(dut.aware_capabilities, is_publish, ptype,
402 stype, self.PAYLOAD_SIZE_TYPICAL,
403 SHORT_TTL, term_ind_on, False)
404 if is_publish:
405 dut.droid.wifiAwareUpdatePublish(disc_id, config)
406 else:
407 dut.droid.wifiAwareUpdateSubscribe(disc_id, config)
408 autils.wait_for_event(
409 dut,
410 autils.decorate_event(aconsts.SESSION_CB_ON_SESSION_CONFIG_UPDATED,
411 disc_id))
412
413 # Wait for session termination & verify
414 self.verify_discovery_session_term(dut, disc_id, config, is_publish,
415 term_ind_on)
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700416
417 # verify that there were no other events
Etan Cohen2c8db552017-05-22 11:00:03 -0700418 autils.verify_no_more_events(dut)
Etan Cohen872a6be2017-05-16 08:08:15 -0700419
420 #######################################
421 # Positive tests key:
422 #
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700423 # names is: test_<pub_type>_<sub_type>_<size>
Etan Cohen872a6be2017-05-16 08:08:15 -0700424 # where:
425 #
426 # pub_type: Type of publish discovery session: unsolicited or solicited.
427 # sub_type: Type of subscribe discovery session: passive or active.
428 # size: Size of payload fields (service name, service specific info, and match
429 # filter: typical, max, or min.
Etan Cohen872a6be2017-05-16 08:08:15 -0700430 #######################################
431
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700432 def test_positive_unsolicited_passive_typical(self):
Etan Cohen872a6be2017-05-16 08:08:15 -0700433 """Functional test case / Discovery test cases / positive test case:
434 - Solicited publish + passive subscribe
435 - Typical payload fields size
Etan Cohen872a6be2017-05-16 08:08:15 -0700436
437 Verifies that discovery and message exchange succeeds.
438 """
439 self.positive_discovery_test_utility(
440 ptype=aconsts.PUBLISH_TYPE_UNSOLICITED,
441 stype=aconsts.SUBSCRIBE_TYPE_PASSIVE,
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700442 payload_size=self.PAYLOAD_SIZE_TYPICAL)
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700443
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700444 def test_positive_unsolicited_passive_min(self):
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700445 """Functional test case / Discovery test cases / positive test case:
446 - Solicited publish + passive subscribe
447 - Minimal payload fields size
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700448
449 Verifies that discovery and message exchange succeeds.
450 """
451 self.positive_discovery_test_utility(
452 ptype=aconsts.PUBLISH_TYPE_UNSOLICITED,
453 stype=aconsts.SUBSCRIBE_TYPE_PASSIVE,
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700454 payload_size=self.PAYLOAD_SIZE_MIN)
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700455
Etan Cohen5a629a62017-05-19 15:11:18 -0700456 def test_positive_unsolicited_passive_max(self):
457 """Functional test case / Discovery test cases / positive test case:
458 - Solicited publish + passive subscribe
459 - Maximal payload fields size
460
461 Verifies that discovery and message exchange succeeds.
462 """
463 self.positive_discovery_test_utility(
464 ptype=aconsts.PUBLISH_TYPE_UNSOLICITED,
465 stype=aconsts.SUBSCRIBE_TYPE_PASSIVE,
466 payload_size=self.PAYLOAD_SIZE_MAX)
467
468
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700469 def test_positive_solicited_active_typical(self):
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700470 """Functional test case / Discovery test cases / positive test case:
471 - Unsolicited publish + active subscribe
472 - Typical payload fields size
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700473
474 Verifies that discovery and message exchange succeeds.
475 """
476 self.positive_discovery_test_utility(
477 ptype=aconsts.PUBLISH_TYPE_SOLICITED,
478 stype=aconsts.SUBSCRIBE_TYPE_ACTIVE,
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700479 payload_size=self.PAYLOAD_SIZE_TYPICAL)
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700480
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700481 def test_positive_solicited_active_min(self):
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700482 """Functional test case / Discovery test cases / positive test case:
483 - Unsolicited publish + active subscribe
484 - Minimal payload fields size
Etan Cohen0bc1cab2017-05-18 15:30:41 -0700485
486 Verifies that discovery and message exchange succeeds.
487 """
488 self.positive_discovery_test_utility(
489 ptype=aconsts.PUBLISH_TYPE_SOLICITED,
490 stype=aconsts.SUBSCRIBE_TYPE_ACTIVE,
Etan Cohenfb7f3b12017-05-19 06:54:03 -0700491 payload_size=self.PAYLOAD_SIZE_MIN)
Etan Cohen5a629a62017-05-19 15:11:18 -0700492
493 def test_positive_solicited_active_max(self):
494 """Functional test case / Discovery test cases / positive test case:
495 - Unsolicited publish + active subscribe
496 - Maximal payload fields size
497
498 Verifies that discovery and message exchange succeeds.
499 """
500 self.positive_discovery_test_utility(
501 ptype=aconsts.PUBLISH_TYPE_SOLICITED,
502 stype=aconsts.SUBSCRIBE_TYPE_ACTIVE,
503 payload_size=self.PAYLOAD_SIZE_MAX)
Etan Cohen2c8db552017-05-22 11:00:03 -0700504
505 #######################################
506 # TTL tests key:
507 #
508 # names is: test_ttl_<pub_type|sub_type>_<term_ind>
509 # where:
510 #
511 # pub_type: Type of publish discovery session: unsolicited or solicited.
512 # sub_type: Type of subscribe discovery session: passive or active.
513 # term_ind: ind_on or ind_off
514 #######################################
515
516 def test_ttl_unsolicited_ind_on(self):
517 """Functional test case / Discovery test cases / TTL test case:
518 - Unsolicited publish
519 - Termination indication enabled
520 """
521 self.positive_ttl_test_utility(
522 is_publish=True,
523 ptype=aconsts.PUBLISH_TYPE_UNSOLICITED,
524 stype=None,
525 term_ind_on=True)
Etan Cohen3010bc22017-05-22 12:47:17 -0700526
527 def test_ttl_unsolicited_ind_off(self):
528 """Functional test case / Discovery test cases / TTL test case:
529 - Unsolicited publish
530 - Termination indication disabled
531 """
532 self.positive_ttl_test_utility(
533 is_publish=True,
534 ptype=aconsts.PUBLISH_TYPE_UNSOLICITED,
535 stype=None,
536 term_ind_on=False)
537
538 def test_ttl_solicited_ind_on(self):
539 """Functional test case / Discovery test cases / TTL test case:
540 - Solicited publish
541 - Termination indication enabled
542 """
543 self.positive_ttl_test_utility(
544 is_publish=True,
545 ptype=aconsts.PUBLISH_TYPE_SOLICITED,
546 stype=None,
547 term_ind_on=True)
548
549 def test_ttl_solicited_ind_off(self):
550 """Functional test case / Discovery test cases / TTL test case:
551 - Solicited publish
552 - Termination indication disabled
553 """
554 self.positive_ttl_test_utility(
555 is_publish=True,
556 ptype=aconsts.PUBLISH_TYPE_SOLICITED,
557 stype=None,
558 term_ind_on=False)
559
560 def test_ttl_passive_ind_on(self):
561 """Functional test case / Discovery test cases / TTL test case:
562 - Passive subscribe
563 - Termination indication enabled
564 """
565 self.positive_ttl_test_utility(
566 is_publish=False,
567 ptype=None,
568 stype=aconsts.SUBSCRIBE_TYPE_PASSIVE,
569 term_ind_on=True)
570
571 def test_ttl_passive_ind_off(self):
572 """Functional test case / Discovery test cases / TTL test case:
573 - Passive subscribe
574 - Termination indication disabled
575 """
576 self.positive_ttl_test_utility(
577 is_publish=False,
578 ptype=None,
579 stype=aconsts.SUBSCRIBE_TYPE_PASSIVE,
580 term_ind_on=False)
581
582 def test_ttl_active_ind_on(self):
583 """Functional test case / Discovery test cases / TTL test case:
584 - Active subscribe
585 - Termination indication enabled
586 """
587 self.positive_ttl_test_utility(
588 is_publish=False,
589 ptype=None,
590 stype=aconsts.SUBSCRIBE_TYPE_ACTIVE,
591 term_ind_on=True)
592
593 def test_ttl_active_ind_off(self):
594 """Functional test case / Discovery test cases / TTL test case:
595 - Active subscribe
596 - Termination indication disabled
597 """
598 self.positive_ttl_test_utility(
599 is_publish=False,
600 ptype=None,
601 stype=aconsts.SUBSCRIBE_TYPE_ACTIVE,
602 term_ind_on=False)