AudioRoutingPolicyTest.java revision 3057ebd67bdbeaee67f132c6f0004d04d8943dfd
1/*
2 * Copyright (C) 2015 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 */
16package com.android.car.test;
17
18import android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler;
19import android.test.suitebuilder.annotation.SmallTest;
20
21import com.android.car.vehiclenetwork.VehicleNetworkConsts;
22import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag;
23import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioRoutingPolicyIndex;
24import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel;
25import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess;
26import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode;
27import com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType;
28import com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue;
29import com.android.car.vehiclenetwork.VehiclePropConfigUtil;
30import com.android.car.vehiclenetwork.VehiclePropValueUtil;
31
32import java.util.LinkedList;
33import java.util.concurrent.Semaphore;
34import java.util.concurrent.TimeUnit;
35
36@SmallTest
37public class AudioRoutingPolicyTest extends MockedCarTestBase {
38
39    private static final long TIMEOUT_MS = 3000;
40
41    private final VehicleHalPropertyHandler mAudioRoutingPolicyHandler =
42            new VehicleHalPropertyHandler() {
43
44        @Override
45        public void onPropertySet(VehiclePropValue value) {
46            handlePropertySetEvent(value);
47        }
48
49        @Override
50        public VehiclePropValue onPropertyGet(VehiclePropValue value) {
51            fail("cannot get");
52            return null;
53        }
54
55        @Override
56        public void onPropertySubscribe(int property, float sampleRate, int zones) {
57            fail("cannot subscribe");
58        }
59
60        @Override
61        public void onPropertyUnsubscribe(int property) {
62            fail("cannot unsubscribe");
63        }
64    };
65
66    private final Semaphore mWaitSemaphore = new Semaphore(0);
67    private final LinkedList<VehiclePropValue> mEvents = new LinkedList<VehiclePropValue>();
68
69    @Override
70    protected void setUp() throws Exception {
71        super.setUp();
72
73        getVehicleHalEmulator().addProperty(
74                VehiclePropConfigUtil.getBuilder(
75                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY,
76                        VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE,
77                        VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE,
78                        VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2,
79                        VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY,
80                        0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(),
81                mAudioRoutingPolicyHandler);
82    }
83
84    public void testNoHwVaraint() throws Exception {
85        getVehicleHalEmulator().removeProperty(
86                VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT);
87        getVehicleHalEmulator().start();
88        checkPolicy0();
89    }
90
91    public void testHwVariant0() throws Exception {
92        getVehicleHalEmulator().addStaticProperty(
93                VehiclePropConfigUtil.createStaticStringProperty(
94                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
95                VehiclePropValueUtil.createIntValue(
96                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, 0, 0));
97        getVehicleHalEmulator().start();
98        checkPolicy0();
99    }
100
101    public void testHwVariant1() throws Exception {
102        getVehicleHalEmulator().addStaticProperty(
103                VehiclePropConfigUtil.createStaticStringProperty(
104                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT),
105                VehiclePropValueUtil.createIntValue(
106                        VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, 1, 0));
107        getVehicleHalEmulator().start();
108        checkPolicy1();
109    }
110
111    private void checkPolicy0() throws Exception {
112        assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
113        VehiclePropValue v = mEvents.get(0);
114        assertEquals(0, v.getInt32Values(
115                VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM));
116        assertEquals(
117                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG |
118                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG |
119                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
120                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG |
121                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG |
122                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG |
123                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG |
124                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG |
125                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG |
126                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG,
127                v.getInt32Values(
128                        VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS)
129                        );
130    }
131
132    private void checkPolicy1() throws Exception {
133        // write happens twice.
134        assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
135        assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
136        VehiclePropValue v = mEvents.get(0);
137        assertEquals(0, v.getInt32Values(
138                VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM));
139        assertEquals(
140                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG |
141                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG |
142                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_RADIO_FLAG |
143                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG,
144                v.getInt32Values(
145                        VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS)
146                        );
147        v = mEvents.get(1);
148        assertEquals(1, v.getInt32Values(
149                VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM));
150        assertEquals(
151                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG |
152                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG |
153                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG |
154                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG |
155                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND_FLAG |
156                VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG,
157                v.getInt32Values(
158                        VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS)
159                        );
160    }
161
162    private void handlePropertySetEvent(VehiclePropValue value) {
163        mEvents.add(value);
164        mWaitSemaphore.release();
165    }
166}
167