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