blob: e74a30c62d8b3408dca5543ada36d659a44c8748 [file] [log] [blame]
#!/usr/bin/env python3
# Lint as: python3
"""
Base class for setting up devices for CDM functionalities.
"""
from mobly import base_test
from mobly import utils
from mobly.controllers import android_device
CDM_SNIPPET_PACKAGE = 'android.companion.multidevices'
class BaseTestClass(base_test.BaseTestClass):
def setup_class(self):
# Declare that two Android devices are needed.
self.sender, self.receiver = self.register_controller(
android_device, min_number=2)
self.sender_id = None
self.receiver_id = None
def _setup_device(device):
device.load_snippet('cdm', CDM_SNIPPET_PACKAGE)
device.adb.shell('input keyevent KEYCODE_WAKEUP')
device.adb.shell('input keyevent KEYCODE_MENU')
device.adb.shell('input keyevent KEYCODE_HOME')
# Clean up existing associations
device.cdm.disassociateAll()
# Sets up devices in parallel to save time.
utils.concurrent_exec(
_setup_device,
((self.sender,), (self.receiver,)),
max_workers=2,
raise_on_exception=True)
def associate_devices(self) -> tuple[int, int]:
"""Associate devices with each other and return association IDs for both"""
# If association already exists, don't need another
if self.sender_id and self.receiver_id:
return (self.sender_id, self.receiver_id)
receiver_name = self.receiver.cdm.becomeDiscoverable()
self.receiver_id = self.sender.cdm.associate(receiver_name)
sender_name = self.sender.cdm.becomeDiscoverable()
self.sender_id = self.receiver.cdm.associate(sender_name)
return (self.sender_id, self.receiver_id)
def attach_transports(self):
"""Attach transports to both devices"""
self.associate_devices()
self.receiver.cdm.attachServerSocket(self.sender_id)
self.sender.cdm.attachClientSocket(self.receiver_id)
def teardown_class(self):
"""Clean up the opened sockets"""
self.sender.cdm.closeAllSockets()
self.receiver.cdm.closeAllSockets()