summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-12-03 11:32:03 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-12-03 11:32:03 +0000
commit30fe8f03d9c25f8d3f130b7afe7695bcf1e067aa (patch)
tree0d9da0282a340d74454321e608e0bad4bdf3575f
parent895fc96bc7327ec0e76e13a3b5d9754543d6e4bb (diff)
parentf6b854e2cffdfaa09b8e4470c9e2eee5f3541bbf (diff)
Merge "Add tests for HDMI-CEC statsd atom logging"
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java7
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecController.java2
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiCecNetwork.java3
-rw-r--r--services/core/java/com/android/server/hdmi/HdmiControlService.java11
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java174
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java6
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java2
14 files changed, 210 insertions, 27 deletions
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java b/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java
index 2878a94fb860..a9eb75da77cb 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecAtomWriter.java
@@ -18,9 +18,14 @@ package com.android.server.hdmi;
import android.stats.hdmi.HdmiStatsEnums;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FrameworkStatsLog;
-class HdmiCecAtomWriter {
+/**
+ * Provides methods for writing HDMI-CEC statsd atoms.
+ */
+@VisibleForTesting
+public class HdmiCecAtomWriter {
private static final int FEATURE_ABORT_OPCODE_UNKNOWN = 0x100;
private static final int ERROR_CODE_UNKNOWN = -1;
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java
index 19dc017a35d5..bbd5ac3b5ccc 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecController.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java
@@ -635,7 +635,7 @@ final class HdmiCecController {
*/
private int incomingMessageDirection(int srcAddress, int dstAddress) {
boolean sourceIsLocal = false;
- boolean destinationIsLocal = false;
+ boolean destinationIsLocal = dstAddress == Constants.ADDR_BROADCAST;
for (HdmiCecLocalDevice localDevice : mService.getHdmiCecNetwork().getLocalDeviceList()) {
int logicalAddress = localDevice.getDeviceInfo().getLogicalAddress();
if (logicalAddress == srcAddress) {
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java b/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java
index 5d75a63d0c8d..fc21724714c5 100644
--- a/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java
+++ b/services/core/java/com/android/server/hdmi/HdmiCecNetwork.java
@@ -59,7 +59,8 @@ import java.util.concurrent.ArrayBlockingQueue;
* Note that the information cached in this class is not guaranteed to be up-to-date, especially OSD
* names, power states can be outdated.
*/
-class HdmiCecNetwork {
+@VisibleForTesting
+public class HdmiCecNetwork {
private static final String TAG = "HdmiCecNetwork";
protected final Object mLock;
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
index 56b73ba04d89..a1d13e974019 100644
--- a/services/core/java/com/android/server/hdmi/HdmiControlService.java
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -564,7 +564,8 @@ public class HdmiControlService extends SystemService {
mTvInputManager.unregisterCallback(callback);
}
- PowerManager getPowerManager() {
+ @VisibleForTesting
+ protected PowerManager getPowerManager() {
return mPowerManager;
}
@@ -729,7 +730,8 @@ public class HdmiControlService extends SystemService {
Global.putInt(cr, key, toInt(value));
}
- void writeStringSystemProperty(String key, String value) {
+ @VisibleForTesting
+ protected void writeStringSystemProperty(String key, String value) {
SystemProperties.set(key, value);
}
@@ -3366,7 +3368,7 @@ public class HdmiControlService extends SystemService {
}
@VisibleForTesting
- HdmiCecAtomWriter getAtomWriter() {
+ protected HdmiCecAtomWriter getAtomWriter() {
return mAtomWriter;
}
@@ -3395,7 +3397,8 @@ public class HdmiControlService extends SystemService {
HdmiControlService.PERMISSION);
}
- HdmiCecConfig getHdmiCecConfig() {
+ @VisibleForTesting
+ protected HdmiCecConfig getHdmiCecConfig() {
return mHdmiCecConfig;
}
}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
index 6debc893ea1b..f2254a98a70e 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ActiveSourceActionTest.java
@@ -98,17 +98,17 @@ public class ActiveSourceActionTest {
}
@Override
- PowerManager getPowerManager() {
+ protected PowerManager getPowerManager() {
return powerManager;
}
@Override
- void writeStringSystemProperty(String key, String value) {
+ protected void writeStringSystemProperty(String key, String value) {
// do nothing
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java
index a19336eeb5ea..6e4d994bd416 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcInitiationActionFromAvrTest.java
@@ -90,7 +90,7 @@ public class ArcInitiationActionFromAvrTest {
}
@Override
- PowerManager getPowerManager() {
+ protected PowerManager getPowerManager() {
return powerManager;
}
@@ -110,7 +110,7 @@ public class ArcInitiationActionFromAvrTest {
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
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 cd6977524943..bbe1156c5d61 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/ArcTerminationActionFromAvrTest.java
@@ -86,7 +86,7 @@ public class ArcTerminationActionFromAvrTest {
}
@Override
- PowerManager getPowerManager() {
+ protected PowerManager getPowerManager() {
return powerManager;
}
@@ -111,7 +111,7 @@ public class ArcTerminationActionFromAvrTest {
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
new file mode 100644
index 000000000000..af119c8c4267
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecAtomLoggingTest.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+package com.android.server.hdmi;
+
+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.anyString;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.hardware.hdmi.HdmiPortInfo;
+import android.hardware.tv.cec.V1_0.SendMessageResult;
+import android.os.Handler;
+import android.os.IPowerManager;
+import android.os.IThermalService;
+import android.os.Looper;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.test.TestLooper;
+import android.platform.test.annotations.Presubmit;
+import android.stats.hdmi.nano.HdmiStatsEnums;
+
+import androidx.test.InstrumentationRegistry;
+import androidx.test.filters.SmallTest;
+
+import com.android.server.SystemService;
+
+import org.junit.Before;
+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 the {@link HdmiCecAtomWriter} class and its usage by the HDMI-CEC framework.
+ */
+@SmallTest
+@Presubmit
+@RunWith(JUnit4.class)
+public class HdmiCecAtomLoggingTest {
+ private HdmiCecAtomWriter mHdmiCecAtomWriterSpy;
+ private HdmiControlService mHdmiControlServiceSpy;
+ private HdmiCecController mHdmiCecController;
+ private HdmiCecLocalDevicePlayback mHdmiCecLocalDevicePlayback;
+ private HdmiMhlControllerStub mHdmiMhlControllerStub;
+ private FakeNativeWrapper mNativeWrapper;
+ private HdmiCecNetwork mHdmiCecNetwork;
+ private Looper mLooper;
+ private TestLooper mTestLooper = new TestLooper();
+ private int mPhysicalAddress = 0x1110;
+ private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
+ private HdmiPortInfo[] mHdmiPortInfo;
+
+ @Mock private IPowerManager mIPowerManagerMock;
+ @Mock private IThermalService mIThermalServiceMock;
+
+ @Before
+ public void setUp() throws RemoteException {
+ MockitoAnnotations.initMocks(this);
+
+ mHdmiCecAtomWriterSpy = spy(new HdmiCecAtomWriter());
+
+ mLooper = mTestLooper.getLooper();
+
+ Context mContextSpy = spy(new ContextWrapper(
+ InstrumentationRegistry.getInstrumentation().getTargetContext()));
+
+ PowerManager powerManager = new PowerManager(
+ mContextSpy, mIPowerManagerMock, mIThermalServiceMock, new Handler(mLooper));
+ doReturn(powerManager).when(mContextSpy).getSystemService(Context.POWER_SERVICE);
+ doReturn(true).when(mIPowerManagerMock).isInteractive();
+
+ mHdmiControlServiceSpy = spy(new HdmiControlService(mContextSpy));
+ doNothing().when(mHdmiControlServiceSpy)
+ .writeStringSystemProperty(anyString(), anyString());
+ doReturn(mHdmiCecAtomWriterSpy).when(mHdmiControlServiceSpy).getAtomWriter();
+
+ HdmiCecConfig hdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
+ doReturn(hdmiCecConfig).when(mHdmiControlServiceSpy).getHdmiCecConfig();
+
+ mHdmiControlServiceSpy.setIoLooper(mLooper);
+ mHdmiControlServiceSpy.setMessageValidator(
+ new HdmiCecMessageValidator(mHdmiControlServiceSpy));
+ mHdmiControlServiceSpy.setCecMessageBuffer(
+ new CecMessageBuffer(mHdmiControlServiceSpy));
+
+ mNativeWrapper = new FakeNativeWrapper();
+ mNativeWrapper.setPhysicalAddress(mPhysicalAddress);
+
+ mHdmiCecController = HdmiCecController.createWithNativeWrapper(
+ mHdmiControlServiceSpy, mNativeWrapper, mHdmiCecAtomWriterSpy);
+ mHdmiControlServiceSpy.setCecController(mHdmiCecController);
+
+ mHdmiMhlControllerStub = HdmiMhlControllerStub.create(mHdmiControlServiceSpy);
+ mHdmiControlServiceSpy.setHdmiMhlController(
+ mHdmiMhlControllerStub);
+
+ mHdmiCecNetwork = new HdmiCecNetwork(mHdmiControlServiceSpy,
+ mHdmiCecController, mHdmiMhlControllerStub);
+ mHdmiControlServiceSpy.setHdmiCecNetwork(mHdmiCecNetwork);
+
+ HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[1];
+ hdmiPortInfos[0] =
+ new HdmiPortInfo(1, HdmiPortInfo.PORT_OUTPUT, 0x0000, true, false, false);
+ mNativeWrapper.setPortInfo(hdmiPortInfos);
+ mNativeWrapper.setPortConnectionStatus(1, true);
+
+ mHdmiCecLocalDevicePlayback = new HdmiCecLocalDevicePlayback(mHdmiControlServiceSpy);
+ mHdmiCecLocalDevicePlayback.init();
+ mLocalDevices.add(mHdmiCecLocalDevicePlayback);
+
+ mHdmiControlServiceSpy.initService();
+ mHdmiControlServiceSpy.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
+ mHdmiControlServiceSpy.onBootPhase(SystemService.PHASE_SYSTEM_SERVICES_READY);
+
+ mTestLooper.dispatchAll();
+ }
+
+ @Test
+ public void testActiveSourceChanged_calledOnSetActiveSource() {
+ mHdmiControlServiceSpy.setActiveSource(1, 0x1111, "caller");
+ verify(mHdmiCecAtomWriterSpy, times(1))
+ .activeSourceChanged(1, 0x1111, PATH_RELATIONSHIP_ANCESTOR);
+ }
+
+ @Test
+ public void testMessageReported_calledOnOutgoingMessage() {
+ HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_PLAYBACK_1,
+ mPhysicalAddress);
+
+ mHdmiCecController.sendCommand(message);
+
+ verify(mHdmiCecAtomWriterSpy, times(1)).messageReported(
+ message,
+ HdmiStatsEnums.OUTGOING,
+ SendMessageResult.SUCCESS);
+ }
+
+ @Test
+ public void testMessageReported_calledOnIncomingMessage() {
+ HdmiCecMessage message = HdmiCecMessageBuilder.buildActiveSource(ADDR_TV, 0x0000);
+
+ mNativeWrapper.onCecMessage(message);
+ mTestLooper.dispatchAll();
+
+ verify(mHdmiCecAtomWriterSpy, times(1)).messageReported(
+ message,
+ HdmiStatsEnums.INCOMING);
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
index 3fd3ce3cd0df..6bb68da2a894 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
@@ -170,7 +170,7 @@ public class HdmiCecLocalDeviceAudioSystemTest {
}
@Override
- void writeStringSystemProperty(String key, String value) {
+ protected void writeStringSystemProperty(String key, String value) {
// do nothing
}
@@ -185,12 +185,12 @@ public class HdmiCecLocalDeviceAudioSystemTest {
}
@Override
- PowerManager getPowerManager() {
+ protected PowerManager getPowerManager() {
return powerManager;
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
index dfeed1362b81..ff3b12be277c 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDevicePlaybackTest.java
@@ -114,7 +114,7 @@ public class HdmiCecLocalDevicePlaybackTest {
}
@Override
- void writeStringSystemProperty(String key, String value) {
+ protected void writeStringSystemProperty(String key, String value) {
// do nothing
}
@@ -124,12 +124,12 @@ public class HdmiCecLocalDevicePlaybackTest {
}
@Override
- PowerManager getPowerManager() {
+ protected PowerManager getPowerManager() {
return powerManager;
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
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 12414d99d991..d24b376793cd 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java
@@ -88,17 +88,17 @@ public class HdmiCecLocalDeviceTvTest {
}
@Override
- void writeStringSystemProperty(String key, String value) {
+ protected void writeStringSystemProperty(String key, String value) {
// do nothing
}
@Override
- PowerManager getPowerManager() {
+ protected PowerManager getPowerManager() {
return powerManager;
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java
index 3cc7c6b88a0d..670d51207e31 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecPowerStatusControllerTest.java
@@ -95,7 +95,7 @@ public class HdmiCecPowerStatusControllerTest {
}
@Override
- void writeStringSystemProperty(String key, String value) {
+ protected void writeStringSystemProperty(String key, String value) {
// do nothing
}
@@ -110,7 +110,7 @@ public class HdmiCecPowerStatusControllerTest {
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
index 819bd01992cb..25138073ca40 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiControlServiceTest.java
@@ -151,7 +151,7 @@ public class HdmiControlServiceTest {
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java
index 0a225a06b380..f80b5737d27b 100644
--- a/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java
+++ b/services/tests/servicestests/src/com/android/server/hdmi/SystemAudioInitiationActionFromAvrTest.java
@@ -162,7 +162,7 @@ public class SystemAudioInitiationActionFromAvrTest {
}
@Override
- HdmiCecConfig getHdmiCecConfig() {
+ protected HdmiCecConfig getHdmiCecConfig() {
return hdmiCecConfig;
}
};