diff options
author | Venkatarama NG. Avadhani <venkatarama.avadhani@ittiam.com> | 2019-10-24 08:37:18 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-10-24 08:37:18 -0700 |
commit | 6c28cd536fc0513c19f6e4f5d88ead1b7907c3f3 (patch) | |
tree | 9da49e3d0382a95b1e9a30ad77e80b322e0622cf | |
parent | bdc386e42864b0058b0d5d5415aa5cd2fe0bb094 (diff) | |
parent | 01c6ef2db96f71ebde4f2063d3d741ee4a901a77 (diff) | |
download | cts-6c28cd536fc0513c19f6e4f5d88ead1b7907c3f3.tar.gz |
Merge "Add check for HDMI CEC feature"
am: 01c6ef2db9
Change-Id: I8e2d1efe2ae471083b0002fc34ababe852aa33af
5 files changed, 148 insertions, 95 deletions
diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecOneTouchPlayTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecOneTouchPlayTest.java index d688b3ce292..fb5e3a84e25 100644 --- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecOneTouchPlayTest.java +++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecOneTouchPlayTest.java @@ -17,6 +17,7 @@ package android.hdmicec.cts; import com.android.tradefed.device.ITestDevice; +import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceTestCase; /** HDMI CEC tests for One Touch Play (Section 11.2.1) */ @@ -31,18 +32,22 @@ public final class HdmiCecOneTouchPlayTest extends DeviceTestCase { */ public void testOneTouchPlay() throws Exception { HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); + ITestDevice device = getDevice(); + assertNotNull("Device not set", device); - if (hdmiCecUtils.init()) { - try { - ITestDevice device = getDevice(); - assertNotNull("Device not set", device); - device.executeShellCommand("input keyevent KEYCODE_HOME"); - hdmiCecUtils.checkExpectedOutput(CecDevice.TV, CecMessage.TEXT_VIEW_ON); - String message = hdmiCecUtils.checkExpectedOutput(CecMessage.ACTIVE_SOURCE); - assertEquals(PHYSICAL_ADDRESS, hdmiCecUtils.getParamsFromMessage(message)); - } finally { - hdmiCecUtils.killCecProcess(); - } + if (!HdmiCecUtils.isHdmiCecFeatureSupported(device)) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } + + try { + hdmiCecUtils.init(); + device.executeShellCommand("input keyevent KEYCODE_HOME"); + hdmiCecUtils.checkExpectedOutput(CecDevice.TV, CecMessage.TEXT_VIEW_ON); + String message = hdmiCecUtils.checkExpectedOutput(CecMessage.ACTIVE_SOURCE); + assertEquals(PHYSICAL_ADDRESS, hdmiCecUtils.getParamsFromMessage(message)); + } finally { + hdmiCecUtils.killCecProcess(); } } } diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecPhysicalAddressTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecPhysicalAddressTest.java index 48b3d7092c9..6fa535a0e58 100644 --- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecPhysicalAddressTest.java +++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecPhysicalAddressTest.java @@ -17,6 +17,7 @@ package android.hdmicec.cts; import com.android.tradefed.device.ITestDevice; +import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceTestCase; /** HDMI CEC test to verify physical address after device reboot (Section 10.1.2) */ @@ -32,20 +33,24 @@ public final class HdmiCecPhysicalAddressTest extends DeviceTestCase { */ public void testRebootPhysicalAddress() throws Exception { HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); + ITestDevice device = getDevice(); + assertNotNull("Device not set", device); - if (hdmiCecUtils.init()) { - try { - ITestDevice device = getDevice(); - assertNotNull("Device not set", device); - device.executeShellCommand("reboot"); - device.waitForBootComplete(REBOOT_TIMEOUT); - String message = hdmiCecUtils.checkExpectedOutput - (CecMessage.REPORT_PHYSICAL_ADDRESS); - assertEquals(PHY_ADDRESS, - hdmiCecUtils.getParamsFromMessage(message, PHY_ADDRESS.length())); - } finally { - hdmiCecUtils.killCecProcess(); - } + if (!HdmiCecUtils.isHdmiCecFeatureSupported(device)) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } + + try { + hdmiCecUtils.init(); + device.executeShellCommand("reboot"); + device.waitForBootComplete(REBOOT_TIMEOUT); + String message = hdmiCecUtils.checkExpectedOutput + (CecMessage.REPORT_PHYSICAL_ADDRESS); + assertEquals(PHY_ADDRESS, + hdmiCecUtils.getParamsFromMessage(message, PHY_ADDRESS.length())); + } finally { + hdmiCecUtils.killCecProcess(); } } } diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecRoutingControlTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecRoutingControlTest.java index cc2247bae6f..397070f000a 100644 --- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecRoutingControlTest.java +++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecRoutingControlTest.java @@ -17,6 +17,7 @@ package android.hdmicec.cts; import com.android.tradefed.device.ITestDevice; +import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceTestCase; /** HDMI CEC test to test routing control (Section 11.2.2) */ @@ -30,20 +31,25 @@ public final class HdmiCecRoutingControlTest extends DeviceTestCase { * This test depends on One Touch Play, and will pass only if One Touch Play passes. */ public void testRequestActiveSource() throws Exception { + ITestDevice device = getDevice(); + assertNotNull("Device not set", device); + + if (!HdmiCecUtils.isHdmiCecFeatureSupported(device)) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } + HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); - if (hdmiCecUtils.init()) { - try { - ITestDevice device = getDevice(); - assertNotNull("Device not set", device); - device.executeShellCommand("input keyevent KEYCODE_HOME"); - hdmiCecUtils.sendCecMessage(CecDevice.TV, CecDevice.BROADCAST, - CecMessage.REQUEST_ACTIVE_SOURCE); - String message = hdmiCecUtils.checkExpectedOutput(CecMessage.ACTIVE_SOURCE); - assertEquals(PHYSICAL_ADDRESS, hdmiCecUtils.getParamsFromMessage(message)); - } finally { - hdmiCecUtils.killCecProcess(); - } + try { + hdmiCecUtils.init(); + device.executeShellCommand("input keyevent KEYCODE_HOME"); + hdmiCecUtils.sendCecMessage(CecDevice.TV, CecDevice.BROADCAST, + CecMessage.REQUEST_ACTIVE_SOURCE); + String message = hdmiCecUtils.checkExpectedOutput(CecMessage.ACTIVE_SOURCE); + assertEquals(PHYSICAL_ADDRESS, hdmiCecUtils.getParamsFromMessage(message)); + } finally { + hdmiCecUtils.killCecProcess(); } } @@ -54,22 +60,23 @@ public final class HdmiCecRoutingControlTest extends DeviceTestCase { */ public void testInactiveSourceOnStandby() throws Exception { HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); + ITestDevice device = getDevice(); + assertNotNull("Device not set", device); + + if (!HdmiCecUtils.isHdmiCecFeatureSupported(device)) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } - if (hdmiCecUtils.init()) { - ITestDevice device = null; - try { - device = getDevice(); - assertNotNull("Device not set", device); - device.executeShellCommand("input keyevent KEYCODE_HOME"); - device.executeShellCommand("input keyevent KEYCODE_POWER"); - hdmiCecUtils.checkExpectedOutput(CecMessage.INACTIVE_SOURCE); - } finally { - /* Wake up the device again */ - if (device != null) { - device.executeShellCommand("input keyevent KEYCODE_POWER"); - } - hdmiCecUtils.killCecProcess(); - } + try { + hdmiCecUtils.init(); + device.executeShellCommand("input keyevent KEYCODE_HOME"); + device.executeShellCommand("input keyevent KEYCODE_POWER"); + hdmiCecUtils.checkExpectedOutput(CecMessage.INACTIVE_SOURCE); + } finally { + /* Wake up the device again */ + device.executeShellCommand("input keyevent KEYCODE_POWER"); + hdmiCecUtils.killCecProcess(); } } } diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecSystemInformationTest.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecSystemInformationTest.java index a9f3324398e..cee6c5917d2 100644 --- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecSystemInformationTest.java +++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecSystemInformationTest.java @@ -16,6 +16,7 @@ package android.hdmicec.cts; +import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.testtype.DeviceTestCase; /** HDMI CEC system information tests (Section 11.2.6) */ @@ -29,21 +30,27 @@ public final class HdmiCecSystemInformationTest extends DeviceTestCase { * Tests for Ack <Polling Message> message. */ public void testAck() throws Exception { + + if (!HdmiCecUtils.isHdmiCecFeatureSupported(getDevice())) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } + String command = "poll " + CecDevice.PLAYBACK_1; String expectedOutput = "Playback 1 (" + CecDevice.PLAYBACK_1 + "): device " + "status changed into 'present'"; HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); - if (hdmiCecUtils.init()) { - try { - hdmiCecUtils.sendConsoleMessage(command); - if (!hdmiCecUtils.checkConsoleOutput(expectedOutput)) { - throw new Exception("Could not find " + expectedOutput); - } - } finally { - hdmiCecUtils.killCecProcess(); + + try { + hdmiCecUtils.init(); + hdmiCecUtils.sendConsoleMessage(command); + if (!hdmiCecUtils.checkConsoleOutput(expectedOutput)) { + throw new Exception("Could not find " + expectedOutput); } + } finally { + hdmiCecUtils.killCecProcess(); } } @@ -53,16 +60,20 @@ public final class HdmiCecSystemInformationTest extends DeviceTestCase { * <GIVE_PHYSICAL_ADDRESS> */ public void testGivePhysicalAddress() throws Exception { + + if (!HdmiCecUtils.isHdmiCecFeatureSupported(getDevice())) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } + HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); - if (hdmiCecUtils.init()) { - try { - hdmiCecUtils.sendCecMessage(CecMessage.GIVE_PHYSICAL_ADDRESS); - String message = hdmiCecUtils.checkExpectedOutput - (CecMessage.REPORT_PHYSICAL_ADDRESS); - } finally { - hdmiCecUtils.killCecProcess(); - } + try { + hdmiCecUtils.init(); + hdmiCecUtils.sendCecMessage(CecMessage.GIVE_PHYSICAL_ADDRESS); + String message = hdmiCecUtils.checkExpectedOutput(CecMessage.REPORT_PHYSICAL_ADDRESS); + } finally { + hdmiCecUtils.killCecProcess(); } } @@ -71,18 +82,23 @@ public final class HdmiCecSystemInformationTest extends DeviceTestCase { * Tests that the device sends a <CEC_VERSION> in response to a <GET_CEC_VERSION> */ public void testGiveCecVersion() throws Exception { + + if (!HdmiCecUtils.isHdmiCecFeatureSupported(getDevice())) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } + HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); - if (hdmiCecUtils.init()) { - try { - hdmiCecUtils.sendCecMessage(CecDevice.TV, CecMessage.GET_CEC_VERSION); - String message = hdmiCecUtils.checkExpectedOutput - (CecDevice.TV, CecMessage.CEC_VERSION); + try { + hdmiCecUtils.init(); + hdmiCecUtils.sendCecMessage(CecDevice.TV, CecMessage.GET_CEC_VERSION); + String message = hdmiCecUtils.checkExpectedOutput(CecDevice.TV, + CecMessage.CEC_VERSION); - assertEquals(CEC_VERSION_NUMBER, hdmiCecUtils.getParamsFromMessage(message)); - } finally { - hdmiCecUtils.killCecProcess(); - } + assertEquals(CEC_VERSION_NUMBER, hdmiCecUtils.getParamsFromMessage(message)); + } finally { + hdmiCecUtils.killCecProcess(); } } @@ -93,17 +109,21 @@ public final class HdmiCecSystemInformationTest extends DeviceTestCase { public void testGetMenuLanguage() throws Exception { HdmiCecUtils hdmiCecUtils = new HdmiCecUtils(CecDevice.PLAYBACK_1, "1.0.0.0"); - if (hdmiCecUtils.init()) { - try { - hdmiCecUtils.sendCecMessage(CecDevice.TV, CecMessage.GET_MENU_LANGUAGE); - String message = hdmiCecUtils.checkExpectedOutput - (CecDevice.TV, CecMessage.FEATURE_ABORT); - String params = hdmiCecUtils.getParamsFromMessage(message, - CecMessage.GET_MENU_LANGUAGE.toString().length()); - assertEquals(params, CecMessage.GET_MENU_LANGUAGE.toString()); - } finally { - hdmiCecUtils.killCecProcess(); - } + if (!HdmiCecUtils.isHdmiCecFeatureSupported(getDevice())) { + CLog.v("No HDMI CEC feature running, should skip test."); + return; + } + + try { + hdmiCecUtils.init(); + hdmiCecUtils.sendCecMessage(CecDevice.TV, CecMessage.GET_MENU_LANGUAGE); + String message = hdmiCecUtils.checkExpectedOutput(CecDevice.TV, + CecMessage.FEATURE_ABORT); + String params = hdmiCecUtils.getParamsFromMessage(message, + CecMessage.GET_MENU_LANGUAGE.toString().length()); + assertEquals(params, CecMessage.GET_MENU_LANGUAGE.toString()); + } finally { + hdmiCecUtils.killCecProcess(); } } diff --git a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecUtils.java b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecUtils.java index 428dec8d9a0..6c4d4319c4f 100644 --- a/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecUtils.java +++ b/hostsidetests/hdmicec/src/android/hdmicec/cts/HdmiCecUtils.java @@ -16,6 +16,7 @@ package android.hdmicec.cts; +import com.android.tradefed.device.ITestDevice; import com.android.tradefed.log.LogUtil.CLog; import com.android.tradefed.util.RunUtil; @@ -34,6 +35,7 @@ public final class HdmiCecUtils { private static final String CEC_CONSOLE_READY = "waiting for input"; private static final int MILLISECONDS_TO_READY = 5000; private static final int DEFAULT_TIMEOUT = 20000; + private static final String HDMI_CEC_FEATURE = "feature:android.hardware.hdmi.cec"; private Process mCecClient; private BufferedWriter mOutputConsole; @@ -48,8 +50,17 @@ public final class HdmiCecUtils { this.physicalAddress = physicalAddress; } + /** + * Checks if the HDMI CEC feature is running on the device. Call this function before running + * any HDMI CEC tests. + * This could throw a DeviceNotAvailableException. + */ + public static boolean isHdmiCecFeatureSupported(ITestDevice device) throws Exception { + return device.hasFeature(HDMI_CEC_FEATURE); + } + /** Initialise the client */ - public boolean init() throws Exception { + public void init() throws Exception { boolean gotExpectedOut = false; List<String> commands = new ArrayList(); int seconds = 0; @@ -63,7 +74,7 @@ public final class HdmiCecUtils { if (checkConsoleOutput(CecMessage.CLIENT_CONSOLE_READY + "", MILLISECONDS_TO_READY)) { mOutputConsole = new BufferedWriter( new OutputStreamWriter(mCecClient.getOutputStream())); - return mCecClientInitialised; + return; } mCecClientInitialised = false; @@ -273,11 +284,16 @@ public final class HdmiCecUtils { /** * Kills the cec-client process that was created in init(). */ - public void killCecProcess() throws Exception { - checkCecClient(); - sendConsoleMessage(CecMessage.QUIT_CLIENT.toString()); - mOutputConsole.close(); - mInputConsole.close(); - mCecClientInitialised = false; + public void killCecProcess() { + try { + checkCecClient(); + sendConsoleMessage(CecMessage.QUIT_CLIENT.toString()); + mOutputConsole.close(); + mInputConsole.close(); + mCecClientInitialised = false; + } catch (Exception e) { + /* If cec-client is not running, do not throw an exception, just return. */ + return; + } } } |