1# Copyright 2015 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5AUTHOR = 'samueltan, ejcaruso'
6NAME = 'network_WiFi_ReconnectInDarkResume.Stress'
7TIME = 'MEDIUM'
8TEST_TYPE = 'Server'
9DEPENDENCIES = 'servo, wificell, lucidsleep'
10ATTRIBUTES = 'suite:wifi_correctness_cros_core, suite:wifi_lucidsleep'
11SUITE = 'wifi_correctness_cros_core, wifi_lucidsleep'
12
13DOC = """
14This test verifies that the DUT successfully reconnects to a network in dark
15resume after getting disconnected from that same network while suspended.
16This test simulates the cases where multiple disconnect and SSID appearance
17events take place over a single period of suspension. The test is conducted as
18follows:
19
201) AP ("AP 1") is brought up, and DUT connects to it
212) AP 1 is brought down, disconnecting the DUT from it
223) Another AP ("AP 2") is brought up, and DUT connects to it
234) DUT suspends while connected to AP 2
245) AP 2 is brought down, disconnecting the DUT from it while suspended
256) AP 2 is brought up again
267) Repeat steps 5-6 another 4 times (for 5 total iterations)
278) The DUT is woken from suspend
289) Verify that the DUT is connected to AP 2 upon resuming from suspend
29
30We verify the connectivity status of the DUT on resume by parsing shill logs,
31since the delays involved in waking a DUT from suspend using autotest framework
32make real-time checks inaccurate.
33
34Note: this test suspends the DUT for long periods of time, which may lead to
35flakiness if the ssh connection from the autotest host to the DUT has a
36ServerAliveInterval setting that is too low (i.e. less than the total suspend
37time). This test was verified stable with the ServerAliveInterval set to 900.
38"""
39
40from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
41from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types
42from autotest_lib.server.cros.network import hostap_config
43from autotest_lib.server import utils
44
45args_dict = utils.args_to_dict(args)
46servo_args = hosts.CrosHost.get_servo_arguments(args_dict)
47
48def run(machine):
49    host = hosts.create_host(machine, servo_args=servo_args)
50    job.run_test('network_WiFi_ReconnectInDarkResume',
51                 host=host,
52                 tag=NAME.split('.')[1],
53                 disconnect_before_suspend=False,
54                 reconnect_to_same_ap=True,
55                 num_iterations=5,
56                 raw_cmdline_args=args)
57
58parallel_simple(run, machines)
59