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