From d0715eec76f1fc9e33faece98388865ba09d2735 Mon Sep 17 00:00:00 2001 From: Winni Chang Date: Tue, 6 Feb 2024 14:12:30 +0800 Subject: Unit test for onHotplug when 5V status is true Unit test for ag/25753464 to check if onHotplug function sending [Source's Physical Address] or not. What we expect is not to power on the audio system. Bug: 307811135 Test: atest com.android.server.hdmi.HdmiCecLocalDeviceTvTest#onHotplug_doNotSend_systemAudioModeRequestWithParameter Change-Id: Idf482b5a7e4560d174fec10a43f454d61fcda694 --- .../server/hdmi/HdmiCecLocalDeviceTvTest.java | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java index 67ae9984266f..c90054b579ed 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java @@ -936,6 +936,94 @@ public class HdmiCecLocalDeviceTvTest { assertThat(removedDeviceInfo.getDeviceType()).isEqualTo(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM); } + @Test + public void onHotplug_doNotSend_systemAudioModeRequestWithParameter(){ + // Add a device to the network and assert that this device is included in the list of + // devices. + HdmiDeviceInfo infoAudioSystem = HdmiDeviceInfo.cecDeviceBuilder() + .setLogicalAddress(ADDR_AUDIO_SYSTEM) + .setPhysicalAddress(0x2000) + .setPortId(2) + .setDeviceType(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM) + .setVendorId(0x1000) + .setDisplayName("Audio System") + .build(); + mHdmiControlService.getHdmiCecNetwork().addCecDevice(infoAudioSystem); + mTestLooper.dispatchAll(); + assertThat(mHdmiControlService.getHdmiCecNetwork().getDeviceInfoList(false)) + .hasSize(1); + mDeviceEventListeners.clear(); + assertThat(mDeviceEventListeners.size()).isEqualTo(0); + + // Connect port 2 (ARC port) + mNativeWrapper.setPortConnectionStatus(2, true); + + // AVR connection + HdmiCecMessage initiateArc = HdmiCecMessageBuilder.buildInitiateArc( + ADDR_AUDIO_SYSTEM, + ADDR_TV); + + mNativeWrapper.onCecMessage(initiateArc); + mTestLooper.dispatchAll(); + + HdmiCecMessage reportArcInitiated = HdmiCecMessageBuilder.buildReportArcInitiated( + ADDR_TV, + ADDR_AUDIO_SYSTEM); + // should only be sent after SAD querying is done + assertThat(mNativeWrapper.getResultMessages()).doesNotContain(reportArcInitiated); + // Finish querying SADs + assertThat(mNativeWrapper.getResultMessages()).contains(SAD_QUERY); + mNativeWrapper.clearResultMessages(); + mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS); + mTestLooper.dispatchAll(); + assertThat(mNativeWrapper.getResultMessages()).contains(SAD_QUERY); + mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS); + mTestLooper.dispatchAll(); + + assertThat(mNativeWrapper.getResultMessages()).contains(reportArcInitiated); + mNativeWrapper.clearResultMessages(); + + // Audio System still acking polls. Allowing detection by HotplugDetectionAction + mNativeWrapper.setPollAddressResponse(ADDR_AUDIO_SYSTEM, SendMessageResult.SUCCESS); + mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS); + mTestLooper.dispatchAll(); + + // Hotplug event + mHdmiCecLocalDeviceTv.onHotplug(2, true); + + // Audio System replies to with [On] + HdmiCecMessage reportSystemAudioModeOn = + HdmiCecMessageBuilder.buildReportSystemAudioMode( + ADDR_AUDIO_SYSTEM, + mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), + true); + mHdmiControlService.handleCecCommand(reportSystemAudioModeOn); + mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS); + mTestLooper.dispatchAll(); + + // Hotplug event when turn off the audio system + mHdmiCecLocalDeviceTv.onHotplug(2, false); + mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS); + mTestLooper.dispatchAll(); + + // Some audio systems (eg. Sony) might trigger 5V status from false to true when the + // devices are off + mHdmiCecLocalDeviceTv.onHotplug(2, true); + + // Audio System replies to with + HdmiCecMessage reportSystemAudioMode = + HdmiCecMessageBuilder.buildReportSystemAudioMode( + ADDR_AUDIO_SYSTEM, + mHdmiCecLocalDeviceTv.getDeviceInfo().getLogicalAddress(), + true); + mHdmiControlService.handleCecCommand(reportSystemAudioMode); + mTestLooper.dispatchAll(); + + HdmiCecMessage systemAudioModeRequest = HdmiCecMessageBuilder.buildSystemAudioModeRequest( + mTvLogicalAddress, ADDR_AUDIO_SYSTEM, mTvPhysicalAddress, true); + assertThat(mNativeWrapper.getResultMessages()).doesNotContain(systemAudioModeRequest); + } + @Test public void listenerInvokedIfPhysicalAddressReported() { mHdmiControlService.getHdmiCecNetwork().clearDeviceList(); -- cgit v1.2.3-59-g8ed1b