autotest: SimpleConnect test using apmanager

Verify client IP connectivity with an AP service provided by
apmanager.

BUG=chromium:442187
TEST=Run this test

Change-Id: I8dd771516bf13e21f3cb02bc417918863d9792a3
Reviewed-on: https://chromium-review.googlesource.com/236756
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Commit-Queue: Peter Qiu <zqiu@chromium.org>
Tested-by: Peter Qiu <zqiu@chromium.org>
diff --git a/server/site_linux_router.py b/server/site_linux_router.py
index 3453078..c62facf 100644
--- a/server/site_linux_router.py
+++ b/server/site_linux_router.py
@@ -222,7 +222,7 @@
         control_interface = self.HOSTAPD_CONTROL_INTERFACE_PATTERN % interface
         hostapd_conf_dict = configuration.generate_dict(
                 interface, control_interface,
-                self._build_unique_ssid(configuration.ssid_suffix))
+                self.build_unique_ssid(suffix=configuration.ssid_suffix))
         logging.debug('hostapd parameters: %r', hostapd_conf_dict)
 
         # Generate hostapd.conf.
@@ -350,7 +350,7 @@
             raise error.TestError('Timed out killing hostapd.')
 
 
-    def _build_unique_ssid(self, suffix):
+    def build_unique_ssid(self, suffix=''):
         """ Build our unique token by base-<len(self.SUFFIX_LETTERS)> encoding
         the number of APs we've constructed already.
 
@@ -403,7 +403,8 @@
         if self.station_instances or self.hostapd_instances:
             self.deconfig()
         interface = self.get_wlanif(config.frequency, 'ibss')
-        ssid = (config.ssid or self._build_unique_ssid(config.ssid_suffix))
+        ssid = (config.ssid or
+                self.build_unique_ssid(suffix=config.ssid_suffix))
         # Connect the station
         self.router.run('%s link set %s up' % (self.cmd_ip, interface))
         self.iw_runner.ibss_join(interface, ssid, config.frequency)
diff --git a/server/site_tests/apmanager_SimpleConnect/apmanager_SimpleConnect.py b/server/site_tests/apmanager_SimpleConnect/apmanager_SimpleConnect.py
new file mode 100644
index 0000000..33abbbb
--- /dev/null
+++ b/server/site_tests/apmanager_SimpleConnect/apmanager_SimpleConnect.py
@@ -0,0 +1,34 @@
+# Copyright 2014 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
+from autotest_lib.server.cros.network import apmanager_service_provider
+from autotest_lib.server.cros.network import wifi_cell_test_base
+
+
+class apmanager_SimpleConnect(wifi_cell_test_base.WiFiCellTestBase):
+    """Test that the DUT can connect to an AP created by apmanager."""
+    version = 1
+
+
+    XMLRPC_BRINGUP_TIMEOUT_SECONDS = 60
+
+
+    def run_once(self):
+        """Sets up a router, connects to it, pings it."""
+        ssid = self.context.router.build_unique_ssid()
+        with apmanager_service_provider.ApmanagerServiceProvider(
+                self.context.router, ssid):
+            assoc_params = xmlrpc_datatypes.AssociationParameters()
+            assoc_params.ssid = ssid
+            self.context.assert_connect_wifi(assoc_params)
+            self.context.assert_ping_from_server()
+        # AP is terminated, wait for client to become disconnected.
+        success, state, elapsed_seconds = \
+                self.context.client.wait_for_service_states(
+                        ssid, ( 'idle', ), 30)
+        if not success:
+            raise error.TestFail('Failed to disconnect from %s after AP was '
+                                 'terminated for %f seconds (state=%s)' %
+                                 (ssid, elapsed_seconds, state))
diff --git a/server/site_tests/apmanager_SimpleConnect/control b/server/site_tests/apmanager_SimpleConnect/control
new file mode 100644
index 0000000..076d888
--- /dev/null
+++ b/server/site_tests/apmanager_SimpleConnect/control
@@ -0,0 +1,24 @@
+# Copyright 2014 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+AUTHOR = 'zqiu, wiley, pstew'
+NAME = 'apmanager_SimpleConnect'
+TIME = 'SHORT'
+TEST_TYPE = 'Server'
+DEPENDENCIES = 'wificell'
+
+DOC = """
+This test verifies that DUT can connect to an WiFi network created using
+apmanager.
+"""
+
+
+def run(machine):
+    host = hosts.create_host(machine)
+    job.run_test('apmanager_SimpleConnect',
+                 host=host,
+                 raw_cmdline_args=args)
+
+
+parallel_simple(run, machines)