summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorziyiw <ziyiw@google.com>2022-05-12 18:01:22 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-05-12 18:01:22 +0000
commitc57e1f7c025f23fd87abe0627d2735570cb2b2e1 (patch)
tree32e3d1aa8a97e39e9d18c9446b2c593b90d8f139
parent2e80b87ea2ef5a06c21ac1d79ed8608243a4207a (diff)
parentd789afda65c307ac89322328325fe7dc69de2edd (diff)
downloaduwb-android13-qpr2-s7-release.tar.gz
Fuzz remaining UciNotifications and send them from HAL to Uci layer. am: efe3409fc6 am: d789afda65android-13.0.0_r83android-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android-13.0.0_r56android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32android13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-releaseandroid13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-releaseandroid13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-release
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/uwb/+/18231392 Change-Id: I4e5f3aa99867ad89d9b9544a8f51c70225d7f601 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--src/fuzz/fuzzer.rs255
1 files changed, 244 insertions, 11 deletions
diff --git a/src/fuzz/fuzzer.rs b/src/fuzz/fuzzer.rs
index b30e992..e97d07f 100644
--- a/src/fuzz/fuzzer.rs
+++ b/src/fuzz/fuzzer.rs
@@ -11,16 +11,20 @@ use std::sync::Arc;
use tokio::sync::mpsc;
use uwb_uci_packets::{
AndroidGetPowerStatsCmdBuilder, AndroidGetPowerStatsRspBuilder,
- AndroidSetCountryCodeCmdBuilder, AndroidSetCountryCodeRspBuilder, DeviceResetRspBuilder,
- DeviceState, DeviceStatusNtfBuilder, GenericErrorBuilder, GetCapsInfoCmdBuilder,
- GetCapsInfoRspBuilder, GetDeviceInfoCmdBuilder, GetDeviceInfoRspBuilder, PowerStats,
- RangeStartCmdBuilder, RangeStartRspBuilder, RangeStopCmdBuilder, RangeStopRspBuilder,
- ReasonCode, SessionDeinitCmdBuilder, SessionDeinitRspBuilder, SessionGetAppConfigCmdBuilder,
+ AndroidSetCountryCodeCmdBuilder, AndroidSetCountryCodeRspBuilder, ControleeStatus,
+ DeviceResetRspBuilder, DeviceState, DeviceStatusNtfBuilder,
+ ExtendedAddressTwoWayRangingMeasurement, ExtendedMacTwoWayRangeDataNtfBuilder,
+ GenericErrorBuilder, GetCapsInfoCmdBuilder, GetCapsInfoRspBuilder, GetDeviceInfoCmdBuilder,
+ GetDeviceInfoRspBuilder, MulticastUpdateStatusCode, PowerStats, RangeStartCmdBuilder,
+ RangeStartRspBuilder, RangeStopCmdBuilder, RangeStopRspBuilder, ReasonCode,
+ SessionDeinitCmdBuilder, SessionDeinitRspBuilder, SessionGetAppConfigCmdBuilder,
SessionGetAppConfigRspBuilder, SessionGetCountCmdBuilder, SessionGetCountRspBuilder,
SessionGetStateCmdBuilder, SessionGetStateRspBuilder, SessionInitCmdBuilder,
SessionInitRspBuilder, SessionSetAppConfigRspBuilder, SessionState, SessionStatusNtfBuilder,
- SessionType, SessionUpdateControllerMulticastListRspBuilder, StatusCode, UciCommandPacket,
- UciPacketChild, UciPacketPacket, UciVendor_9_ResponseBuilder,
+ SessionType, SessionUpdateControllerMulticastListNtfBuilder,
+ SessionUpdateControllerMulticastListRspBuilder, ShortAddressTwoWayRangingMeasurement,
+ ShortMacTwoWayRangeDataNtfBuilder, StatusCode, UciCommandPacket, UciPacketChild,
+ UciPacketPacket, UciVendor_9_ResponseBuilder,
};
use uwb_uci_rust::adaptation::mock_adaptation::MockUwbAdaptation;
use uwb_uci_rust::error::UwbErr;
@@ -31,9 +35,127 @@ use uwb_uci_rust::uci::{
#[derive(Debug, Clone, Arbitrary)]
enum UciNotification {
- GenericError { status: u8 },
- DeviceStatusNtf { device_state: u8 },
- SessionStatusNtf { session_id: u32, session_state: u8, reason_code: u8 },
+ GenericError {
+ status: u8,
+ },
+ DeviceStatusNtf {
+ device_state: u8,
+ },
+ SessionStatusNtf {
+ session_id: u32,
+ session_state: u8,
+ reason_code: u8,
+ },
+ ShortMacTwoWayRangeDataNtf {
+ sequence_number: u32,
+ session_id: u32,
+ rcr_indicator: u8,
+ current_ranging_interval: u32,
+ two_way_ranging_measurements: Vec<ShortAddressMeasurement>,
+ },
+ ExtendedMacTwoWayRangeDataNtf {
+ sequence_number: u32,
+ session_id: u32,
+ rcr_indicator: u8,
+ current_ranging_interval: u32,
+ two_way_ranging_measurements: Vec<ExtendedAddressMeasurement>,
+ },
+ SessionUpdateControllerMulticastListNtf {
+ session_id: u32,
+ remaining_multicast_list_size: u8,
+ controlee_status: Vec<MockControleeStatus>,
+ },
+}
+
+#[derive(Debug, Clone, Arbitrary)]
+struct ShortAddressMeasurement {
+ mac_address: u16,
+ status: u8,
+ nlos: u8,
+ distance: u16,
+ aoa_azimuth: u16,
+ aoa_azimuth_fom: u8,
+ aoa_elevation: u16,
+ aoa_elevation_fom: u8,
+ aoa_destination_azimuth: u16,
+ aoa_destination_azimuth_fom: u8,
+ aoa_destination_elevation: u16,
+ aoa_destination_elevation_fom: u8,
+ slot_index: u8,
+}
+
+impl ShortAddressMeasurement {
+ fn convert(&self) -> Result<ShortAddressTwoWayRangingMeasurement, UwbErr> {
+ Ok(ShortAddressTwoWayRangingMeasurement {
+ mac_address: self.mac_address,
+ status: StatusCode::from_u8(self.status).ok_or(UwbErr::InvalidArgs)?,
+ nlos: self.nlos,
+ distance: self.distance,
+ aoa_azimuth: self.aoa_azimuth,
+ aoa_azimuth_fom: self.aoa_azimuth_fom,
+ aoa_elevation: self.aoa_elevation,
+ aoa_elevation_fom: self.aoa_elevation_fom,
+ aoa_destination_azimuth: self.aoa_destination_azimuth,
+ aoa_destination_azimuth_fom: self.aoa_destination_azimuth_fom,
+ aoa_destination_elevation: self.aoa_destination_elevation,
+ aoa_destination_elevation_fom: self.aoa_destination_elevation_fom,
+ slot_index: self.slot_index,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Arbitrary)]
+struct ExtendedAddressMeasurement {
+ mac_address: u64,
+ status: u8,
+ nlos: u8,
+ distance: u16,
+ aoa_azimuth: u16,
+ aoa_azimuth_fom: u8,
+ aoa_elevation: u16,
+ aoa_elevation_fom: u8,
+ aoa_destination_azimuth: u16,
+ aoa_destination_azimuth_fom: u8,
+ aoa_destination_elevation: u16,
+ aoa_destination_elevation_fom: u8,
+ slot_index: u8,
+}
+
+impl ExtendedAddressMeasurement {
+ fn convert(&self) -> Result<ExtendedAddressTwoWayRangingMeasurement, UwbErr> {
+ Ok(ExtendedAddressTwoWayRangingMeasurement {
+ mac_address: self.mac_address,
+ status: StatusCode::from_u8(self.status).ok_or(UwbErr::InvalidArgs)?,
+ nlos: self.nlos,
+ distance: self.distance,
+ aoa_azimuth: self.aoa_azimuth,
+ aoa_azimuth_fom: self.aoa_azimuth_fom,
+ aoa_elevation: self.aoa_elevation,
+ aoa_elevation_fom: self.aoa_elevation_fom,
+ aoa_destination_azimuth: self.aoa_destination_azimuth,
+ aoa_destination_azimuth_fom: self.aoa_destination_azimuth_fom,
+ aoa_destination_elevation: self.aoa_destination_elevation,
+ aoa_destination_elevation_fom: self.aoa_destination_elevation_fom,
+ slot_index: self.slot_index,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Arbitrary)]
+struct MockControleeStatus {
+ mac_address: u16,
+ subsession_id: u32,
+ status: u8,
+}
+
+impl MockControleeStatus {
+ fn convert(&self) -> Result<ControleeStatus, UwbErr> {
+ Ok(ControleeStatus {
+ mac_address: self.mac_address,
+ subsession_id: self.subsession_id,
+ status: MulticastUpdateStatusCode::from_u8(self.status).ok_or(UwbErr::InvalidArgs)?,
+ })
+ }
}
#[derive(Debug, Clone, Arbitrary)]
@@ -88,7 +210,7 @@ fn create_dispatcher_with_mock_adaptation(
mock_event_manager.expect_device_status_notification_received(Ok(()))
}
UciNotification::SessionStatusNtf {
- session_id: _session_ids,
+ session_id: _session_id,
session_state,
reason_code,
} => {
@@ -102,6 +224,55 @@ fn create_dispatcher_with_mock_adaptation(
}
mock_event_manager.expect_session_status_notification_received(Ok(()))
}
+ UciNotification::ShortMacTwoWayRangeDataNtf {
+ sequence_number: _sequence_number,
+ session_id: _session_id,
+ rcr_indicator: _rcr_indicator,
+ current_ranging_interval: _current_ranging_interval,
+ two_way_ranging_measurements,
+ } => {
+ for measurement in two_way_ranging_measurements.iter() {
+ if StatusCode::from_u8(measurement.status).is_none() {
+ mock_adaptation.clear_expected_calls();
+ mock_event_manager.clear_expected_calls();
+ return Err(UwbErr::InvalidArgs);
+ }
+ }
+ mock_event_manager.expect_short_range_data_notification_received(Ok(()))
+ }
+ UciNotification::ExtendedMacTwoWayRangeDataNtf {
+ sequence_number: _sequence_number,
+ session_id: _session_id,
+ rcr_indicator: _rcr_indicator,
+ current_ranging_interval: _current_ranging_interval,
+ two_way_ranging_measurements,
+ } => {
+ for measurement in two_way_ranging_measurements.iter() {
+ if StatusCode::from_u8(measurement.status).is_none() {
+ mock_adaptation.clear_expected_calls();
+ mock_event_manager.clear_expected_calls();
+ return Err(UwbErr::InvalidArgs);
+ }
+ }
+ mock_event_manager.expect_extended_range_data_notification_received(Ok(()))
+ }
+ UciNotification::SessionUpdateControllerMulticastListNtf {
+ session_id: _session_id,
+ remaining_multicast_list_size: _remaining_multicast_list_size,
+ controlee_status,
+ } => {
+ for status in controlee_status.iter() {
+ if MulticastUpdateStatusCode::from_u8(status.status).is_none() {
+ mock_adaptation.clear_expected_calls();
+ mock_event_manager.clear_expected_calls();
+ return Err(UwbErr::InvalidArgs);
+ }
+ }
+ mock_event_manager
+ .expect_session_update_controller_multicast_list_notification_received(Ok(
+ (),
+ ))
+ }
},
}
}
@@ -322,6 +493,68 @@ fn consume_command(msgs: Vec<Command>) -> Result<(), UwbErr> {
}
.build(),
),
+ UciNotification::ShortMacTwoWayRangeDataNtf {
+ sequence_number,
+ session_id,
+ rcr_indicator,
+ current_ranging_interval,
+ two_way_ranging_measurements,
+ } => {
+ let mut measurements = Vec::new();
+ for measurement in two_way_ranging_measurements.iter() {
+ measurements.push(measurement.convert()?);
+ }
+ uci_hrcv::UciNotification::ShortMacTwoWayRangeDataNtf(
+ ShortMacTwoWayRangeDataNtfBuilder {
+ sequence_number,
+ session_id,
+ rcr_indicator,
+ current_ranging_interval,
+ two_way_ranging_measurements: measurements,
+ }
+ .build(),
+ )
+ }
+ UciNotification::ExtendedMacTwoWayRangeDataNtf {
+ sequence_number,
+ session_id,
+ rcr_indicator,
+ current_ranging_interval,
+ two_way_ranging_measurements,
+ } => {
+ let mut measurements = Vec::new();
+ for measurement in two_way_ranging_measurements.iter() {
+ measurements.push(measurement.convert()?);
+ }
+ uci_hrcv::UciNotification::ExtendedMacTwoWayRangeDataNtf(
+ ExtendedMacTwoWayRangeDataNtfBuilder {
+ sequence_number,
+ session_id,
+ rcr_indicator,
+ current_ranging_interval,
+ two_way_ranging_measurements: measurements,
+ }
+ .build(),
+ )
+ }
+ UciNotification::SessionUpdateControllerMulticastListNtf {
+ session_id,
+ remaining_multicast_list_size,
+ controlee_status,
+ } => {
+ let mut status_vec = Vec::new();
+ for status in controlee_status.iter() {
+ status_vec.push(status.convert()?);
+ }
+ uci_hrcv::UciNotification::SessionUpdateControllerMulticastListNtf(
+ SessionUpdateControllerMulticastListNtfBuilder {
+ session_id,
+ remaining_multicast_list_size,
+ controlee_status: status_vec,
+ }
+ .build(),
+ )
+ }
};
rsp_sender
.send(HalCallback::UciNtf(evt))