• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.companion.virtual;
18 
19 import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_CUSTOM;
20 import static android.companion.virtual.VirtualDeviceParams.DEVICE_POLICY_DEFAULT;
21 import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_AUDIO;
22 import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_CAMERA;
23 import static android.companion.virtual.VirtualDeviceParams.POLICY_TYPE_SENSORS;
24 import static android.content.Context.DEVICE_ID_DEFAULT;
25 import static android.content.Context.DEVICE_ID_INVALID;
26 
27 import static com.google.common.truth.Truth.assertThat;
28 
29 import static org.junit.Assert.assertThrows;
30 import static org.mockito.Mockito.when;
31 
32 import android.companion.virtual.IVirtualDevice;
33 import android.companion.virtual.VirtualDevice;
34 import android.os.Parcel;
35 import android.platform.test.annotations.Presubmit;
36 import android.platform.test.flag.junit.SetFlagsRule;
37 
38 import androidx.test.ext.junit.runners.AndroidJUnit4;
39 
40 import org.junit.Before;
41 import org.junit.Rule;
42 import org.junit.Test;
43 import org.junit.runner.RunWith;
44 import org.mockito.Mock;
45 import org.mockito.MockitoAnnotations;
46 
47 @Presubmit
48 @RunWith(AndroidJUnit4.class)
49 public class VirtualDeviceTest {
50 
51     private static final int VIRTUAL_DEVICE_ID = 42;
52     private static final String PERSISTENT_ID = "persistentId";
53     private static final String DEVICE_NAME = "VirtualDeviceName";
54     private static final String DISPLAY_NAME = "DisplayName";
55 
56     @Rule
57     public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
58 
59     @Mock
60     private IVirtualDevice mVirtualDevice;
61 
62     @Before
setUp()63     public void setUp() throws Exception {
64         MockitoAnnotations.initMocks(this);
65     }
66 
67     @Test
build_invalidId_shouldThrowIllegalArgumentException()68     public void build_invalidId_shouldThrowIllegalArgumentException() {
69         assertThrows(
70                 IllegalArgumentException.class,
71                 () -> new VirtualDevice(
72                         mVirtualDevice, DEVICE_ID_INVALID, PERSISTENT_ID, DEVICE_NAME));
73     }
74 
75     @Test
build_defaultId_shouldThrowIllegalArgumentException()76     public void build_defaultId_shouldThrowIllegalArgumentException() {
77         assertThrows(
78                 IllegalArgumentException.class,
79                 () -> new VirtualDevice(
80                         mVirtualDevice, DEVICE_ID_DEFAULT, PERSISTENT_ID, DEVICE_NAME));
81     }
82 
83     @Test
build_onlyRequiredFields()84     public void build_onlyRequiredFields() {
85         VirtualDevice virtualDevice =
86                 new VirtualDevice(
87                         mVirtualDevice, VIRTUAL_DEVICE_ID, /*persistentId=*/null, /*name=*/null);
88         assertThat(virtualDevice.getDeviceId()).isEqualTo(VIRTUAL_DEVICE_ID);
89         assertThat(virtualDevice.getPersistentDeviceId()).isNull();
90         assertThat(virtualDevice.getName()).isNull();
91     }
92 
93     @Test
parcelable_shouldRecreateSuccessfully()94     public void parcelable_shouldRecreateSuccessfully() {
95         VirtualDevice originalDevice =
96                 new VirtualDevice(mVirtualDevice, VIRTUAL_DEVICE_ID, PERSISTENT_ID, DEVICE_NAME,
97                         DISPLAY_NAME);
98         Parcel parcel = Parcel.obtain();
99         originalDevice.writeToParcel(parcel, 0);
100         parcel.setDataPosition(0);
101 
102         VirtualDevice device = VirtualDevice.CREATOR.createFromParcel(parcel);
103         assertThat(device.getDeviceId()).isEqualTo(VIRTUAL_DEVICE_ID);
104         assertThat(device.getPersistentDeviceId()).isEqualTo(PERSISTENT_ID);
105         assertThat(device.getName()).isEqualTo(DEVICE_NAME);
106         assertThat(device.getDisplayName().toString()).isEqualTo(DISPLAY_NAME);
107     }
108 
109     @Test
virtualDevice_getDisplayIds()110     public void virtualDevice_getDisplayIds() throws Exception {
111         VirtualDevice virtualDevice =
112                 new VirtualDevice(
113                         mVirtualDevice, VIRTUAL_DEVICE_ID, /*persistentId=*/null, /*name=*/null);
114 
115         when(mVirtualDevice.getDisplayIds()).thenReturn(new int[0]);
116         assertThat(virtualDevice.getDisplayIds()).hasLength(0);
117 
118         final int[] displayIds = new int[]{7, 18};
119         when(mVirtualDevice.getDisplayIds()).thenReturn(displayIds);
120         assertThat(virtualDevice.getDisplayIds()).isEqualTo(displayIds);
121     }
122 
123     @Test
virtualDevice_hasCustomSensorSupport()124     public void virtualDevice_hasCustomSensorSupport() throws Exception {
125         VirtualDevice virtualDevice =
126                 new VirtualDevice(
127                         mVirtualDevice, VIRTUAL_DEVICE_ID, /*persistentId=*/null, /*name=*/null);
128 
129         when(mVirtualDevice.getDevicePolicy(POLICY_TYPE_SENSORS)).thenReturn(DEVICE_POLICY_DEFAULT);
130         assertThat(virtualDevice.hasCustomSensorSupport()).isFalse();
131 
132         when(mVirtualDevice.getDevicePolicy(POLICY_TYPE_SENSORS)).thenReturn(DEVICE_POLICY_CUSTOM);
133         assertThat(virtualDevice.hasCustomSensorSupport()).isTrue();
134     }
135 
136     @Test
virtualDevice_hasCustomAudioInputSupport()137     public void virtualDevice_hasCustomAudioInputSupport() throws Exception {
138         mSetFlagsRule.enableFlags(android.media.audiopolicy.Flags.FLAG_AUDIO_MIX_TEST_API);
139 
140         VirtualDevice virtualDevice =
141                 new VirtualDevice(
142                         mVirtualDevice, VIRTUAL_DEVICE_ID, /*persistentId=*/null, /*name=*/null);
143 
144         when(mVirtualDevice.getDevicePolicy(POLICY_TYPE_AUDIO)).thenReturn(DEVICE_POLICY_DEFAULT);
145         assertThat(virtualDevice.hasCustomAudioInputSupport()).isFalse();
146 
147         when(mVirtualDevice.getDevicePolicy(POLICY_TYPE_AUDIO)).thenReturn(DEVICE_POLICY_CUSTOM);
148         when(mVirtualDevice.hasCustomAudioInputSupport()).thenReturn(false);
149         assertThat(virtualDevice.hasCustomAudioInputSupport()).isFalse();
150 
151         when(mVirtualDevice.hasCustomAudioInputSupport()).thenReturn(true);
152         assertThat(virtualDevice.hasCustomAudioInputSupport()).isTrue();
153     }
154 
155     @Test
virtualDevice_hasCustomCameraSupport()156     public void virtualDevice_hasCustomCameraSupport() throws Exception {
157         VirtualDevice virtualDevice =
158                 new VirtualDevice(
159                         mVirtualDevice, VIRTUAL_DEVICE_ID, /*persistentId=*/null, /*name=*/null);
160 
161         when(mVirtualDevice.getDevicePolicy(POLICY_TYPE_CAMERA)).thenReturn(DEVICE_POLICY_DEFAULT);
162         assertThat(virtualDevice.hasCustomCameraSupport()).isFalse();
163 
164         when(mVirtualDevice.getDevicePolicy(POLICY_TYPE_CAMERA)).thenReturn(DEVICE_POLICY_CUSTOM);
165         assertThat(virtualDevice.hasCustomCameraSupport()).isTrue();
166     }
167 }
168