CarTestService.java revision e54ac276796c6535558f8444d882adecd19ce2bd
11ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung/* 21ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Copyright (C) 2015 The Android Open Source Project 31ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * 41ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Licensed under the Apache License, Version 2.0 (the "License"); 51ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * you may not use this file except in compliance with the License. 61ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * You may obtain a copy of the License at 71ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * 81ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * http://www.apache.org/licenses/LICENSE-2.0 91ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * 101ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Unless required by applicable law or agreed to in writing, software 111ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * distributed under the License is distributed on an "AS IS" BASIS, 121ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * See the License for the specific language governing permissions and 141ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * limitations under the License. 151ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung */ 161ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungpackage com.android.car; 171ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 18e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport android.car.test.CarTestManager; 19e54ac276796c6535558f8444d882adecd19ce2bdKeun-young Parkimport android.car.test.ICarTest; 201ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport android.content.Context; 211ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport android.util.Log; 221ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 231ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport com.android.car.hal.VehicleHal; 241ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport com.android.car.vehiclenetwork.IVehicleNetworkHalMock; 251ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport com.android.car.vehiclenetwork.VehicleNetwork; 261ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport com.android.car.vehiclenetwork.VehiclePropValueParcelable; 271ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 281ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungimport java.io.PrintWriter; 291ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 301ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung/** 311ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * Service to allow testing / mocking vehicle HAL. 321ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * This service uses Vehicle HAL APIs directly (one exception) as vehicle HAL mocking anyway 331ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung * requires accessing that level directly. 341ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung */ 351ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoungpublic class CarTestService extends ICarTest.Stub implements CarServiceBase { 361ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 371ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung private final Context mContext; 381ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung private final VehicleNetwork mVehicleNetwork; 391ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung private final ICarImpl mICarImpl; 404b0212c1b3576f4174c292bbcdd72815584ff075keunyoung private boolean mInMocking = false; 414b0212c1b3576f4174c292bbcdd72815584ff075keunyoung private int mMockingFlags = 0; 421ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 431ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public CarTestService(Context context, ICarImpl carImpl) { 441ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung mContext = context; 451ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung mICarImpl = carImpl; 461ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung mVehicleNetwork = VehicleHal.getInstance().getVehicleNetwork(); 471ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 481ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 491ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung @Override 501ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public void init() { 514b0212c1b3576f4174c292bbcdd72815584ff075keunyoung // nothing to do. 524b0212c1b3576f4174c292bbcdd72815584ff075keunyoung // This service should not reset anything for init / release to maintain mocking. 531ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 541ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 551ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung @Override 561ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public void release() { 574b0212c1b3576f4174c292bbcdd72815584ff075keunyoung // nothing to do 584b0212c1b3576f4174c292bbcdd72815584ff075keunyoung // This service should not reset anything for init / release to maintain mocking. 591ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 601ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 611ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung @Override 621ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public void dump(PrintWriter writer) { 634b0212c1b3576f4174c292bbcdd72815584ff075keunyoung writer.println("*CarTestService*"); 644b0212c1b3576f4174c292bbcdd72815584ff075keunyoung writer.println(" mInMocking" + mInMocking); 651ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 661ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 671ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung @Override 681ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public void injectEvent(VehiclePropValueParcelable value) { 691ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung ICarImpl.assertVehicleHalMockPermission(mContext); 701ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung mVehicleNetwork.injectEvent(value.value); 711ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 721ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 731ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung @Override 744b0212c1b3576f4174c292bbcdd72815584ff075keunyoung public void startMocking(IVehicleNetworkHalMock mock, int flags) { 751ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung ICarImpl.assertVehicleHalMockPermission(mContext); 765c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung try { 775c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung mVehicleNetwork.startMocking(mock); 785c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung VehicleHal.getInstance().startMocking(); 795c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung mICarImpl.startMocking(); 804b0212c1b3576f4174c292bbcdd72815584ff075keunyoung synchronized (this) { 814b0212c1b3576f4174c292bbcdd72815584ff075keunyoung mInMocking = true; 824b0212c1b3576f4174c292bbcdd72815584ff075keunyoung mMockingFlags = flags; 834b0212c1b3576f4174c292bbcdd72815584ff075keunyoung } 845c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } catch (Exception e) { 855c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung Log.w(CarLog.TAG_TEST, "startMocking failed", e); 865c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung throw e; 875c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung } 884b0212c1b3576f4174c292bbcdd72815584ff075keunyoung Log.i(CarLog.TAG_TEST, "start vehicle HAL mocking, flags:0x" + Integer.toHexString(flags)); 891ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 901ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung 911ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung @Override 921ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung public void stopMocking(IVehicleNetworkHalMock mock) { 931ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung ICarImpl.assertVehicleHalMockPermission(mContext); 941ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung mVehicleNetwork.stopMocking(mock); 951ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung VehicleHal.getInstance().stopMocking(); 961ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung mICarImpl.stopMocking(); 974b0212c1b3576f4174c292bbcdd72815584ff075keunyoung synchronized (this) { 984b0212c1b3576f4174c292bbcdd72815584ff075keunyoung mInMocking = false; 994b0212c1b3576f4174c292bbcdd72815584ff075keunyoung mMockingFlags = 0; 1004b0212c1b3576f4174c292bbcdd72815584ff075keunyoung } 1015c7cb266f8900450c2ab41802b079b02f14d707fkeunyoung Log.i(CarLog.TAG_TEST, "stop vehicle HAL mocking"); 1021ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung } 1034b0212c1b3576f4174c292bbcdd72815584ff075keunyoung 1044b0212c1b3576f4174c292bbcdd72815584ff075keunyoung public synchronized boolean isInMocking() { 1054b0212c1b3576f4174c292bbcdd72815584ff075keunyoung return mInMocking; 1064b0212c1b3576f4174c292bbcdd72815584ff075keunyoung } 1074b0212c1b3576f4174c292bbcdd72815584ff075keunyoung 1084b0212c1b3576f4174c292bbcdd72815584ff075keunyoung public synchronized boolean shouldDoRealShutdownInMocking() { 1094b0212c1b3576f4174c292bbcdd72815584ff075keunyoung return (mMockingFlags & CarTestManager.FLAG_MOCKING_REAL_SHUTDOWN) != 0; 1104b0212c1b3576f4174c292bbcdd72815584ff075keunyoung } 1111ab8e18e01d8063821bee0bf641a365224c7e1eekeunyoung} 112