Skip to content

Commit ddbd037

Browse files
committed
Check for specific errors in parsing unit tests
Signed-off-by: Robert Detjens <github@detjens.dev>
1 parent 1ae3b81 commit ddbd037

File tree

1 file changed

+68
-2
lines changed

1 file changed

+68
-2
lines changed

src/tests/parsing/challenges.rs

Lines changed: 68 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ fn challenge_three_levels() {
121121
}
122122

123123
#[test]
124-
fn challenge_missing_fields() {
124+
fn challenge_no_flag() {
125125
figment::Jail::expect_with(|jail| {
126126
let dir = jail.create_dir("test/noflag")?;
127127
jail.create_file(
@@ -135,6 +135,23 @@ fn challenge_missing_fields() {
135135
"#,
136136
)?;
137137

138+
let chals = parse_all();
139+
assert!(chals.is_err());
140+
let errs = chals.unwrap_err();
141+
142+
assert_eq!(errs.len(), 1);
143+
assert_eq!(
144+
format!("{:#}", errs[0]),
145+
r#"failed to parse challenge config "test/noflag/challenge.yaml": missing field `flag`"#
146+
);
147+
148+
Ok(())
149+
})
150+
}
151+
152+
#[test]
153+
fn challenge_no_author() {
154+
figment::Jail::expect_with(|jail| {
138155
let dir = jail.create_dir("test/noauthor")?;
139156
jail.create_file(
140157
dir.join("challenge.yaml"),
@@ -149,6 +166,23 @@ fn challenge_missing_fields() {
149166
"#,
150167
)?;
151168

169+
let chals = parse_all();
170+
assert!(chals.is_err());
171+
let errs = chals.unwrap_err();
172+
173+
assert_eq!(errs.len(), 1);
174+
assert_eq!(
175+
format!("{:#}", errs[0]),
176+
r#"failed to parse challenge config "test/noauthor/challenge.yaml": missing field `author`"#
177+
);
178+
179+
Ok(())
180+
})
181+
}
182+
183+
#[test]
184+
fn challenge_no_description() {
185+
figment::Jail::expect_with(|jail| {
152186
let dir = jail.create_dir("test/nodescrip")?;
153187
jail.create_file(
154188
dir.join("challenge.yaml"),
@@ -163,6 +197,23 @@ fn challenge_missing_fields() {
163197
"#,
164198
)?;
165199

200+
let chals = parse_all();
201+
assert!(chals.is_err());
202+
let errs = chals.unwrap_err();
203+
204+
assert_eq!(errs.len(), 1);
205+
assert_eq!(
206+
format!("{:#}", errs[0]),
207+
r#"failed to parse challenge config "test/nodescrip/challenge.yaml": missing field `description`"#
208+
);
209+
210+
Ok(())
211+
})
212+
}
213+
214+
#[test]
215+
fn challenge_no_id() {
216+
figment::Jail::expect_with(|jail| {
166217
let dir = jail.create_dir("test/noid")?;
167218
jail.create_file(
168219
dir.join("challenge.yaml"),
@@ -180,7 +231,11 @@ fn challenge_missing_fields() {
180231
assert!(chals.is_err());
181232
let errs = chals.unwrap_err();
182233

183-
assert_eq!(errs.len(), 4);
234+
assert_eq!(errs.len(), 1);
235+
assert_eq!(
236+
format!("{:#}", errs[0]),
237+
r#"failed to parse challenge config "test/noid/challenge.yaml": missing field `challenge_id`"#
238+
);
184239

185240
Ok(())
186241
})
@@ -354,7 +409,13 @@ fn challenge_provide_no_include() {
354409
let chals = parse_all();
355410
assert!(chals.is_err());
356411
let errs = chals.unwrap_err();
412+
357413
assert_eq!(errs.len(), 1);
414+
// TODO: fix this really bad error message!
415+
assert_eq!(
416+
format!("{:#}", errs[0]),
417+
r#"failed to parse challenge config "foo/test/challenge.yaml": data did not match any variant of untagged enum ProvideConfig for key "default.provide.0" in foo/test/challenge.yaml YAML file"#
418+
);
358419

359420
Ok(())
360421
})
@@ -649,7 +710,12 @@ fn challenge_pod_bad_env() {
649710
let chals = parse_all();
650711
assert!(chals.is_err());
651712
let errs = chals.unwrap_err();
713+
652714
assert_eq!(errs.len(), 1);
715+
assert_eq!(
716+
format!("{:#}", errs[0]),
717+
r#"failed to parse challenge config "foo/test/challenge.yaml": could not parse envvar=value from "FOO" (missing '='?)"#
718+
);
653719

654720
Ok(())
655721
})

0 commit comments

Comments
 (0)