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