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