OSDN Git Service

Extract a FakeNativeWrapper to share between tests
authorNick Chalko <nchalko@google.com>
Tue, 19 Jun 2018 17:17:03 +0000 (10:17 -0700)
committerNick Chalko <nchalko@google.com>
Wed, 18 Jul 2018 20:23:37 +0000 (20:23 +0000)
Change-Id: I666496132e0dcbd4b0d36eb87fc06a99f306ca93
Test: atest FrameworksServicesTests:com.android.server.hdmi
(cherry picked from commit f19f1d9f0404586945ba1492ed2d9af172fce761)

services/tests/servicestests/Android.mk
services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java [new file with mode: 0644]
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecControllerTest.java
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceAudioSystemTest.java
services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTest.java

index a85f21c..8f4e8e4 100644 (file)
@@ -41,6 +41,7 @@ LOCAL_SRC_FILES += $(call all-java-files-under, test-apps/SuspendTestApp/src)
 
 LOCAL_JAVA_LIBRARIES := \
     android.hidl.manager-V1.0-java \
+    android.hardware.tv.cec-V1.0-java \
     android.test.mock \
     android.test.base android.test.runner \
 
diff --git a/services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java b/services/tests/servicestests/src/com/android/server/hdmi/FakeNativeWrapper.java
new file mode 100644 (file)
index 0000000..715f8a6
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * 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 android.hardware.hdmi.HdmiPortInfo;
+import android.hardware.tv.cec.V1_0.SendMessageResult;
+import android.os.MessageQueue;
+import com.android.server.hdmi.HdmiCecController.NativeWrapper;
+
+/** Fake {@link NativeWrapper} useful for testing. */
+final class FakeNativeWrapper implements NativeWrapper {
+    private final int[] mPollAddressResponse =
+            new int[] {
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+                SendMessageResult.NACK,
+            };
+
+    private HdmiCecMessage mResultMessage;
+
+    @Override
+    public long nativeInit(HdmiCecController handler, MessageQueue messageQueue) {
+        return 1L;
+    }
+
+    @Override
+    public int nativeSendCecCommand(
+            long controllerPtr, int srcAddress, int dstAddress, byte[] body) {
+        if (body.length == 0) {
+            return mPollAddressResponse[dstAddress];
+        } else {
+            mResultMessage = HdmiCecMessageBuilder.of(srcAddress, dstAddress, body);
+        }
+        return SendMessageResult.SUCCESS;
+    }
+
+    @Override
+    public int nativeAddLogicalAddress(long controllerPtr, int logicalAddress) {
+        return 0;
+    }
+
+    @Override
+    public void nativeClearLogicalAddress(long controllerPtr) {}
+
+    @Override
+    public int nativeGetPhysicalAddress(long controllerPtr) {
+        return 0;
+    }
+
+    @Override
+    public int nativeGetVersion(long controllerPtr) {
+        return 0;
+    }
+
+    @Override
+    public int nativeGetVendorId(long controllerPtr) {
+        return 0;
+    }
+
+    @Override
+    public HdmiPortInfo[] nativeGetPortInfos(long controllerPtr) {
+        HdmiPortInfo[] hdmiPortInfo = new HdmiPortInfo[1];
+        hdmiPortInfo[0] = new HdmiPortInfo(1, 1, 0x1000, true, true, true);
+        return hdmiPortInfo;
+    }
+
+    @Override
+    public void nativeSetOption(long controllerPtr, int flag, boolean enabled) {}
+
+    @Override
+    public void nativeSetLanguage(long controllerPtr, String language) {}
+
+    @Override
+    public void nativeEnableAudioReturnChannel(long controllerPtr, int port, boolean flag) {}
+
+    @Override
+    public boolean nativeIsConnected(long controllerPtr, int port) {
+        return false;
+    }
+
+    public HdmiCecMessage getResultMessage() {
+        return mResultMessage;
+    }
+
+    public void setPollAddressResponse(int logicalAddress, int response) {
+        mPollAddressResponse[logicalAddress] = response;
+    }
+}
index 1089f69..84e1b7e 100644 (file)
@@ -17,6 +17,7 @@ package com.android.server.hdmi;
 
 import android.content.Context;
 import android.hardware.hdmi.HdmiPortInfo;
+import android.hardware.tv.cec.V1_0.SendMessageResult;
 import android.os.Looper;
 import android.os.MessageQueue;
 import android.os.test.TestLooper;
