Skip to content

Commit aa1f1f3

Browse files
committed
config: add a test for nested configuration
Signed-off-by: Leonard Göhrs <l.goehrs@pengutronix.de>
1 parent 5e04a65 commit aa1f1f3

5 files changed

Lines changed: 127 additions & 10 deletions

File tree

src/config.rs

Lines changed: 118 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub use github::GitHubConfig;
1717
pub use host::HostConfig;
1818
pub use machine::{Artifact, MachineConfig, NetworkInterface, Repository, SeedBasePolicy};
1919

20-
#[derive(Deserialize)]
20+
#[derive(Debug, Deserialize, PartialEq)]
2121
#[serde(deny_unknown_fields)]
2222
pub struct ConfigFile {
2323
pub github: GitHubConfig,
@@ -170,3 +170,120 @@ impl Config {
170170
self.inner.lock().unwrap().get()
171171
}
172172
}
173+
174+
#[cfg(test)]
175+
mod tests {
176+
use super::ConfigFile;
177+
178+
const CONFIG_NESTED: &[u8] = br#"
179+
host:
180+
base_dir: /srv/forrest
181+
ram: 120G
182+
183+
github:
184+
app_id: 1234
185+
jwt_key_file: key.pem
186+
polling_interval: 15m
187+
webhook_secret: Some super secret text
188+
189+
.machines:
190+
machine-small: &machine-small
191+
setup_template:
192+
path: /etc/forrest/templates/generic
193+
parameters:
194+
RUNNER_VERSION: "2.318.0"
195+
RUNNER_HASH: "28ed88e4cedf0fc93201a901e392a70463dbd0213f2ce9d57a4ab495027f3e2f"
196+
base_image: /srv/forrest/images/debian-12-generic-amd64.raw
197+
cpus: 4
198+
disk: 16G
199+
ram: 4G
200+
machine-medium: &machine-medium
201+
<< : *machine-small
202+
cpus: 8
203+
disk: 32G
204+
ram: 8G
205+
206+
repositories:
207+
hnez:
208+
forrest-images:
209+
persistence_token: <PERSISTENCE_TOKEN>
210+
machines:
211+
debian-base:
212+
<< : *machine-small
213+
use_base: always
214+
debian-yocto:
215+
<< : *machine-small
216+
base_machine: hnez/forrest-images/debian-base
217+
use_base: always
218+
219+
forrest-test:
220+
machines:
221+
test-debian:
222+
<< : *machine-medium
223+
base_machine: hnez/forrest-images/debian-base
224+
"#;
225+
226+
const CONFIG_FLAT: &[u8] = br#"
227+
host:
228+
base_dir: /srv/forrest
229+
ram: 120G
230+
231+
github:
232+
app_id: 1234
233+
jwt_key_file: key.pem
234+
polling_interval: 15m
235+
webhook_secret: Some super secret text
236+
237+
repositories:
238+
hnez:
239+
forrest-images:
240+
persistence_token: <PERSISTENCE_TOKEN>
241+
machines:
242+
debian-base:
243+
setup_template:
244+
path: /etc/forrest/templates/generic
245+
parameters:
246+
RUNNER_VERSION: "2.318.0"
247+
RUNNER_HASH: "28ed88e4cedf0fc93201a901e392a70463dbd0213f2ce9d57a4ab495027f3e2f"
248+
base_image: /srv/forrest/images/debian-12-generic-amd64.raw
249+
cpus: 4
250+
disk: 16G
251+
ram: 4G
252+
use_base: always
253+
debian-yocto:
254+
setup_template:
255+
path: /etc/forrest/templates/generic
256+
parameters:
257+
RUNNER_VERSION: "2.318.0"
258+
RUNNER_HASH: "28ed88e4cedf0fc93201a901e392a70463dbd0213f2ce9d57a4ab495027f3e2f"
259+
base_image: /srv/forrest/images/debian-12-generic-amd64.raw
260+
cpus: 4
261+
disk: 16G
262+
ram: 4G
263+
base_machine: hnez/forrest-images/debian-base
264+
use_base: always
265+
266+
forrest-test:
267+
machines:
268+
test-debian:
269+
setup_template:
270+
path: /etc/forrest/templates/generic
271+
parameters:
272+
RUNNER_VERSION: "2.318.0"
273+
RUNNER_HASH: "28ed88e4cedf0fc93201a901e392a70463dbd0213f2ce9d57a4ab495027f3e2f"
274+
base_image: /srv/forrest/images/debian-12-generic-amd64.raw
275+
cpus: 8
276+
disk: 32G
277+
ram: 8G
278+
base_machine: hnez/forrest-images/debian-base
279+
280+
"#;
281+
282+
#[test]
283+
fn nested_snippets() {
284+
let config_file_nested = ConfigFile::from_reader(CONFIG_NESTED).unwrap();
285+
let config_file_flat = ConfigFile::from_reader(CONFIG_FLAT).unwrap();
286+
287+
assert_eq!(config_file_nested, config_file_flat);
288+
}
289+
}

