Merge "Test runner can now gather info without running"
diff --git a/acts/framework/acts/test_utils/tel/tel_test_utils.py b/acts/framework/acts/test_utils/tel/tel_test_utils.py
index a521fa4..df990bf 100644
--- a/acts/framework/acts/test_utils/tel/tel_test_utils.py
+++ b/acts/framework/acts/test_utils/tel/tel_test_utils.py
@@ -1674,8 +1674,10 @@
 def iperf_test_by_adb(log,
                       ad,
                       iperf_server,
+                      port_num=None,
+                      reverse=False,
                       timeout=180,
-                      limit_rate=100000,
+                      limit_rate=None,
                       omit=10,
                       ipv6=False):
     """Iperf test by adb.
@@ -1683,14 +1685,17 @@
     Args:
         log: log object
         ad: Android Device Object.
-        url: The iperf host url".
+        iperf_Server: The iperf host url".
+        port_num: TCP/UDP server port
         timeout: timeout for file download to complete.
         limit_rate: iperf bandwidth option. None by default
         omit: the omit option provided in iperf command.
     """
     iperf_option = "-t %s -O %s -J" % (timeout, omit)
     if limit_rate: iperf_option += " -b %s" % limit_rate
+    if port_num: iperf_option += " -p %s" % port_num
     if ipv6: iperf_option += " -6"
