Fix FakeUserHal issues.

FakeuserHal was not working and this CL fixes two issues. One is
the fake property value's timestamp is by default 0 which cause
the write to property store failed. The second is that areaId needs
to be set to 0 when responding to the client.

Test: atest FakeVehicleHardwareTest
test on gcar_emu
adb shell cmd car_service get-initial-user-info COLD_BOOT
adb shell dumpsys android.hardware.automotive.vehicle.IVehicle/default --set 299896583 -a 1 -i 666 1 11
adb shell cmd car_service get-initial-user-info COLD_BOOT
Bug: 260934188

Change-Id: I61d895a15d21308700849acacf39057b1845430f
This commit is contained in:
Yu Shan 2022-12-01 13:55:10 -08:00
parent c498f7e2ef
commit d078837144
3 changed files with 13 additions and 2 deletions

View file

@ -320,7 +320,11 @@ VhalResult<void> FakeVehicleHardware::setUserHalProp(const VehiclePropValue& val
if (updatedValue != nullptr) {
ALOGI("onSetProperty(): updating property returned by HAL: %s",
updatedValue->toString().c_str());
if (auto writeResult = mServerSidePropStore->writeValue(std::move(result.value()));
// Update timestamp otherwise writeValue might fail because the timestamp is outdated.
updatedValue->timestamp = elapsedRealtimeNano();
if (auto writeResult = mServerSidePropStore->writeValue(
std::move(result.value()),
/*updateStatus=*/true, VehiclePropertyStore::EventMode::ALWAYS);
!writeResult.ok()) {
return StatusError(getErrorCode(writeResult))
<< "failed to write value into property store, error: "

View file

@ -1223,6 +1223,8 @@ TEST_F(FakeVehicleHardwareTest, testSwitchUser) {
ASSERT_EQ(events.size(), static_cast<size_t>(1));
events[0].timestamp = 0;
// The returned event will have area ID 0.
valueToSet.areaId = 0;
ASSERT_EQ(events[0], valueToSet);
// Try to get switch_user again, should return default value.
@ -1277,6 +1279,8 @@ TEST_F(FakeVehicleHardwareTest, testCreateUser) {
auto events = getChangedProperties();
ASSERT_EQ(events.size(), static_cast<size_t>(1));
events[0].timestamp = 0;
// The returned event will have area ID 0.
valueToSet.areaId = 0;
EXPECT_EQ(events[0], valueToSet);
// Try to get create_user again, should return default value.
@ -1330,7 +1334,7 @@ TEST_F(FakeVehicleHardwareTest, testInitialUserInfo) {
ASSERT_EQ(events.size(), static_cast<size_t>(1));
events[0].timestamp = 0;
EXPECT_EQ(events[0], (VehiclePropValue{
.areaId = 1,
.areaId = 0,
.prop = toInt(VehicleProperty::INITIAL_USER_INFO),
.value.int32Values = {3, 1, 11},
}));

View file

@ -328,6 +328,9 @@ FakeUserHal::ValueResultType FakeUserHal::sendUserHalResponse(
<< "invalid action on lshal response: " << response->toString();
}
// Update area ID to 0 since this is a global property (and the area ID was only set to emulate
// the request id behavior).
response->areaId = 0;
ALOGD("updating property to: %s", response->toString().c_str());
return response;
}