src/config/github.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn default_timeout() -> Duration {
88
Duration::from_secs(15 * 60)
99
}
1010

11-
#[derive(Deserialize)]
11+
#[derive(Debug, Deserialize, PartialEq)]
1212
#[serde(deny_unknown_fields)]
1313
pub struct GitHubConfig {
1414
pub app_id: u64,

src/config/host.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use serde::Deserialize;
44

55
use super::size_in_bytes::SizeInBytes;
66

7-
#[derive(Deserialize)]
7+
#[derive(Debug, Deserialize, PartialEq)]
88
#[serde(deny_unknown_fields)]
99
pub struct HostConfig {
1010
pub base_dir: PathBuf,

src/config/machine.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ use serde::Deserialize;
66
use super::size_in_bytes::SizeInBytes;
77
use crate::machines::Triplet;
88

9-
#[derive(Deserialize)]
9+
#[derive(Debug, Deserialize, PartialEq)]
1010
pub struct SetupTemplate {
1111
pub path: PathBuf,
1212

1313
#[serde(default)]
1414
pub parameters: HashMap<String, String>,
1515
}
1616

17-
#[derive(Default, Deserialize, Clone, Copy)]
17+
#[derive(Debug, Default, Deserialize, Clone, Copy, PartialEq)]
1818
#[serde(rename_all = "snake_case")]
1919
pub enum SeedBasePolicy {
2020
#[default]
@@ -23,7 +23,7 @@ pub enum SeedBasePolicy {
2323
Never,
2424
}
2525

26-
#[derive(Deserialize)]
26+
#[derive(Debug, Deserialize, PartialEq)]
2727
#[serde(deny_unknown_fields)]
2828
pub struct ExposedDirectory {
2929
pub path: PathBuf,
@@ -36,7 +36,7 @@ fn default_artifact_name() -> String {
3636
"artifact".into()
3737
}
3838

39-
#[derive(Deserialize)]
39+
#[derive(Debug, Deserialize, PartialEq)]
4040
#[serde(deny_unknown_fields)]
4141
pub struct Artifact {
4242
#[serde(default = "default_artifact_name")]
@@ -47,7 +47,7 @@ pub struct Artifact {
4747
pub token: Option<String>,
4848
}
4949

50-
#[derive(Deserialize)]
50+
#[derive(Debug, Deserialize, PartialEq)]
5151
#[serde(deny_unknown_fields)]
5252
pub struct NetworkInterfaceVde {
5353
pub path: PathBuf,
@@ -85,7 +85,7 @@ pub struct MachineConfig {
8585
pub network_interfaces: Vec<NetworkInterface>,
8686
}
8787

88-
#[derive(Deserialize)]
88+
#[derive(Debug, Deserialize, PartialEq)]
8989
#[serde(deny_unknown_fields)]
9090
pub struct Repository {
9191
pub persistence_token: Option<String>,

src/config/size_in_bytes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use serde::{Deserialize, Deserializer};
22

3-
#[derive(Clone, Copy)]
3+
#[derive(Clone, Copy, Debug, PartialEq)]
44
pub struct SizeInBytes(u64);
55

66
impl<'de> Deserialize<'de> for SizeInBytes {

0 commit comments

Comments
 (0)