network_3GSmokeTest: Run with wardmodem.

Update network_3GSmokeTest to use a wardmodem context. By default this context
is a noop.
Also add a control file to run the test with wardmodem.

BUG=chromium:263191
TEST=run network_3GSmokeTest.wardmodem

Change-Id: I295c2076a47ea9a7c5a7f3fda719e74c23ba2c3d
Reviewed-on: https://chromium-review.googlesource.com/169222
Reviewed-by: Ben Chan <benchan@chromium.org>
Commit-Queue: Prathmesh Prabhu <pprabhu@chromium.org>
Tested-by: Prathmesh Prabhu <pprabhu@chromium.org>
diff --git a/client/site_tests/network_3GSmokeTest/control.wardmodem_e362 b/client/site_tests/network_3GSmokeTest/control.wardmodem_e362
new file mode 100644
index 0000000..3d26ef8
--- /dev/null
+++ b/client/site_tests/network_3GSmokeTest/control.wardmodem_e362
@@ -0,0 +1,28 @@
+# Copyright (c) 2012 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 = "ChromeOS Team"
+NAME = "network_3GSmokeTest.wardmodem_e362"
+PURPOSE = "Verify 3G modem can connect to the network."
+CRITERIA = """
+This test will fail if one of the following conditions occur:
+  - 3G modem fails to connect to network
+  - the modem is not left in a working state
+"""
+TIME = "SHORT"
+TEST_CATEGORY = "Functional"
+TEST_CLASS = "network"
+TEST_TYPE = "client"
+EXPERIMENTAL = "True"
+DOC = """
+  Tests that 3G modem can connect to the network
+
+  The test attempts to connect using an E362 wardmodem. The test then
+  disconnects from the network, and verifies that the modem still
+  responds to modem manager DBUS API calls.  It repeats the
+  connect/disconnect sequence several times.
+  Since this test uses the wardmodem, it has no hardware dependencies.
+"""
+
+job.run_test('network_3GSmokeTest', use_wardmodem=True, wardmodem_modem='e362')
diff --git a/client/site_tests/network_3GSmokeTest/network_3GSmokeTest.py b/client/site_tests/network_3GSmokeTest/network_3GSmokeTest.py
index c1026fb..a79bc45 100644
--- a/client/site_tests/network_3GSmokeTest/network_3GSmokeTest.py
+++ b/client/site_tests/network_3GSmokeTest/network_3GSmokeTest.py
@@ -20,6 +20,7 @@
 # TODO(armansito): We should really move cros/cellular/pseudomodem/mm1.py to
 # cros/cellular/, as it deprecates the old mm1.py. See crosbug.com/37005
 from autotest_lib.client.cros.cellular.pseudomodem import pseudomodem
+from autotest_lib.client.cros.cellular.wardmodem import wardmodem
 
 
 # Default timeouts in seconds
@@ -151,7 +152,12 @@
 
 
     def run_once(self, connect_count=5, use_pseudomodem=False,
-                 pseudomodem_family='3GPP', sleep_kludge=5, fetch_timeout=120):
+                 pseudomodem_family='3GPP', use_wardmodem=False,
+                 wardmodem_modem=None, sleep_kludge=5, fetch_timeout=120):
+        if use_pseudomodem and use_wardmodem:
+            raise error.TestFail('Can not run with Pseudomodem and Wardmodem '
+                                 'at the same time.')
+
         self.connect_count = connect_count
         self.use_pseudomodem = use_pseudomodem
         self.sleep_kludge = sleep_kludge
@@ -159,9 +165,12 @@
 
         with backchannel.Backchannel():
             with pseudomodem.TestModemManagerContext(
-                use_pseudomodem,family=pseudomodem_family):
-                with cell_tools.OtherDeviceShutdownContext('cellular'):
-                    time.sleep(3)
-                    self.flim = flimflam.FlimFlam()
-                    self.flim.SetDebugTags(SHILL_LOG_SCOPES)
-                    self.run_once_internal()
+                    use_pseudomodem,family=pseudomodem_family):
+                with wardmodem.WardModemContext(use_wardmodem,
+                                                args=['--modem',
+                                                      wardmodem_modem]):
+                    with cell_tools.OtherDeviceShutdownContext('cellular'):
+                        time.sleep(3)
+                        self.flim = flimflam.FlimFlam()
+                        self.flim.SetDebugTags(SHILL_LOG_SCOPES)
+                        self.run_once_internal()