AudioRoutingPolicyTest.java revision e54ac276796c6535558f8444d882adecd19ce2bd
15c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung/* 25c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * Copyright (C) 2015 The Android Open Source Project 35c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * 45c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * Licensed under the Apache License, Version 2.0 (the "License"); 55c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * you may not use this file except in compliance with the License. 65c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * You may obtain a copy of the License at 75c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * 85c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * http://www.apache.org/licenses/LICENSE-2.0 95c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * 105c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * Unless required by applicable law or agreed to in writing, software 115c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * distributed under the License is distributed on an "AS IS" BASIS, 125c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * See the License for the specific language governing permissions and 145c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung * limitations under the License. 155c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung */ 16e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkpackage com.android.car.test; 175c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 18e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport android.car.test.VehicleHalEmulator.VehicleHalPropertyHandler; 1975623ce0736848d0b27f08c65d843a031b325027Pavel Maltsev 205c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkConsts; 210727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Parkimport com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioContextFlag; 225c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleAudioRoutingPolicyIndex; 235c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePermissionModel; 245c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropAccess; 255c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkConsts.VehiclePropChangeMode; 265c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkConsts.VehicleValueType; 275c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehicleNetworkProto.VehiclePropValue; 285c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehiclePropConfigUtil; 295c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport com.android.car.vehiclenetwork.VehiclePropValueUtil; 30e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport com.android.support.car.test.MockedCarTestBase; 315c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 325c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport java.util.LinkedList; 335c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport java.util.concurrent.Semaphore; 345c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungimport java.util.concurrent.TimeUnit; 355c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 365c7cb266f8900450c2ab41802b079b02f14d707fkeunyoungpublic class AudioRoutingPolicyTest extends MockedCarTestBase { 375c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 385c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung private static final long TIMEOUT_MS = 3000; 395c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 40a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung private final VehicleHalPropertyHandler mAudioRoutingPolicyHandler = 41a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung new VehicleHalPropertyHandler() { 425c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 435c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung @Override 445c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung public void onPropertySet(VehiclePropValue value) { 455c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung handlePropertySetEvent(value); 465c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 475c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 485c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung @Override 495c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung public VehiclePropValue onPropertyGet(VehiclePropValue value) { 505c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung fail("cannot get"); 515c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung return null; 525c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 535c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 545c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung @Override 550727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park public void onPropertySubscribe(int property, float sampleRate, int zones) { 565c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung fail("cannot subscribe"); 575c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 585c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 595c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung @Override 605c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung public void onPropertyUnsubscribe(int property) { 615c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung fail("cannot unsubscribe"); 625c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 635c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung }; 645c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 655c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung private final Semaphore mWaitSemaphore = new Semaphore(0); 665c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung private final LinkedList<VehiclePropValue> mEvents = new LinkedList<VehiclePropValue>(); 675c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 685c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung @Override 695c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung protected void setUp() throws Exception { 705c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung super.setUp(); 715c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 725c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung getVehicleHalEmulator().addProperty( 735c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropConfigUtil.getBuilder( 745c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_ROUTING_POLICY, 755c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropAccess.VEHICLE_PROP_ACCESS_WRITE, 765c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropChangeMode.VEHICLE_PROP_CHANGE_MODE_ON_CHANGE, 775c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleValueType.VEHICLE_VALUE_TYPE_INT32_VEC2, 785c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePermissionModel.VEHICLE_PERMISSION_SYSTEM_APP_ONLY, 795c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 0 /*configFlags*/, 0 /*sampleRateMax*/, 0 /*sampleRateMin*/).build(), 805c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung mAudioRoutingPolicyHandler); 815c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 825c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 835c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung public void testNoHwVaraint() throws Exception { 845c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung getVehicleHalEmulator().removeProperty( 855c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT); 865c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung getVehicleHalEmulator().start(); 875c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung checkPolicy0(); 885c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 895c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 905c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung public void testHwVariant0() throws Exception { 915c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung getVehicleHalEmulator().addStaticProperty( 925c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropConfigUtil.createStaticStringProperty( 935c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT), 945c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropValueUtil.createIntValue( 955c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, 0, 0)); 965c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung getVehicleHalEmulator().start(); 975c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung checkPolicy0(); 985c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 995c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 1005c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung public void testHwVariant1() throws Exception { 1015c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung getVehicleHalEmulator().addStaticProperty( 1025c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropConfigUtil.createStaticStringProperty( 1035c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT), 1045c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropValueUtil.createIntValue( 1055c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleNetworkConsts.VEHICLE_PROPERTY_AUDIO_HW_VARIANT, 1, 0)); 1065c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung getVehicleHalEmulator().start(); 1075c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung checkPolicy1(); 1085c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 1095c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 1105c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung private void checkPolicy0() throws Exception { 1115c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); 1125c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropValue v = mEvents.get(0); 1135c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertEquals(0, v.getInt32Values( 1145c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM)); 1155c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertEquals( 1160727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG | 1170727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG | 1180727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG | 1190727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG | 1200727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG | 1210727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG | 1225672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG | 1235672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND | 1245672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG, 1255c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung v.getInt32Values( 1265c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS) 1275c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung ); 1285c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 1295c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 1305c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung private void checkPolicy1() throws Exception { 131a74b9caa2fb6435f1c01c5e8766b89235c4e3d5akeunyoung // write happens twice. 1325c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); 1335c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertTrue(mWaitSemaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); 1345c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehiclePropValue v = mEvents.get(0); 1355c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertEquals(0, v.getInt32Values( 1365c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM)); 1375c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertEquals( 1380727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_CALL_FLAG | 1390727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_MUSIC_FLAG | 1400727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_UNKNOWN_FLAG, 1415c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung v.getInt32Values( 1425c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS) 1435c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung ); 1445c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung v = mEvents.get(1); 1455c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertEquals(1, v.getInt32Values( 1465c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_STREAM)); 1475c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung assertEquals( 1480727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_ALARM_FLAG | 1490727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NAVIGATION_FLAG | 1500727f9536803bf13e49ff73bd1ed04489b592c56Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_NOTIFICATION_FLAG | 1515672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_VOICE_COMMAND_FLAG | 1525672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SYSTEM_SOUND | 1535672e85bdf82f6a2350afb942dfe17b7c699af87Keun-young Park VehicleAudioContextFlag.VEHICLE_AUDIO_CONTEXT_SAFETY_ALERT_FLAG, 1545c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung v.getInt32Values( 1555c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleAudioRoutingPolicyIndex.VEHICLE_AUDIO_ROUTING_POLICY_INDEX_CONTEXTS) 1565c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung ); 1575c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 1585c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung 1595c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung private void handlePropertySetEvent(VehiclePropValue value) { 1605c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung mEvents.add(value); 1615c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung mWaitSemaphore.release(); 1625c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 1635c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung} 164