summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPresubmit Automerger Backend <android-build-presubmit-automerger-backend@system.gserviceaccount.com>2022-04-20 03:48:32 +0000
committerPresubmit Automerger Backend <android-build-presubmit-automerger-backend@system.gserviceaccount.com>2022-04-20 03:48:32 +0000
commitfccc7c4dfc9f49edd47f2f819c1a3282879f944d (patch)
tree77f866cc40f46bccf5a56fa7436bb7308b280555
parente621e90ac00c0daed0ab529b349f3371e27b3dd9 (diff)
parent509cba5bacb7270de014151698d40a40d0ed7439 (diff)
downloadconnectivity-fccc7c4dfc9f49edd47f2f819c1a3282879f944d.tar.gz
[automerge] [WifiPasspoint]Testing language change to connect passpoint 2p: 9b233f3567 2p: 509cba5bac
Original change: https://googleplex-android-review.googlesource.com/c/platform/tools/test/connectivity/+/17461108 Bug: 227167080 Change-Id: I7a8065d351910ce2e66c64a3ca13d8291c33df62
-rw-r--r--acts_tests/tests/google/wifi/WifiPasspointLanguageTest.py290
1 files changed, 290 insertions, 0 deletions
diff --git a/acts_tests/tests/google/wifi/WifiPasspointLanguageTest.py b/acts_tests/tests/google/wifi/WifiPasspointLanguageTest.py
new file mode 100644
index 000000000..c791de1a0
--- /dev/null
+++ b/acts_tests/tests/google/wifi/WifiPasspointLanguageTest.py
@@ -0,0 +1,290 @@
+#!/usr/bin/env python3.4
+#
+# Copyright 2022 - 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.
+
+import itertools
+import pprint
+import queue
+import time
+
+from acts_contrib.test_utils.net import ui_utils as uutils
+import acts_contrib.test_utils.wifi.wifi_test_utils as wutils
+from acts_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest
+
+from acts import asserts
+from acts import signals
+from acts.test_decorators import test_tracker_info
+
+WifiEnums = wutils.WifiEnums
+
+DEFAULT_TIMEOUT = 15
+OSU_TEST_TIMEOUT = 300
+
+# Constants for providers.
+OSU_BOINGO = 0
+BOINGO = 1
+
+# Constants used for various device operations.
+
+UNKNOWN_FQDN = "@#@@!00fffffx"
+
+# Constants for Boingo UI automator
+EDIT_TEXT_CLASS_NAME = "android.widget.EditText"
+PASSWORD_TEXT = "Password"
+PASSPOINT_BUTTON = "Get Passpoint"
+
+class WifiPasspointLanguageTest(WifiBaseTest):
+ """Tests for APIs in Android's WifiManager class.
+
+ Test Bed Requirement:
+ * One Android device
+ * Several Wi-Fi networks visible to the device, including an open Wi-Fi
+ network.
+ """
+ BOINGO_UI_TEXT = {
+ 'CHT': "線上註冊",
+ 'FRA': "Inscription en ligne",
+ 'US' : "Online Sign Up",
+ 'SPA': "Registro online",
+ 'ARA' : "الاشتراك على الإنترنت"
+ }
+
+ def setup_class(self):
+ super().setup_class()
+ self.dut = self.android_devices[0]
+ wutils.wifi_test_device_init(self.dut)
+ req_params = ["passpoint_networks",
+ "boingo_username",
+ "boingo_password",
+ "osu_configs"]
+ self.unpack_userparams(req_param_names=req_params,)
+ asserts.assert_true(
+ len(self.passpoint_networks) > 0,
+ "Need at least one Passpoint network.")
+ wutils.wifi_toggle_state(self.dut, True)
+ self.unknown_fqdn = UNKNOWN_FQDN
+
+ def setup_test(self):
+ super().setup_test()
+ self.dut.droid.wakeLockAcquireBright()
+ self.dut.droid.wakeUpNow()
+ self.dut.unlock_screen()
+ self.dut.adb.shell("input keyevent KEYCODE_HOME")
+
+ def teardown_test(self):
+ super().teardown_test()
+ self.dut.droid.wakeLockRelease()
+ self.dut.droid.goToSleepNow()
+ passpoint_configs = self.dut.droid.getPasspointConfigs()
+ for config in passpoint_configs:
+ wutils.delete_passpoint(self.dut, config)
+ wutils.reset_wifi(self.dut)
+ self.language_change('US')
+
+
+ """Helper Functions"""
+
+ def install_passpoint_profile(self, passpoint_config):
+ """Install the Passpoint network Profile.
+
+ Args:
+ passpoint_config: A JSON dict of the Passpoint configuration.
+
+ """
+ asserts.assert_true(WifiEnums.SSID_KEY in passpoint_config,
+ "Key '%s' must be present in network definition." %
+ WifiEnums.SSID_KEY)
+ # Install the Passpoint profile.
+ self.dut.droid.addUpdatePasspointConfig(passpoint_config)
+
+ def check_passpoint_connection(self, passpoint_network):
+ """Verify the device is automatically able to connect to the Passpoint
+ network.
+
+ Args:
+ passpoint_network: SSID of the Passpoint network.
+
+ """
+ ad = self.dut
+ ad.ed.clear_all_events()
+ try:
+ wutils.start_wifi_connection_scan_and_return_status(ad)
+ wutils.wait_for_connect(ad)
+ except:
+ pass
+ # Re-verify we are connected to the correct network.
+ network_info = self.dut.droid.wifiGetConnectionInfo()
+ self.log.info("Network Info: %s" % network_info)
+ if not network_info or not network_info[WifiEnums.SSID_KEY] or \
+ network_info[WifiEnums.SSID_KEY] not in passpoint_network:
+ raise signals.TestFailure(
+ "Device did not connect to passpoint network.")
+
+ def get_configured_passpoint_and_delete(self):
+ """Get configured Passpoint network and delete using its FQDN."""
+ passpoint_config = self.dut.droid.getPasspointConfigs()
+ if not len(passpoint_config):
+ raise signals.TestFailure("Failed to fetch the list of configured"
+ "passpoint networks.")
+ if not wutils.delete_passpoint(self.dut, passpoint_config[0]):
+ raise signals.TestFailure("Failed to delete Passpoint configuration"
+ " with FQDN = %s" % passpoint_config[0])
+
+ def language_change(self, lang):
+ """Run UI automator for boingo passpoint.
+
+ Args:
+ lang: For testing language.
+
+ """
+ langs = {
+ 'CHT':"zh-TW",
+ 'FRA':"fr-FR",
+ 'US': "en-US",
+ 'ARA': "ar-SA",
+ 'SPA': "es-ES"
+ }
+ self.dut.ed.clear_all_events()
+ self.dut.adb.shell('settings put system system_locales %s ' % langs[lang])
+ self.dut.reboot()
+ time.sleep(DEFAULT_TIMEOUT)
+
+ def ui_automator_boingo(self, lang):
+ """Changing device language.
+
+ Args:
+ lang: For testing language.
+
+ """
+ # Verify the boingo login page shows
+ langtext = self.BOINGO_UI_TEXT[lang]
+ asserts.assert_true(
+ uutils.has_element(self.dut, text=langtext),
+ "Failed to launch boingohotspot login page")
+ # Go to the bottom of the page
+ for _ in range(3):
+ self.dut.adb.shell("input swipe 300 900 300 300")
+ time.sleep(5)
+ screen_dump = uutils.get_screen_dump_xml(self.dut)
+ nodes = screen_dump.getElementsByTagName("node")
+ index = 0
+ for node in nodes:
+ if uutils.match_node(node, class_name="android.widget.EditText"):
+ x, y = eval(node.attributes["bounds"].value.split("][")[0][1:])
+ self.dut.adb.shell("input tap %s %s" % (x, y))
+ time.sleep(2)
+ if index == 0:
+ #stop the ime launch
+ self.dut.adb.shell("am force-stop com.google.android.inputmethod.latin")
+ self.dut.adb.shell("input text %s" % self.boingo_username)
+ index += 1
+ else:
+ self.dut.adb.shell("input text %s" % self.boingo_password)
+ break
+ self.dut.adb.shell("input keyevent 111")
+ self.dut.adb.shell("input keyevent 111") # collapse keyboard
+ self.dut.adb.shell("input swipe 300 900 300 750") # swipe up to show text
+
+ # Login
+ uutils.wait_and_click(self.dut, text=PASSPOINT_BUTTON)
+ time.sleep(DEFAULT_TIMEOUT)
+
+ def start_subscription_provisioning_language(self, lang):
+ """Start subscription provisioning with a default provider.
+
+ Args:
+ lang: For testing language.
+
+ """
+ self.language_change(lang)
+ self.unpack_userparams(('osu_configs',))
+ asserts.assert_true(
+ len(self.osu_configs) > 0,
+ "Need at least one osu config.")
+ osu_config = self.osu_configs[OSU_BOINGO]
+ # Clear all previous events.
+ self.dut.ed.clear_all_events()
+ self.dut.droid.startSubscriptionProvisioning(osu_config)
+ start_time = time.time()
+ while time.time() < start_time + OSU_TEST_TIMEOUT:
+ dut_event = self.dut.ed.pop_event("onProvisioningCallback",
+ DEFAULT_TIMEOUT * 18)
+ if dut_event['data']['tag'] == 'success':
+ self.log.info("Passpoint Provisioning Success")
+ break
+ if dut_event['data']['tag'] == 'failure':
+ raise signals.TestFailure(
+ "Passpoint Provisioning is failed with %s" %
+ dut_event['data'][
+ 'reason'])
+ break
+ if dut_event['data']['tag'] == 'status':
+ self.log.info(
+ "Passpoint Provisioning status %s" % dut_event['data'][
+ 'status'])
+ if int(dut_event['data']['status']) == 7:
+ time.sleep(DEFAULT_TIMEOUT)
+ self.ui_automator_boingo(lang)
+
+ # Clear all previous events.
+ self.dut.ed.clear_all_events()
+ # Verify device connects to the Passpoint network.
+ time.sleep(DEFAULT_TIMEOUT)
+ current_passpoint = self.dut.droid.wifiGetConnectionInfo()
+ if current_passpoint[WifiEnums.SSID_KEY] not in osu_config[
+ "expected_ssids"]:
+ raise signals.TestFailure("Device did not connect to the %s"
+ " passpoint network" % osu_config[
+ "expected_ssids"])
+ self.get_configured_passpoint_and_delete()
+ wutils.wait_for_disconnect(self.dut, timeout=15)
+
+ """Tests"""
+
+ @test_tracker_info(uuid="78a939e2-bddc-4bee-8e9d-75f4d953f9eb")
+ def test_passpoint_release_2_connectivity_language_ara(self):
+ """Changing the device's language to ARA(Arabic)
+ to connected passpoint
+
+ """
+
+ self.start_subscription_provisioning_language('ARA')
+
+ @test_tracker_info(uuid="e04ac983-1fe6-436b-a2e1-339c1d73cb95")
+ def test_passpoint_release_2_connectivity_language_cht(self):
+ """Changing the device's language to CHT(Chinese (Traditional))
+ to connected passpoint
+
+ """
+
+ self.start_subscription_provisioning_language('CHT')
+
+ @test_tracker_info(uuid="215452c8-f425-48ac-a057-6f67c2e84d9e")
+ def test_passpoint_release_2_connectivity_language_fra(self):
+ """Changing the device's language to FRA(French)
+ to connected passpoint
+
+ """
+
+ self.start_subscription_provisioning_language('FRA')
+
+ @test_tracker_info(uuid="b602c998-2d42-44bc-af4a-f4ee42febe65")
+ def test_passpoint_release_2_connectivity_language_spa(self):
+ """Changing the device's language to SPA(Spanish)
+ to connected passpoint
+
+ """
+
+ self.start_subscription_provisioning_language('SPA')