+    if reverse: iperf_option += " -R"
     try:
         ad.log.info("Running adb iperf test with server %s", iperf_server)
         result, data = ad.run_iperf_client(
diff --git a/acts/tests/google/tel/lab/TelLabDataTest.py b/acts/tests/google/tel/lab/TelLabDataTest.py
new file mode 100644
index 0000000..1d9a8e6
--- /dev/null
+++ b/acts/tests/google/tel/lab/TelLabDataTest.py
@@ -0,0 +1,188 @@
+#/usr/bin/env python3.4
+#
+#   Copyright 2016 - The Android Open Source Project
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+"""
+Sanity tests for connectivity tests in telephony
+"""
+
+import time
+from acts.controllers.anritsu_lib._anritsu_utils import AnritsuError
+from acts.controllers.anritsu_lib.md8475a import MD8475A
+from acts.controllers.anritsu_lib.md8475a import VirtualPhoneStatus
+from acts.test_utils.tel.anritsu_utils import cb_serial_number
+from acts.test_utils.tel.anritsu_utils import set_system_model_1x
+from acts.test_utils.tel.anritsu_utils import set_system_model_gsm
+from acts.test_utils.tel.anritsu_utils import set_system_model_lte
+from acts.test_utils.tel.anritsu_utils import set_system_model_lte_wcdma
+from acts.test_utils.tel.anritsu_utils import set_system_model_wcdma
+from acts.test_utils.tel.anritsu_utils import sms_mo_send
+from acts.test_utils.tel.anritsu_utils import sms_mt_receive_verify
+from acts.test_utils.tel.anritsu_utils import set_usim_parameters
+from acts.test_utils.tel.tel_defines import DIRECTION_MOBILE_ORIGINATED
+from acts.test_utils.tel.tel_defines import DIRECTION_MOBILE_TERMINATED
+from acts.test_utils.tel.tel_defines import NETWORK_MODE_CDMA
+from acts.test_utils.tel.tel_defines import NETWORK_MODE_GSM_ONLY
+from acts.test_utils.tel.tel_defines import NETWORK_MODE_GSM_UMTS
+from acts.test_utils.tel.tel_defines import NETWORK_MODE_LTE_GSM_WCDMA
+from acts.test_utils.tel.tel_defines import RAT_1XRTT
+from acts.test_utils.tel.tel_defines import RAT_GSM
+from acts.test_utils.tel.tel_defines import RAT_LTE
+from acts.test_utils.tel.tel_defines import RAT_WCDMA
+from acts.test_utils.tel.tel_defines import RAT_FAMILY_CDMA2000
+from acts.test_utils.tel.tel_defines import RAT_FAMILY_GSM
+from acts.test_utils.tel.tel_defines import RAT_FAMILY_LTE
+from acts.test_utils.tel.tel_defines import RAT_FAMILY_UMTS
+from acts.test_utils.tel.tel_defines import NETWORK_SERVICE_DATA
+from acts.test_utils.tel.tel_defines import GEN_4G
+from acts.test_utils.tel.tel_test_utils import ensure_network_rat
+from acts.test_utils.tel.tel_test_utils import ensure_phones_idle
+from acts.test_utils.tel.tel_test_utils import ensure_network_generation
+from acts.test_utils.tel.tel_test_utils import toggle_airplane_mode
+from acts.test_utils.tel.tel_test_utils import iperf_test_by_adb
+from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
+from acts.utils import adb_shell_ping
+from acts.utils import rand_ascii_str
+from acts.controllers import iperf_server
+from acts.utils import exe_cmd
+
+DEFAULT_PING_DURATION = 30
+
+class TelLabDataTest(TelephonyBaseTest):
+    SETTLING_TIME = 30
+    SERIAL_NO = cb_serial_number()
+
+    def __init__(self, controllers):
+        TelephonyBaseTest.__init__(self, controllers)
+        self.ad = self.android_devices[0]
+        self.ip_server = self.iperf_servers[0]
+        self.port_num = self.ip_server.port
+        self.log.info("Iperf Port is %s", self.port_num)
+        self.ad.sim_card = getattr(self.ad, "sim_card", None)
+        self.log.info("SIM Card is %s", self.ad.sim_card)
+        self.md8475a_ip_address = self.user_params[
+            "anritsu_md8475a_ip_address"]
+        self.wlan_option = self.user_params.get("anritsu_wlan_option", False)
+
+    def setup_class(self):
+        try:
+            self.anritsu = MD8475A(self.md8475a_ip_address, self.log,
+                                   self.wlan_option)
+        except AnritsuError:
+            self.log.error("Error in connecting to Anritsu Simulator")
+            return False
+        return True
+
+    def setup_test(self):
+        ensure_phones_idle(self.log, self.android_devices)
+        toggle_airplane_mode(self.log, self.ad, True)
+        return True
+
+    def teardown_test(self):
+        self.log.info("Stopping Simulation")
+        self.anritsu.stop_simulation()
+        toggle_airplane_mode(self.log, self.ad, True)
+        return True
+
+    def teardown_class(self):
+        self.anritsu.disconnect()
+        return True
+
+    def _setup_data(self,
+                   set_simulation_func,
+                   rat):
+        try:
+            set_simulation_func(self.anritsu, self.user_params,
+                                self.ad.sim_card)
+            set_usim_parameters(self.anritsu, self.ad.sim_card)
+            self.anritsu.start_simulation()
+
+            if rat == RAT_LTE:
+                preferred_network_setting = NETWORK_MODE_LTE_GSM_WCDMA
+                rat_family = RAT_FAMILY_LTE
+            elif rat == RAT_WCDMA:
+                preferred_network_setting = NETWORK_MODE_GSM_UMTS
+                rat_family = RAT_FAMILY_UMTS
+            elif rat == RAT_GSM:
+                preferred_network_setting = NETWORK_MODE_GSM_ONLY
+                rat_family = RAT_FAMILY_GSM
+            elif rat == RAT_1XRTT:
+                preferred_network_setting = NETWORK_MODE_CDMA
+                rat_family = RAT_FAMILY_CDMA2000
+            else:
+                self.log.error("No valid RAT provided for SMS test.")
+                return False
+
+            if not ensure_network_rat(self.log,
+                                      self.ad,
+                                      preferred_network_setting,
+                                      rat_family,
+                                      toggle_apm_after_setting=True):
+                self.log.error(
+                    "Failed to set rat family {}, preferred network:{}".format(
+                        rat_family, preferred_network_setting))
+                return False
+
+            self.anritsu.wait_for_registration_state()
+            time.sleep(self.SETTLING_TIME)
+            if not ensure_network_generation(self.log, self.ad,
+                                             GEN_4G, NETWORK_SERVICE_DATA):
+                self.log.error("Device not in 4G Connected Mode.")
+                return False
+
+            # Fetch IP address of the host machine
+            cmd = "|".join(("ifconfig", "grep eth0 -A1", "grep inet",
+                           "cut -d ':' -f2", "cut -d ' ' -f 1"))
+            destination_ip = exe_cmd(cmd)
+            destination_ip = (destination_ip.decode("utf-8")).split("\n")[0]
+            self.log.info("Dest IP is %s", destination_ip)
+
+            if not adb_shell_ping(self.ad, DEFAULT_PING_DURATION,
+                                  destination_ip):
+                self.log.error("Pings failed to Destination.")
+                return False
+
+            self.ip_server.start()
+            if not iperf_test_by_adb(self.log, self.ad, destination_ip,
+                                     self.port_num, True, 60):
+                self.log.error("iperf failed to Destination.")
+            self.ip_server.stop()
+
+        except AnritsuError as e:
+            self.log.error("Error in connection with Anritsu Simulator: " +
+                           str(e))
+            return False
+        except Exception as e:
+            self.log.error("Exception during Data procedure: " + str(e))
+            return False
+        return True
+
+    """ Tests Begin """
+
+    @TelephonyBaseTest.tel_test_wrap
+    def test_lte_pings_iperf(self):
+        """ Test Pings functionality on LTE
+
+        Make Sure Phone is in LTE mode
+        Ping to destination server IP
+        iperf server on host machine
+        iperf client in on adb
+        iperf DL
+
+        Returns:
+            True if pass; False if fail
+        """
+        return self._setup_data(set_system_model_lte, RAT_LTE)
+
+    """ Tests End """