From 82f84a95a03e2d423aa572017c8072ff6260a33d Mon Sep 17 00:00:00 2001 From: Marvin Ramin Date: Tue, 15 Sep 2020 15:09:09 +0200 Subject: [PATCH] Fix and improve ArcTerminationActionFromAvrTest Update tests to be more realistic and un-ignore an ignored test. Bug: 120845532 Test: atest ArcTerminationActionFromAvrTest Change-Id: I1db699dbab7f3713954c8f3d05032f3127a758a5 --- .../hdmi/ArcTerminationActionFromAvrTest.java | 160 +++++++++++------- 1 file changed, 95 insertions(+), 65 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java index dc326eefbc9ba..f986a70804f6a 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java @@ -15,13 +15,22 @@ */ package com.android.server.hdmi; +import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC; + import static com.google.common.truth.Truth.assertThat; -import android.annotation.Nullable; -import android.app.Instrumentation; -import android.hardware.hdmi.HdmiDeviceInfo; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.content.ContextWrapper; import android.hardware.tv.cec.V1_0.SendMessageResult; +import android.media.AudioManager; +import android.os.Handler; +import android.os.IPowerManager; +import android.os.IThermalService; import android.os.Looper; +import android.os.PowerManager; import android.os.test.TestLooper; import android.platform.test.annotations.Presubmit; @@ -29,10 +38,13 @@ import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.ArrayList; /** Tests for {@link ArcTerminationActionFromAvr} */ @SmallTest @@ -40,45 +52,47 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class ArcTerminationActionFromAvrTest { - private HdmiDeviceInfo mDeviceInfoForTests; + private Context mContextSpy; private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem; private ArcTerminationActionFromAvr mAction; + private HdmiCecController mHdmiCecController; + private HdmiControlService mHdmiControlService; + private FakeNativeWrapper mNativeWrapper; + private TestLooper mTestLooper = new TestLooper(); - private boolean mSendCecCommandSuccess; - private boolean mShouldDispatchReportArcTerminated; - private Instrumentation mInstrumentation; - @Nullable private Boolean mArcEnabled = null; + private ArrayList mLocalDevices = new ArrayList<>(); + + @Mock private IPowerManager mIPowerManagerMock; + @Mock private IThermalService mIThermalServiceMock; + @Mock private AudioManager mAudioManager; @Before - public void setUp() { - mDeviceInfoForTests = new HdmiDeviceInfo(1000, 1); + public void setUp() throws Exception { + MockitoAnnotations.initMocks(this); - mInstrumentation = InstrumentationRegistry.getInstrumentation(); + mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); - HdmiControlService hdmiControlService = - new HdmiControlService(mInstrumentation.getTargetContext()) { + PowerManager powerManager = new PowerManager(mContextSpy, mIPowerManagerMock, + mIThermalServiceMock, new Handler(mTestLooper.getLooper())); + when(mContextSpy.getSystemService(Context.POWER_SERVICE)).thenReturn(powerManager); + when(mContextSpy.getSystemService(PowerManager.class)).thenReturn(powerManager); + when(mIPowerManagerMock.isInteractive()).thenReturn(true); + + mHdmiControlService = + new HdmiControlService(mContextSpy) { @Override - void sendCecCommand( - HdmiCecMessage command, @Nullable SendMessageCallback callback) { - switch (command.getOpcode()) { - case Constants.MESSAGE_TERMINATE_ARC: - if (callback != null) { - callback.onSendCompleted( - mSendCecCommandSuccess - ? SendMessageResult.SUCCESS - : SendMessageResult.NACK); - } - if (mShouldDispatchReportArcTerminated) { - mHdmiCecLocalDeviceAudioSystem.dispatchMessage( - HdmiCecMessageBuilder.buildReportArcTerminated( - Constants.ADDR_TV, - mHdmiCecLocalDeviceAudioSystem.mAddress)); - } - break; - default: - throw new IllegalArgumentException("Unexpected message"); - } + void wakeUp() { + } + + @Override + PowerManager getPowerManager() { + return powerManager; + } + + @Override + AudioManager getAudioManager() { + return mAudioManager; } @Override @@ -97,55 +111,71 @@ public class ArcTerminationActionFromAvrTest { } }; - mHdmiCecLocalDeviceAudioSystem = - new HdmiCecLocalDeviceAudioSystem(hdmiControlService) { - @Override - HdmiDeviceInfo getDeviceInfo() { - return mDeviceInfoForTests; - } - - @Override - void setArcStatus(boolean enabled) { - mArcEnabled = enabled; - } - }; - mHdmiCecLocalDeviceAudioSystem.init(); Looper looper = mTestLooper.getLooper(); - hdmiControlService.setIoLooper(looper); + mHdmiControlService.setIoLooper(looper); + mNativeWrapper = new FakeNativeWrapper(); + mHdmiCecController = + HdmiCecController.createWithNativeWrapper(this.mHdmiControlService, mNativeWrapper); + mHdmiControlService.setCecController(mHdmiCecController); + mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService)); + mHdmiControlService.setMessageValidator(new HdmiCecMessageValidator(mHdmiControlService)); + mHdmiControlService.initPortInfo(); + mHdmiCecLocalDeviceAudioSystem = new HdmiCecLocalDeviceAudioSystem(mHdmiControlService) { + @Override + protected void setPreferredAddress(int addr) { + } + }; + mHdmiCecLocalDeviceAudioSystem.init(); mAction = new ArcTerminationActionFromAvr(mHdmiCecLocalDeviceAudioSystem); + + mLocalDevices.add(mHdmiCecLocalDeviceAudioSystem); + mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC); + mHdmiCecLocalDeviceAudioSystem.setArcStatus(true); + mTestLooper.dispatchAll(); } @Test - @Ignore("b/120845532") - public void testSendMessage_notSuccess() { - mSendCecCommandSuccess = false; - mShouldDispatchReportArcTerminated = false; + public void testSendMessage_sendFailed() { + mNativeWrapper.setMessageSendResult(Constants.MESSAGE_TERMINATE_ARC, + SendMessageResult.NACK); mHdmiCecLocalDeviceAudioSystem.addAndStartAction(mAction); - mTestLooper.dispatchAll(); - assertThat(mArcEnabled).isNull(); + HdmiCecMessage terminateArc = HdmiCecMessageBuilder.buildTerminateArc( + Constants.ADDR_AUDIO_SYSTEM, Constants.ADDR_TV); + + assertThat(mNativeWrapper.getResultMessages()).contains(terminateArc); + + assertThat(mHdmiCecLocalDeviceAudioSystem.isArcEnabled()).isFalse(); } @Test - public void testReportArcTerminated_notReceived() { - mSendCecCommandSuccess = true; - mShouldDispatchReportArcTerminated = false; + public void testReportArcTerminated_timeout() { mHdmiCecLocalDeviceAudioSystem.addAndStartAction(mAction); - - mTestLooper.moveTimeForward(1000); mTestLooper.dispatchAll(); - assertThat(mArcEnabled).isNull(); + HdmiCecMessage terminateArc = HdmiCecMessageBuilder.buildTerminateArc( + Constants.ADDR_AUDIO_SYSTEM, Constants.ADDR_TV); + + assertThat(mNativeWrapper.getResultMessages()).contains(terminateArc); + + assertThat(mHdmiCecLocalDeviceAudioSystem.isArcEnabled()).isTrue(); } @Test public void testReportArcTerminated_received() { - mSendCecCommandSuccess = true; - mShouldDispatchReportArcTerminated = true; mHdmiCecLocalDeviceAudioSystem.addAndStartAction(mAction); - - mTestLooper.moveTimeForward(1000); mTestLooper.dispatchAll(); - assertThat(mArcEnabled).isFalse(); + HdmiCecMessage terminateArc = HdmiCecMessageBuilder.buildTerminateArc( + Constants.ADDR_AUDIO_SYSTEM, Constants.ADDR_TV); + + assertThat(mNativeWrapper.getResultMessages()).contains(terminateArc); + + HdmiCecMessage arcTerminatedResponse = HdmiCecMessageBuilder.buildReportArcTerminated( + Constants.ADDR_TV, Constants.ADDR_AUDIO_SYSTEM); + + mHdmiControlService.handleCecCommand(arcTerminatedResponse); + mTestLooper.dispatchAll(); + + assertThat(mHdmiCecLocalDeviceAudioSystem.isArcEnabled()).isFalse(); } }