Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6eb36606 authored by Paul Colta's avatar Paul Colta
Browse files

HDMICEC: Initialize HdmiControlService with local devices in unit tests

Initialize HdmiControlService with local devices in unit tests and
remove uncessary allocateLogicalAddress calls.

The device types list is set in HdmiControlService's constructor. With the help of this list, corresponding local devices are allocated whenever initializeCec is called (f.e. HdmiControlService#initService)  such that extra calls of allocateLogicalAddress can be avoided.

Bug: 183081487
Test: atest com.android.server.hdmi
Change-Id: I750a6d937cab552b6ed6f98dfa2201fa86ba5aa4
parent 9d569c3d
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.server.hdmi;
import static com.android.server.SystemService.PHASE_SYSTEM_SERVICES_READY;
import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;

import static com.google.common.truth.Truth.assertThat;

@@ -47,7 +46,6 @@ import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
import java.util.Collections;

/** Tests for {@link DevicePowerStatusAction} */
@@ -65,7 +63,6 @@ public class DevicePowerStatusActionTest {
    private FakePowerManagerWrapper mPowerManager;

    private TestLooper mTestLooper = new TestLooper();
    private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
    private int mPhysicalAddress;

    private DevicePowerStatusAction mDevicePowerStatusAction;
@@ -79,7 +76,8 @@ public class DevicePowerStatusActionTest {

        mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));

        mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList(),
        mHdmiControlService = new HdmiControlService(mContextSpy,
                Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
                new FakeAudioDeviceVolumeManagerWrapper()) {
            @Override
            AudioManager getAudioManager() {
@@ -117,11 +115,8 @@ public class DevicePowerStatusActionTest {
        mHdmiControlService.setPowerManager(mPowerManager);
        mPhysicalAddress = 0x2000;
        mNativeWrapper.setPhysicalAddress(mPhysicalAddress);
        mPlaybackDevice = new HdmiCecLocalDevicePlayback(
                mHdmiControlService);
        mPlaybackDevice.init();
        mLocalDevices.add(mPlaybackDevice);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mTestLooper.dispatchAll();
        mPlaybackDevice = mHdmiControlService.playback();
        mDevicePowerStatusAction = DevicePowerStatusAction.create(mPlaybackDevice, ADDR_TV,
                mCallbackMock);
        mTestLooper.dispatchAll();
@@ -213,7 +208,6 @@ public class DevicePowerStatusActionTest {
        mHdmiControlService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
                HdmiControlManager.HDMI_CEC_VERSION_2_0);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction);
        mTestLooper.dispatchAll();

@@ -238,7 +232,6 @@ public class DevicePowerStatusActionTest {
        mHdmiControlService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
                HdmiControlManager.HDMI_CEC_VERSION_2_0);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        HdmiCecMessage reportPhysicalAddress = HdmiCecMessageBuilder
                .buildReportPhysicalAddressCommand(ADDR_TV, 0x0000, HdmiDeviceInfo.DEVICE_TV);
        mNativeWrapper.onCecMessage(reportPhysicalAddress);
@@ -263,7 +256,6 @@ public class DevicePowerStatusActionTest {
        mHdmiControlService.getHdmiCecConfig().setIntValue(
                HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_VERSION,
                HdmiControlManager.HDMI_CEC_VERSION_2_0);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        HdmiCecMessage reportPhysicalAddress = HdmiCecMessageBuilder
                .buildReportPhysicalAddressCommand(ADDR_TV, 0x0000, HdmiDeviceInfo.DEVICE_TV);
        mNativeWrapper.onCecMessage(reportPhysicalAddress);
@@ -293,6 +285,12 @@ public class DevicePowerStatusActionTest {

    @Test
    public void pendingActionDoesNotBlockSendingStandby() throws Exception {
        HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(
                mPlaybackDevice.getDeviceInfo().getLogicalAddress(),
                mPhysicalAddress);
        assertThat(mPlaybackDevice.handleActiveSource(message))
                .isEqualTo(Constants.HANDLED);

        mPlaybackDevice.addAndStartAction(mDevicePowerStatusAction);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();
+3 −8
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_3;
import static com.android.server.hdmi.DeviceSelectActionFromPlayback.STATE_WAIT_FOR_ACTIVE_SOURCE_MESSAGE_AFTER_ROUTING_CHANGE;
import static com.android.server.hdmi.DeviceSelectActionFromPlayback.STATE_WAIT_FOR_DEVICE_POWER_ON;
import static com.android.server.hdmi.DeviceSelectActionFromPlayback.STATE_WAIT_FOR_REPORT_POWER_STATUS;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;

import static com.google.common.truth.Truth.assertThat;

@@ -86,7 +85,6 @@ public class DeviceSelectActionFromPlaybackTest {
    private FakePowerManagerWrapper mPowerManager;
    private Looper mMyLooper;
    private TestLooper mTestLooper = new TestLooper();
    private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();

    private int mPlaybackLogicalAddress1;
    private int mPlaybackLogicalAddress2;
@@ -101,7 +99,8 @@ public class DeviceSelectActionFromPlaybackTest {

        mHdmiControlService =
                new HdmiControlService(InstrumentationRegistry.getTargetContext(),
                        Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) {
                        Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
                        new FakeAudioDeviceVolumeManagerWrapper()) {
                    @Override
                    boolean isControlEnabled() {
                        return true;
@@ -119,8 +118,6 @@ public class DeviceSelectActionFromPlaybackTest {
                };


        mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlService);
        mHdmiCecLocalDevicePlayback.init();
        mHdmiControlService.setIoLooper(mMyLooper);
        mHdmiControlService.setHdmiCecConfig(new FakeHdmiCecConfig(context));
        mNativeWrapper = new FakeNativeWrapper();
@@ -135,16 +132,14 @@ public class DeviceSelectActionFromPlaybackTest {
                mHdmiCecController, mHdmiMhlControllerStub);
        mHdmiControlService.setHdmiCecNetwork(mHdmiCecNetwork);

        mLocalDevices.add(mHdmiCecLocalDevicePlayback);
        mHdmiControlService.initService();
        mHdmiControlService.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mNativeWrapper.setPhysicalAddress(0x0000);
        mPowerManager = new FakePowerManagerWrapper(context);
        mHdmiControlService.setPowerManager(mPowerManager);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();

        mHdmiCecLocalDevicePlayback = mHdmiControlService.playback();
        // The addresses depend on local device's LA.
        // This help the tests to pass with every local device LA.
        mPlaybackLogicalAddress1 =
+4 −7
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_2;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_DEVICE_POWER_ON;
import static com.android.server.hdmi.DeviceSelectActionFromTv.STATE_WAIT_FOR_REPORT_POWER_STATUS;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;

import static com.google.common.truth.Truth.assertThat;

@@ -101,7 +100,6 @@ public class DeviceSelectActionFromTvTest {
    private FakePowerManagerWrapper mPowerManager;
    private Looper mMyLooper;
    private TestLooper mTestLooper = new TestLooper();
    private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();

    @Before
    public void setUp() {
@@ -110,7 +108,8 @@ public class DeviceSelectActionFromTvTest {

        mHdmiControlService =
                new HdmiControlService(InstrumentationRegistry.getTargetContext(),
                        Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) {
                        Collections.singletonList(HdmiDeviceInfo.DEVICE_TV),
                        new FakeAudioDeviceVolumeManagerWrapper()) {
                    @Override
                    boolean isControlEnabled() {
                        return true;
@@ -127,8 +126,7 @@ public class DeviceSelectActionFromTvTest {
                    }
                };

        mHdmiCecLocalDeviceTv = new HdmiCecLocalDeviceTv(mHdmiControlService);
        mHdmiCecLocalDeviceTv.init();

        mHdmiControlService.setIoLooper(mMyLooper);
        mHdmiControlService.setHdmiCecConfig(new FakeHdmiCecConfig(context));
        mNativeWrapper = new FakeNativeWrapper();
@@ -136,7 +134,6 @@ public class DeviceSelectActionFromTvTest {
                mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
        mHdmiControlService.setCecController(mHdmiCecController);
        mHdmiControlService.setHdmiMhlController(HdmiMhlControllerStub.create(mHdmiControlService));
        mLocalDevices.add(mHdmiCecLocalDeviceTv);
        HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[2];
        hdmiPortInfos[0] =
                new HdmiPortInfo(1, HdmiPortInfo.PORT_INPUT, PHYSICAL_ADDRESS_PLAYBACK_1,
@@ -149,12 +146,12 @@ public class DeviceSelectActionFromTvTest {
        mHdmiControlService.onBootPhase(PHASE_SYSTEM_SERVICES_READY);
        mPowerManager = new FakePowerManagerWrapper(context);
        mHdmiControlService.setPowerManager(mPowerManager);
        mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mNativeWrapper.setPhysicalAddress(0x0000);
        mTestLooper.dispatchAll();
        mNativeWrapper.clearResultMessages();
        mHdmiControlService.getHdmiCecNetwork().addCecDevice(INFO_PLAYBACK_1);
        mHdmiControlService.getHdmiCecNetwork().addCecDevice(INFO_PLAYBACK_2);
        mHdmiCecLocalDeviceTv = mHdmiControlService.tv();
    }

    private static class TestActionTimer implements ActionTimer {
+3 −10
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ import static com.android.server.SystemService.PHASE_BOOT_COMPLETED;
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.android.server.hdmi.Constants.PATH_RELATIONSHIP_ANCESTOR;
import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -35,6 +34,7 @@ import static org.mockito.Mockito.verify;
import android.content.Context;
import android.content.ContextWrapper;
import android.hardware.hdmi.HdmiControlManager;
import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiPortInfo;
import android.hardware.tv.cec.V1_0.SendMessageResult;
import android.os.Binder;
@@ -55,7 +55,6 @@ import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mockito;

import java.util.ArrayList;
import java.util.Collections;

/**
@@ -68,7 +67,6 @@ public class HdmiCecAtomLoggingTest {
    private HdmiCecAtomWriter mHdmiCecAtomWriterSpy;
    private HdmiControlService mHdmiControlServiceSpy;
    private HdmiCecController mHdmiCecController;
    private HdmiCecLocalDevicePlayback mHdmiCecLocalDevicePlayback;
    private HdmiMhlControllerStub mHdmiMhlControllerStub;
    private FakeNativeWrapper mNativeWrapper;
    private FakePowerManagerWrapper mPowerManager;
@@ -77,7 +75,6 @@ public class HdmiCecAtomLoggingTest {
    private Context mContextSpy;
    private TestLooper mTestLooper = new TestLooper();
    private int mPhysicalAddress = 0x1110;
    private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
    private HdmiPortInfo[] mHdmiPortInfo;

    @Before
@@ -89,7 +86,8 @@ public class HdmiCecAtomLoggingTest {
        mContextSpy = spy(new ContextWrapper(
                InstrumentationRegistry.getInstrumentation().getTargetContext()));

        mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy, Collections.emptyList(),
        mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy,
                Collections.singletonList(HdmiDeviceInfo.DEVICE_PLAYBACK),
                new FakeAudioDeviceVolumeManagerWrapper()));
        doNothing().when(mHdmiControlServiceSpy)
                .writeStringSystemProperty(anyString(), anyString());
@@ -123,14 +121,9 @@ public class HdmiCecAtomLoggingTest {
        mNativeWrapper.setPortInfo(hdmiPortInfos);
        mNativeWrapper.setPortConnectionStatus(1, true);

        mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlServiceSpy);
        mHdmiCecLocalDevicePlayback.init();
        mLocalDevices.add(mHdmiCecLocalDevicePlayback);

        mHdmiControlServiceSpy.initService();
        mPowerManager = new FakePowerManagerWrapper(mContextSpy);
        mHdmiControlServiceSpy.setPowerManager(mPowerManager);
        mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
        mHdmiControlServiceSpy.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);

        mTestLooper.dispatchAll();
+5 −2
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

import java.util.ArrayList;
import java.util.Collections;

@SmallTest
@Presubmit
@@ -80,15 +79,19 @@ public class HdmiCecLocalDeviceAudioSystemTest {
    private HdmiDeviceInfo mDeviceInfo;
    private boolean mArcSupport;
    private HdmiPortInfo[] mHdmiPortInfo;
    private ArrayList<Integer> mLocalDeviceTypes = new ArrayList<>();

    @Before
    public void setUp() {
        Context context = InstrumentationRegistry.getTargetContext();
        mMyLooper = mTestLooper.getLooper();
        mLocalDeviceTypes.add(HdmiDeviceInfo.DEVICE_PLAYBACK);
        mLocalDeviceTypes.add(HdmiDeviceInfo.DEVICE_AUDIO_SYSTEM);

        mHdmiControlService =
            new HdmiControlService(InstrumentationRegistry.getTargetContext(),
                    Collections.emptyList(), new FakeAudioDeviceVolumeManagerWrapper()) {
                    mLocalDeviceTypes,
                    new FakeAudioDeviceVolumeManagerWrapper()) {
                @Override
                AudioManager getAudioManager() {
                    return new AudioManager() {
Loading