Move utils to staticlib

This is a no-op refactoring.

Test: m connectivity_multi_devices_snippet && \
      atest CtsConnectivityMultiDevicesTestCases
Bug: 335368434
Change-Id: I415cc22f49c437be6fe8e8ae8822af22ebefe8d1
diff --git a/tests/cts/multidevices/Android.bp b/tests/cts/multidevices/Android.bp
index 1d30d68..dc90adb 100644
--- a/tests/cts/multidevices/Android.bp
+++ b/tests/cts/multidevices/Android.bp
@@ -22,10 +22,10 @@
     main: "connectivity_multi_devices_test.py",
     srcs: [
         "connectivity_multi_devices_test.py",
-        "utils/*.py",
     ],
     libs: [
         "mobly",
+        "net-tests-utils-host-python-common",
     ],
     test_suites: [
         "cts",
diff --git a/tests/cts/multidevices/connectivity_multi_devices_test.py b/tests/cts/multidevices/connectivity_multi_devices_test.py
index abd6fe2..840831b 100644
--- a/tests/cts/multidevices/connectivity_multi_devices_test.py
+++ b/tests/cts/multidevices/connectivity_multi_devices_test.py
@@ -5,9 +5,8 @@
 from mobly import test_runner
 from mobly import utils
 from mobly.controllers import android_device
-from utils import mdns_utils
-from utils import tether_utils
-from utils.tether_utils import UpstreamType
+from net_tests_utils.host.python import mdns_utils, tether_utils
+from net_tests_utils.host.python.tether_utils import UpstreamType
 
 CONNECTIVITY_MULTI_DEVICES_SNIPPET_PACKAGE = "com.google.snippet.connectivity"
 
diff --git a/tests/cts/multidevices/utils/mdns_utils.py b/tests/cts/multidevices/utils/mdns_utils.py
deleted file mode 100644
index ec1fea0..0000000
--- a/tests/cts/multidevices/utils/mdns_utils.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#  Copyright (C) 2024 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.
-
-from mobly.controllers import android_device
-
-
-def register_mdns_service_and_discover_resolve(
-    advertising_device: android_device, discovery_device: android_device
-) -> None:
-  """Test mdns advertising, discovery and resolution
-
-  One device registers an mDNS service, and another device discovers and
-  resolves that service.
-  """
-  advertising = advertising_device.connectivity_multi_devices_snippet
-  discovery = discovery_device.connectivity_multi_devices_snippet
-
-  # Register a mDns service
-  advertising.registerMDnsService()
-
-  # Ensure the discovery and resolution of the mDNS service
-  discovery.ensureMDnsServiceDiscoveryAndResolution()
-
-
-def cleanup_mdns_service(
-    advertising_device: android_device, discovery_device: android_device
-) -> None:
-  # Unregister the mDns service
-  advertising_device.connectivity_multi_devices_snippet.unregisterMDnsService()
-  # Stop discovery
-  discovery_device.connectivity_multi_devices_snippet.stopMDnsServiceDiscovery()
diff --git a/tests/cts/multidevices/utils/tether_utils.py b/tests/cts/multidevices/utils/tether_utils.py
deleted file mode 100644
index 702b596..0000000
--- a/tests/cts/multidevices/utils/tether_utils.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#  Copyright (C) 2024 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 base64
-import uuid
-
-from mobly import asserts
-from mobly.controllers import android_device
-
-
-class UpstreamType:
-  NONE = 0
-  CELLULAR = 1
-  WIFI = 2
-
-
-def generate_uuid32_base64() -> str:
-  """Generates a UUID32 and encodes it in Base64.
-
-  Returns:
-      str: The Base64-encoded UUID32 string. Which is 22 characters.
-  """
-  # Strip padding characters to make it safer for hotspot name length limit.
-  return base64.b64encode(uuid.uuid1().bytes).decode("utf-8").strip("=")
-
-
-def assume_hotspot_test_preconditions(
-    server_device: android_device,
-    client_device: android_device,
-    upstream_type: UpstreamType,
-) -> None:
-  server = server_device.connectivity_multi_devices_snippet
-  client = client_device.connectivity_multi_devices_snippet
-
-  # Assert pre-conditions specific to each upstream type.
-  asserts.skip_if(not client.hasWifiFeature(), "Client requires Wifi feature")
-  asserts.skip_if(
-      not server.hasHotspotFeature(), "Server requires hotspot feature"
-  )
-  if upstream_type == UpstreamType.CELLULAR:
-    asserts.skip_if(
-        not server.hasTelephonyFeature(), "Server requires Telephony feature"
-    )
-  elif upstream_type == UpstreamType.WIFI:
-    asserts.skip_if(
-        not server.isStaApConcurrencySupported(),
-        "Server requires Wifi AP + STA concurrency",
-    )
-  elif upstream_type == UpstreamType.NONE:
-    pass
-  else:
-    raise ValueError(f"Invalid upstream type: {upstream_type}")
-
-
-def setup_hotspot_and_client_for_upstream_type(
-    server_device: android_device,
-    client_device: android_device,
-    upstream_type: UpstreamType,
-) -> (str, int):
-  """Setup the hotspot with a connected client with the specified upstream type.
-
-  This creates a hotspot, make the client connect
-  to it, and verify the packet is forwarded by the hotspot.
-  And returns interface name of both if successful.
-  """
-  server = server_device.connectivity_multi_devices_snippet
-  client = client_device.connectivity_multi_devices_snippet
-
-  if upstream_type == UpstreamType.CELLULAR:
-    server.requestCellularAndEnsureDefault()
-  elif upstream_type == UpstreamType.WIFI:
-    server.ensureWifiIsDefault()
-  elif upstream_type == UpstreamType.NONE:
-    pass
-  else:
-    raise ValueError(f"Invalid upstream type: {upstream_type}")
-
-  # Generate ssid/passphrase with random characters to make sure nearby devices won't
-  # connect unexpectedly. Note that total length of ssid cannot go over 32.
-  test_ssid = "HOTSPOT-" + generate_uuid32_base64()
-  test_passphrase = generate_uuid32_base64()
-
-  # Create a hotspot with fixed SSID and password.
-  hotspot_interface = server.startHotspot(test_ssid, test_passphrase)
-
-  # Make the client connects to the hotspot.
-  client_network = client.connectToWifi(test_ssid, test_passphrase)
-
-  return hotspot_interface, client_network
-
-
-def cleanup_tethering_for_upstream_type(
-    server_device: android_device, upstream_type: UpstreamType
-) -> None:
-  server = server_device.connectivity_multi_devices_snippet
-  if upstream_type == UpstreamType.CELLULAR:
-    server.unregisterAll()
-  # Teardown the hotspot.
-  server.stopAllTethering()