summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java b/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java
index f0a9a0089ec9..75aacd148011 100644
--- a/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/lights/LightsServiceTest.java
@@ -47,6 +47,9 @@ import org.mockito.MockitoAnnotations;
@SmallTest
public class LightsServiceTest {
+ private static final int HIGH_PRIORITY = Integer.MAX_VALUE;
+ private static final int DEFAULT_PRIORITY = 0;
+
private final ILights mHal = new ILights.Stub() {
@Override
public void setLightState(int id, HwLightState state) {
@@ -188,4 +191,30 @@ public class LightsServiceTest {
// Then the light should turn back off.
assertThat(manager.getLightState(micLight).getColor()).isEqualTo(0);
}
+
+ @Test
+ public void testControlLights_higherPriorityCallerWinsContention() throws Exception {
+ LightsService service = new LightsService(mContext, () -> mHal, Looper.getMainLooper());
+ LightsManager manager = new SystemLightsManager(mContext, service.mManagerService);
+ Light micLight = manager.getLights().get(0);
+
+ // The light should begin by being off.
+ assertThat(manager.getLightState(micLight).getColor()).isEqualTo(TRANSPARENT);
+
+ try (LightsManager.LightsSession session1 = manager.openSession(DEFAULT_PRIORITY)) {
+ try (LightsManager.LightsSession session2 = manager.openSession(HIGH_PRIORITY)) {
+ // When session1 and session2 both request the same light:
+ session1.requestLights(
+ new Builder().addLight(micLight, new LightState(BLUE)).build());
+ session2.requestLights(
+ new Builder().addLight(micLight, new LightState(WHITE)).build());
+ // Then session2 should win because it has a higher priority.
+ assertThat(manager.getLightState(micLight).getColor()).isEqualTo(WHITE);
+ }
+ // Then session1 should have its request go into effect.
+ assertThat(manager.getLightState(micLight).getColor()).isEqualTo(BLUE);
+ }
+ // Then the light should turn off because there are no more sessions.
+ assertThat(manager.getLightState(micLight).getColor()).isEqualTo(TRANSPARENT);
+ }
}