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