Skip to content

Commit 8cb4c31

Browse files
authored
Add InvalidPreferredSlotId error for use in rot prep_image_update (#398)
1 parent 83fe188 commit 8cb4c31

File tree

3 files changed

+93
-0
lines changed

3 files changed

+93
-0
lines changed

gateway-messages/src/sp_to_mgs.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,6 +1294,7 @@ pub enum UpdateError {
12941294
ImageMismatch,
12951295
SignatureNotValidated,
12961296
VersionNotSupported,
1297+
InvalidPreferredSlotId,
12971298
}
12981299

12991300
impl fmt::Display for UpdateError {
@@ -1353,6 +1354,12 @@ impl fmt::Display for UpdateError {
13531354
Self::InvalidComponent => {
13541355
write!(f, "invalid component for operation")
13551356
}
1357+
Self::InvalidPreferredSlotId => {
1358+
write!(
1359+
f,
1360+
"updating a bootloader preferred slot is not permitted"
1361+
)
1362+
}
13561363
}
13571364
}
13581365
}

gateway-messages/tests/versioning/v19.rs

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
//! tests can be removed as we will stop supporting $VERSION.
1717
1818
use super::assert_serialized;
19+
use gateway_messages::ImageError;
20+
use gateway_messages::SpStateV3;
21+
use gateway_messages::UpdateError;
1922
use gateway_messages::{HfError, MgsRequest, SpError, SpResponse};
2023

2124
#[test]
@@ -60,3 +63,84 @@ fn read_host_flash() {
6063
assert_serialized(&[38, i as u8], &request);
6164
}
6265
}
66+
67+
#[test]
68+
fn sp_response() {
69+
let response = SpResponse::SpStateV3(SpStateV3 {
70+
hubris_archive_id: [1, 2, 3, 4, 5, 6, 7, 8],
71+
serial_number: [
72+
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
73+
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
74+
],
75+
model: [
76+
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
77+
58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
78+
],
79+
revision: 0xf0f1f2f3,
80+
base_mac_address: [73, 74, 75, 76, 77, 78],
81+
power_state: gateway_messages::PowerState::A0,
82+
});
83+
84+
#[rustfmt::skip]
85+
let expected = vec![
86+
44, // SpStateV3
87+
1, 2, 3, 4, 5, 6, 7, 8, // hubris_archive_id
88+
89+
9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
90+
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
91+
39, 40, // serial_number
92+
93+
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
94+
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
95+
71, 72, // model
96+
97+
0xf3, 0xf2, 0xf1, 0xf0, // revision
98+
73, 74, 75, 76, 77, 78, // base_mac_address
99+
0, // power_state
100+
];
101+
102+
assert_serialized(&expected, &response);
103+
}
104+
105+
#[test]
106+
fn host_request() {
107+
let request = MgsRequest::VersionedRotBootInfo { version: 3 };
108+
109+
#[rustfmt::skip]
110+
let expected = vec![
111+
45, // VersionedRotBootInfo
112+
3, // version
113+
];
114+
115+
assert_serialized(&expected, &request);
116+
}
117+
118+
#[test]
119+
fn error_enums() {
120+
let response: [ImageError; 13] = [
121+
ImageError::Unchecked,
122+
ImageError::FirstPageErased,
123+
ImageError::PartiallyProgrammed,
124+
ImageError::InvalidLength,
125+
ImageError::HeaderNotProgrammed,
126+
ImageError::BootloaderTooSmall,
127+
ImageError::BadMagic,
128+
ImageError::HeaderImageSize,
129+
ImageError::UnalignedLength,
130+
ImageError::UnsupportedType,
131+
ImageError::ResetVectorNotThumb2,
132+
ImageError::ResetVector,
133+
ImageError::Signature,
134+
];
135+
let expected = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
136+
assert_serialized(&expected, &response);
137+
138+
let response: [UpdateError; 4] = [
139+
UpdateError::BlockOutOfOrder,
140+
UpdateError::InvalidComponent,
141+
UpdateError::InvalidSlotIdForOperation,
142+
UpdateError::InvalidPreferredSlotId,
143+
];
144+
let expected = vec![27, 28, 29, 34];
145+
assert_serialized(&expected, &response);
146+
}

gateway-sp-comms/src/error.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ pub enum UpdateError {
116116
InvalidComponent,
117117
#[error("an image was not found")]
118118
ImageNotFound,
119+
#[error("updating a bootloader preferred slot is not permitted")]
120+
InvalidPreferredSlotId,
119121
}
120122

121123
#[derive(Debug, thiserror::Error, SlogInlineError)]

0 commit comments

Comments
 (0)