@@ -48,69 +49,7 @@ import org.junit.runners.JUnit4;
 @RunWith(JUnit4.class)
 public class HdmiCecControllerTest {
 
-    private static final class NativeWrapperImpl implements NativeWrapper {
-
-        @Override
-        public long nativeInit(HdmiCecController handler, MessageQueue messageQueue) {
-            return 1L;
-        }
-
-        @Override
-        public int nativeSendCecCommand(long controllerPtr, int srcAddress, int dstAddress,
-            byte[] body) {
-            return mOccupied[srcAddress] ? 0 : 1;
-        }
-
-        @Override
-        public int nativeAddLogicalAddress(long controllerPtr, int logicalAddress) {
-            return 0;
-        }
-
-        @Override
-        public void nativeClearLogicalAddress(long controllerPtr) {
-
-        }
-
-        @Override
-        public int nativeGetPhysicalAddress(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public int nativeGetVersion(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public int nativeGetVendorId(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public HdmiPortInfo[] nativeGetPortInfos(long controllerPtr) {
-            return new HdmiPortInfo[0];
-        }
-
-        @Override
-        public void nativeSetOption(long controllerPtr, int flag, boolean enabled) {
-
-        }
-
-        @Override
-        public void nativeSetLanguage(long controllerPtr, String language) {
-
-        }
-
-        @Override
-        public void nativeEnableAudioReturnChannel(long controllerPtr, int port, boolean flag) {
-
-        }
-
-        @Override
-        public boolean nativeIsConnected(long controllerPtr, int port) {
-            return false;
-        }
-    }
+    private FakeNativeWrapper mNativeWrapper;
 
     private class MyHdmiControlService extends HdmiControlService {
 
@@ -129,10 +68,8 @@ public class HdmiCecControllerTest {
         }
     }
 
-    private static final String TAG = HdmiCecControllerTest.class.getSimpleName();
     private HdmiControlService mHdmiControlService;
     private HdmiCecController mHdmiCecController;
-    private static boolean[] mOccupied = new boolean[15];
     private int mLogicalAddress = 16;
     private AllocateAddressCallback mCallback = new AllocateAddressCallback() {
         @Override
@@ -148,8 +85,9 @@ public class HdmiCecControllerTest {
         mMyLooper = mTestLooper.getLooper();
         mMyLooper = mTestLooper.getLooper();
         mHdmiControlService = new MyHdmiControlService(null);
+        mNativeWrapper = new FakeNativeWrapper();
         mHdmiCecController = HdmiCecController.createWithNativeWrapper(
-            mHdmiControlService, new NativeWrapperImpl());
+            mHdmiControlService, mNativeWrapper);
     }
 
     /**
@@ -157,8 +95,6 @@ public class HdmiCecControllerTest {
      */
     @Test
     public void testAllocatLogicalAddress_TvDevicePreferredNotOcupied() {
-        mOccupied[ADDR_TV] = false;
-        mOccupied[ADDR_SPECIFIC_USE] = false;
         mHdmiCecController.allocateLogicalAddress(DEVICE_TV, ADDR_TV, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_TV, mLogicalAddress);
@@ -166,8 +102,7 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_TvDeviceNonPreferredNotOcupied() {
-        mOccupied[ADDR_TV] = false;
-        mOccupied[ADDR_SPECIFIC_USE] = false;
+
         mHdmiCecController.allocateLogicalAddress(DEVICE_TV, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_TV, mLogicalAddress);
@@ -175,8 +110,7 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_TvDeviceNonPreferredFirstOcupied() {
-        mOccupied[ADDR_TV] = true;
-        mOccupied[ADDR_SPECIFIC_USE] = false;
+        mNativeWrapper.setPollAddressResponse(ADDR_TV, SendMessageResult.SUCCESS);
         mHdmiCecController.allocateLogicalAddress(DEVICE_TV, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_SPECIFIC_USE, mLogicalAddress);
@@ -184,8 +118,8 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_TvDeviceNonPreferredAllOcupied() {
-        mOccupied[ADDR_TV] = true;
-        mOccupied[ADDR_SPECIFIC_USE] = true;
+        mNativeWrapper.setPollAddressResponse(ADDR_TV, SendMessageResult.SUCCESS);
+        mNativeWrapper.setPollAddressResponse(ADDR_SPECIFIC_USE, SendMessageResult.SUCCESS);
         mHdmiCecController.allocateLogicalAddress(DEVICE_TV, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_UNREGISTERED, mLogicalAddress);
@@ -193,7 +127,6 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_AudioSystemNonPreferredNotOcupied() {
-        mOccupied[ADDR_AUDIO_SYSTEM] = false;
         mHdmiCecController.allocateLogicalAddress(
             DEVICE_AUDIO_SYSTEM, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
@@ -202,7 +135,7 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_AudioSystemNonPreferredAllOcupied() {
-        mOccupied[ADDR_AUDIO_SYSTEM] = true;
+        mNativeWrapper.setPollAddressResponse(ADDR_AUDIO_SYSTEM, SendMessageResult.SUCCESS);
         mHdmiCecController.allocateLogicalAddress(
             DEVICE_AUDIO_SYSTEM, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
@@ -211,9 +144,6 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_PlaybackPreferredNotOccupied() {
-        mOccupied[ADDR_PLAYBACK_1] = false;
-        mOccupied[ADDR_PLAYBACK_2] = false;
-        mOccupied[ADDR_PLAYBACK_3] = false;
         mHdmiCecController.allocateLogicalAddress(DEVICE_PLAYBACK, ADDR_PLAYBACK_1, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_PLAYBACK_1, mLogicalAddress);
@@ -221,9 +151,7 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_PlaybackPreferredOcuppied() {
-        mOccupied[ADDR_PLAYBACK_1] = true;
-        mOccupied[ADDR_PLAYBACK_2] = false;
-        mOccupied[ADDR_PLAYBACK_3] = false;
+        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS);
         mHdmiCecController.allocateLogicalAddress(
             DEVICE_PLAYBACK, ADDR_PLAYBACK_1, mCallback);
         mTestLooper.dispatchAll();
@@ -232,9 +160,6 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_PlaybackNoPreferredNotOcuppied() {
-        mOccupied[ADDR_PLAYBACK_1] = false;
-        mOccupied[ADDR_PLAYBACK_2] = false;
-        mOccupied[ADDR_PLAYBACK_3] = false;
         mHdmiCecController.allocateLogicalAddress(DEVICE_PLAYBACK, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_PLAYBACK_1, mLogicalAddress);
@@ -242,9 +167,7 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_PlaybackNoPreferredFirstOcuppied() {
-        mOccupied[ADDR_PLAYBACK_1] = true;
-        mOccupied[ADDR_PLAYBACK_2] = false;
-        mOccupied[ADDR_PLAYBACK_3] = false;
+        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS);
         mHdmiCecController.allocateLogicalAddress(DEVICE_PLAYBACK, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_PLAYBACK_2, mLogicalAddress);
@@ -252,9 +175,8 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_PlaybackNonPreferredFirstTwoOcuppied() {
-        mOccupied[ADDR_PLAYBACK_1] = true;
-        mOccupied[ADDR_PLAYBACK_2] = true;
-        mOccupied[ADDR_PLAYBACK_3] = false;
+        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS);
+        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_2, SendMessageResult.SUCCESS);
         mHdmiCecController.allocateLogicalAddress(DEVICE_PLAYBACK, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_PLAYBACK_3, mLogicalAddress);
@@ -262,9 +184,9 @@ public class HdmiCecControllerTest {
 
     @Test
     public void testAllocatLogicalAddress_PlaybackNonPreferredAllOcupied() {
-        mOccupied[ADDR_PLAYBACK_1] = true;
-        mOccupied[ADDR_PLAYBACK_2] = true;
-        mOccupied[ADDR_PLAYBACK_3] = true;
+        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_1, SendMessageResult.SUCCESS);
+        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_2, SendMessageResult.SUCCESS);
+        mNativeWrapper.setPollAddressResponse(ADDR_PLAYBACK_3, SendMessageResult.SUCCESS);
         mHdmiCecController.allocateLogicalAddress(DEVICE_PLAYBACK, ADDR_UNREGISTERED, mCallback);
         mTestLooper.dispatchAll();
         assertEquals(ADDR_UNREGISTERED, mLogicalAddress);
index e4cfd5b..3340f22 100644 (file)
@@ -23,14 +23,11 @@ import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
 import static junit.framework.Assert.assertEquals;
 
-import android.hardware.hdmi.HdmiPortInfo;
 import android.media.AudioManager;
 import android.os.Looper;
-import android.os.MessageQueue;
 import android.os.test.TestLooper;
 import android.support.test.filters.SmallTest;
-import com.android.server.hdmi.HdmiCecController.NativeWrapper;
-import java.util.Arrays;
+
 import java.util.ArrayList;
 import org.junit.Before;
 import org.junit.Test;
@@ -44,85 +41,10 @@ import org.junit.runners.JUnit4;
  */
 public class HdmiCecLocalDeviceAudioSystemTest {
 
-    private static final class NativeWrapperImpl implements NativeWrapper {
-
-        private HdmiCecMessage mResultMessage;
-
-        @Override
-        public long nativeInit(HdmiCecController handler, MessageQueue messageQueue) {
-            return 1L;
-        }
-
-        @Override
-        public int nativeSendCecCommand(long controllerPtr, int srcAddress, int dstAddress,
-            byte[] body) {
-            if (body.length != 0) {
-                mResultMessage = HdmiCecMessageBuilder.of(srcAddress, dstAddress, body);
-            }
-            return 1;
-        }
-
-        @Override
-        public int nativeAddLogicalAddress(long controllerPtr, int logicalAddress) {
-            return 0;
-        }
-
-        @Override
-        public void nativeClearLogicalAddress(long controllerPtr) {
-
-        }
-
-        @Override
-        public int nativeGetPhysicalAddress(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public int nativeGetVersion(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public int nativeGetVendorId(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public HdmiPortInfo[] nativeGetPortInfos(long controllerPtr) {
-            HdmiPortInfo[] hdmiPortInfo = new HdmiPortInfo[1];
-            hdmiPortInfo[0] = new HdmiPortInfo(1, 1, 0x1000,true, true, true);
-            return hdmiPortInfo;
-        }
-
-        @Override
-        public void nativeSetOption(long controllerPtr, int flag, boolean enabled) {
-
-        }
-
-        @Override
-        public void nativeSetLanguage(long controllerPtr, String language) {
-
-        }
-
-        @Override
-        public void nativeEnableAudioReturnChannel(long controllerPtr, int port, boolean flag) {
-
-        }
-
-        @Override
-        public boolean nativeIsConnected(long controllerPtr, int port) {
-            return false;
-        }
-
-        public HdmiCecMessage getResultMessage() {
-            return mResultMessage;
-        }
-    }
-
     private HdmiControlService mHdmiControlService;
     private HdmiCecController mHdmiCecController;
     private HdmiCecLocalDeviceAudioSystem mHdmiCecLocalDeviceAudioSystem;
-    private NativeWrapperImpl mNativeWrapper;
+    private FakeNativeWrapper mNativeWrapper;
     private Looper mMyLooper;
     private TestLooper mTestLooper = new TestLooper();
     private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
@@ -186,7 +108,7 @@ public class HdmiCecLocalDeviceAudioSystemTest {
         mHdmiCecLocalDeviceAudioSystem.init();
         mHdmiControlService.setIoLooper(mMyLooper);
 
-        mNativeWrapper = new NativeWrapperImpl();
+        mNativeWrapper = new FakeNativeWrapper();
         mHdmiCecController = HdmiCecController.createWithNativeWrapper(
             mHdmiControlService, mNativeWrapper);
         mHdmiControlService.setCecController(mHdmiCecController);
index 78cb56b..ccbecf0 100644 (file)
@@ -44,69 +44,6 @@ import org.junit.runners.JUnit4;
  */
 public class HdmiCecLocalDeviceTest {
 
-    private static final class NativeWrapperImpl implements NativeWrapper {
-
-        @Override
-        public long nativeInit(HdmiCecController handler, MessageQueue messageQueue) {
-            return 1L;
-        }
-
-        @Override
-        public int nativeSendCecCommand(long controllerPtr, int srcAddress, int dstAddress,
-            byte[] body) {
-            return SendCecCommandFactory(srcAddress, dstAddress, body);
-        }
-
-        @Override
-        public int nativeAddLogicalAddress(long controllerPtr, int logicalAddress) {
-            return 0;
-        }
-
-        @Override
-        public void nativeClearLogicalAddress(long controllerPtr) {
-
-        }
-
-        @Override
-        public int nativeGetPhysicalAddress(long controllerPtr) {
-            return mPhysicalAddr;
-        }
-
-        @Override
-        public int nativeGetVersion(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public int nativeGetVendorId(long controllerPtr) {
-            return 0;
-        }
-
-        @Override
-        public HdmiPortInfo[] nativeGetPortInfos(long controllerPtr) {
-            return new HdmiPortInfo[0];
-        }
-
-        @Override
-        public void nativeSetOption(long controllerPtr, int flag, boolean enabled) {
-
-        }
-
-        @Override
-        public void nativeSetLanguage(long controllerPtr, String language) {
-
-        }
-
-        @Override
-        public void nativeEnableAudioReturnChannel(long controllerPtr, int port, boolean flag) {
-
-        }
-
-        @Override
-        public boolean nativeIsConnected(long controllerPtr, int port) {
-            return false;
-        }
-    }
 
     private static int SendCecCommandFactory(int srcAddress, int dstAddress, byte[] body) {
         switch(body[0] & 0xFF) {
@@ -160,7 +97,7 @@ public class HdmiCecLocalDeviceTest {
         mHdmiControlService = new HdmiControlService(null);
         mHdmiControlService.setIoLooper(mTestLooper.getLooper());
         mHdmiCecController = HdmiCecController.createWithNativeWrapper(
-            mHdmiControlService, new NativeWrapperImpl());
+            mHdmiControlService, new FakeNativeWrapper());
         mHdmiControlService.setCecController(mHdmiCecController);
         mHdmiLocalDevice = new MyHdmiCecLocalDevice(
             mHdmiControlService, DEVICE_TV);