blob: e128b192a16c00653ac4fb4251efdcae6515c022 [file] [log] [blame]
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.car.hal;
import android.car.Car;
import android.car.VehicleHvacFanDirection;
import android.car.VehiclePropertyIds;
import android.hardware.automotive.vehicle.V2_0.VehicleGear;
import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
import android.hardware.automotive.vehicle.V2_0.VehicleUnit;
import android.hardware.automotive.vehicle.V2_0.VehicleVendorPermission;
import android.os.SystemClock;
import android.util.Log;
import androidx.test.runner.AndroidJUnit4;
import com.android.car.vehiclehal.VehiclePropValueBuilder;
import com.google.common.truth.Truth;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import java.util.ArrayList;
import java.util.List;
@RunWith(AndroidJUnit4.class)
public class PropertyHalServiceIdsTest {
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
private PropertyHalServiceIds mPropertyHalServiceIds;
private static final String TAG = PropertyHalServiceIdsTest.class.getSimpleName();
private static final int VENDOR_PROPERTY_1 = 0x21e01111;
private static final int VENDOR_PROPERTY_2 = 0x21e01112;
private static final int VENDOR_PROPERTY_3 = 0x21e01113;
private static final int VENDOR_PROPERTY_4 = 0x21e01114;
private static final int[] VENDOR_PROPERTY_IDS = {
VENDOR_PROPERTY_1, VENDOR_PROPERTY_2, VENDOR_PROPERTY_3, VENDOR_PROPERTY_4};
private static final int[] SYSTEM_PROPERTY_IDS = {VehiclePropertyIds.ENGINE_OIL_LEVEL,
VehiclePropertyIds.CURRENT_GEAR, VehiclePropertyIds.NIGHT_MODE,
VehiclePropertyIds.HVAC_FAN_SPEED, VehiclePropertyIds.DOOR_LOCK};
private static final List<Integer> CONFIG_ARRAY = new ArrayList<>();
private static final List<Integer> CONFIG_ARRAY_INVALID = new ArrayList<>();
//payload test
private static final VehiclePropValue GEAR_WITH_VALID_VALUE =
VehiclePropValueBuilder.newBuilder(VehicleProperty.GEAR_SELECTION)
.addIntValue(VehicleGear.GEAR_DRIVE)
.setTimestamp(SystemClock.elapsedRealtimeNanos()).build();
private static final VehiclePropValue GEAR_WITH_EXTRA_VALUE =
VehiclePropValueBuilder.newBuilder(VehicleProperty.GEAR_SELECTION)
.addIntValue(VehicleGear.GEAR_DRIVE)
.addIntValue(VehicleGear.GEAR_1)
.setTimestamp(SystemClock.elapsedRealtimeNanos()).build();
private static final VehiclePropValue GEAR_WITH_INVALID_VALUE =
VehiclePropValueBuilder.newBuilder(VehicleProperty.GEAR_SELECTION)
.addIntValue(VehicleUnit.KILOPASCAL)
.setTimestamp(SystemClock.elapsedRealtimeNanos()).build();
private static final VehiclePropValue GEAR_WITH_INVALID_TYPE_VALUE =
VehiclePropValueBuilder.newBuilder(VehicleProperty.GEAR_SELECTION)
.addFloatValue(1.0f)
.setTimestamp(SystemClock.elapsedRealtimeNanos()).build();
private static final VehiclePropValue HVAC_FAN_DIRECTIONS_VALID =
VehiclePropValueBuilder.newBuilder(VehicleProperty.HVAC_FAN_DIRECTION)
.addIntValue(VehicleHvacFanDirection.FACE | VehicleHvacFanDirection.FLOOR)
.setTimestamp(SystemClock.elapsedRealtimeNanos()).build();
private static final VehiclePropValue HVAC_FAN_DIRECTIONS_INVALID =
VehiclePropValueBuilder.newBuilder(VehicleProperty.HVAC_FAN_DIRECTION)
.addIntValue(VehicleHvacFanDirection.FACE | 0x100)
.setTimestamp(SystemClock.elapsedRealtimeNanos()).build();
@Before
public void setUp() {
mPropertyHalServiceIds = new PropertyHalServiceIds();
// set up read permission and write permission to VENDOR_PROPERTY_1
CONFIG_ARRAY.add(VENDOR_PROPERTY_1);
CONFIG_ARRAY.add(VehicleVendorPermission.PERMISSION_DEFAULT);
CONFIG_ARRAY.add(VehicleVendorPermission.PERMISSION_NOT_ACCESSIBLE);
// set up read permission and write permission to VENDOR_PROPERTY_2
CONFIG_ARRAY.add(VENDOR_PROPERTY_2);
CONFIG_ARRAY.add(VehicleVendorPermission.PERMISSION_GET_VENDOR_CATEGORY_ENGINE);
CONFIG_ARRAY.add(VehicleVendorPermission.PERMISSION_SET_VENDOR_CATEGORY_ENGINE);
// set up read permission and write permission to VENDOR_PROPERTY_3
CONFIG_ARRAY.add(VENDOR_PROPERTY_3);
CONFIG_ARRAY.add(VehicleVendorPermission.PERMISSION_GET_VENDOR_CATEGORY_INFO);
CONFIG_ARRAY.add(VehicleVendorPermission.PERMISSION_DEFAULT);
// set a invalid config
CONFIG_ARRAY_INVALID.add(VehiclePropertyIds.CURRENT_GEAR);
CONFIG_ARRAY_INVALID.add(VehicleVendorPermission.PERMISSION_GET_VENDOR_CATEGORY_ENGINE);
CONFIG_ARRAY_INVALID.add(VehicleVendorPermission.PERMISSION_SET_VENDOR_CATEGORY_ENGINE);
}
/**
* Test {@link PropertyHalServiceIds#getReadPermission(int)}
* and {@link PropertyHalServiceIds#getWritePermission(int)} for system properties
*/
@Test
public void checkPermissionForSystemProperty() {
Assert.assertEquals(Car.PERMISSION_CAR_ENGINE_DETAILED,
mPropertyHalServiceIds.getReadPermission(VehiclePropertyIds.ENGINE_OIL_LEVEL));
Assert.assertNull(
mPropertyHalServiceIds.getWritePermission(VehiclePropertyIds.ENGINE_OIL_LEVEL));
Assert.assertEquals(Car.PERMISSION_CONTROL_CAR_CLIMATE,
mPropertyHalServiceIds.getReadPermission(VehiclePropertyIds.HVAC_FAN_SPEED));
Assert.assertEquals(Car.PERMISSION_CONTROL_CAR_CLIMATE,
mPropertyHalServiceIds.getWritePermission(VehiclePropertyIds.HVAC_FAN_SPEED));
}
/**
* Test {@link PropertyHalServiceIds#customizeVendorPermission(List)}
*/
@Test
public void checkPermissionForVendorProperty() {
// test insert a valid config
mPropertyHalServiceIds.customizeVendorPermission(CONFIG_ARRAY);
Assert.assertEquals(Car.PERMISSION_VENDOR_EXTENSION,
mPropertyHalServiceIds.getReadPermission(VENDOR_PROPERTY_1));
Assert.assertNull(mPropertyHalServiceIds.getWritePermission(VENDOR_PROPERTY_1));
Assert.assertEquals(android.car.hardware.property
.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_ENGINE,
mPropertyHalServiceIds.getReadPermission(VENDOR_PROPERTY_2));
Assert.assertEquals(android.car.hardware.property
.VehicleVendorPermission.PERMISSION_SET_CAR_VENDOR_CATEGORY_ENGINE,
mPropertyHalServiceIds.getWritePermission(VENDOR_PROPERTY_2));
Assert.assertEquals(android.car.hardware.property
.VehicleVendorPermission.PERMISSION_GET_CAR_VENDOR_CATEGORY_INFO,
mPropertyHalServiceIds.getReadPermission(VENDOR_PROPERTY_3));
Assert.assertEquals(Car.PERMISSION_VENDOR_EXTENSION,
mPropertyHalServiceIds.getWritePermission(VENDOR_PROPERTY_3));
Assert.assertEquals(Car.PERMISSION_VENDOR_EXTENSION,
mPropertyHalServiceIds.getReadPermission(VENDOR_PROPERTY_4));
Assert.assertEquals(Car.PERMISSION_VENDOR_EXTENSION,
mPropertyHalServiceIds.getWritePermission(VENDOR_PROPERTY_4));
// test insert invalid config
try {
mPropertyHalServiceIds.customizeVendorPermission(CONFIG_ARRAY_INVALID);
Assert.fail("Insert system properties with vendor permissions");
} catch (IllegalArgumentException e) {
Log.v(TAG, e.getMessage());
}
}
/**
* Test {@link PropertyHalServiceIds#isSupportedProperty(int)}
*/
@Test
public void checkVendorPropertyId() {
for (int vendorProp : VENDOR_PROPERTY_IDS) {
Assert.assertTrue(mPropertyHalServiceIds.isSupportedProperty(vendorProp));
}
for (int systemProp : SYSTEM_PROPERTY_IDS) {
Assert.assertTrue(mPropertyHalServiceIds.isSupportedProperty(systemProp));
}
}
/**
* Test {@link PropertyHalServiceIds#checkPayload(VehiclePropValue)}
*/
@Test
public void testPayload() {
Truth.assertThat(mPropertyHalServiceIds.checkPayload(GEAR_WITH_VALID_VALUE)).isTrue();
Truth.assertThat(mPropertyHalServiceIds.checkPayload(GEAR_WITH_EXTRA_VALUE)).isFalse();
Truth.assertThat(mPropertyHalServiceIds.checkPayload(GEAR_WITH_INVALID_VALUE)).isFalse();
Truth.assertThat(mPropertyHalServiceIds.checkPayload(GEAR_WITH_INVALID_TYPE_VALUE))
.isFalse();
Truth.assertThat(mPropertyHalServiceIds.checkPayload(HVAC_FAN_DIRECTIONS_VALID)).isTrue();
Truth.assertThat(mPropertyHalServiceIds.checkPayload(HVAC_FAN_DIRECTIONS_INVALID))
.isFalse();
}
}