Skip to content

Commit 270d432

Browse files
committed
use shared ereport parsing logic in test infra
1 parent 4e138cb commit 270d432

File tree

3 files changed

+36
-26
lines changed

3 files changed

+36
-26
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nexus/fm/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ omicron-workspace-hack.workspace = true
2525
[dev-dependencies]
2626
omicron-test-utils.workspace = true
2727
nexus-reconfigurator-planning.workspace = true
28+
ereport-types.workspace = true

nexus/fm/src/test_util.rs

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use omicron_uuid_kinds::EreporterRestartUuid;
1414
use omicron_uuid_kinds::OmicronZoneKind;
1515
use omicron_uuid_kinds::OmicronZoneUuid;
1616
use rand::rngs::StdRng;
17+
use slog::Logger;
1718
use typed_rng::TypedUuidRng;
1819

1920
pub struct FmTest {
@@ -28,29 +29,34 @@ impl FmTest {
2829
let logctx = dev::test_setup_log(test_name);
2930
let example_system_builder =
3031
example::ExampleSystemBuilder::new(&logctx.log, test_name);
32+
let reporters = SimReporters::new(
33+
test_name,
34+
logctx.log.new(slog::o!("component" => "sim-reporters")),
35+
);
3136
Self {
3237
logctx,
33-
reporters: SimReporters::new(test_name),
38+
reporters,
3439
sitrep_rng: SitrepBuilderRng::from_seed(test_name),
3540
system_builder: example_system_builder,
3641
}
3742
}
3843
}
3944

4045
pub struct SimReporters {
46+
log: slog::Logger,
4147
parent: StdRng,
4248
collector_id_rng: TypedUuidRng<OmicronZoneKind>,
4349
}
4450

4551
impl SimReporters {
46-
fn new(test_name: &str) -> Self {
52+
fn new(test_name: &str, log: slog::Logger) -> Self {
4753
let mut parent = typed_rng::from_seed(test_name, "sim-reporters");
4854
// TODO(eliza): would be more realistic to pick something from the
4955
// example system's omicron zones, but these UUIDs are only used for
5056
// debugging purposes...
5157
let collector_id_rng =
5258
TypedUuidRng::from_parent_rng(&mut parent, "collector-ids");
53-
Self { parent, collector_id_rng }
59+
Self { parent, collector_id_rng, log }
5460
}
5561

5662
pub fn reporter(&mut self, reporter: Reporter) -> SimReporter {
@@ -66,6 +72,7 @@ impl SimReporters {
6672
ena: Ena(0x1),
6773
restart_id_rng,
6874
collector_id,
75+
log: self.log.new(slog::o!("reporter" => reporter.to_string())),
6976
}
7077
}
7178
}
@@ -80,6 +87,8 @@ pub struct SimReporter {
8087
// to each reporter...but the DEs don't actually care who collected the
8188
// ereport, and we just need something to put in there.
8289
collector_id: OmicronZoneUuid,
90+
91+
log: slog::Logger,
8392
}
8493

8594
impl SimReporter {
@@ -98,10 +107,11 @@ impl SimReporter {
98107
pub fn mk_ereport(
99108
&mut self,
100109
now: chrono::DateTime<Utc>,
101-
json: serde_json::Value,
110+
json: serde_json::Map<String, serde_json::Value>,
102111
) -> Ereport {
103112
self.ena.0 += 1;
104113
mk_ereport(
114+
&self.log,
105115
self.reporter,
106116
EreportId { ena: self.ena, restart_id: self.restart_id },
107117
self.collector_id,
@@ -117,19 +127,23 @@ impl SimReporter {
117127
}
118128

119129
pub fn mk_ereport(
130+
log: &slog::Logger,
120131
reporter: Reporter,
121132
id: EreportId,
122133
collector_id: OmicronZoneUuid,
123134
time_collected: chrono::DateTime<Utc>,
124-
json: serde_json::Value,
135+
json: serde_json::Map<String, serde_json::Value>,
125136
) -> Ereport {
126-
let (serial_number, part_number) = match reporter {
137+
let data = match reporter {
127138
Reporter::Sp { .. } => {
128-
let part_number =
129-
json["baseboard_part_number"].as_str().map(ToOwned::to_owned);
130-
let serial_number =
131-
json["baseboard_serial_number"].as_str().map(ToOwned::to_owned);
132-
(serial_number, part_number)
139+
let raw = ereport_types::Ereport { ena: id.ena, data: json };
140+
EreportData::from_sp_ereport(
141+
log,
142+
id.restart_id,
143+
raw,
144+
time_collected,
145+
collector_id,
146+
)
133147
}
134148
Reporter::HostOs { .. } => {
135149
todo!(
@@ -139,19 +153,13 @@ pub fn mk_ereport(
139153
);
140154
}
141155
};
142-
Ereport {
143-
reporter,
144-
data: EreportData {
145-
id,
146-
collector_id,
147-
time_collected,
148-
class: json["class"]
149-
.as_str()
150-
.or_else(|| json["k"].as_str())
151-
.map(ToOwned::to_owned),
152-
serial_number,
153-
part_number,
154-
report: json,
155-
},
156-
}
156+
slog::info!(
157+
&log,
158+
"simulating an ereport: {}", data.id;
159+
"ereport_id" => %data.id,
160+
"ereport_class" => ?data.class,
161+
"serial_number" => ?data.serial_number,
162+
"part_number" => ?data.part_number,
163+
);
164+
Ereport { reporter, data }
157165
}

0 commit comments

Comments
 (0)