Skip to content

Commit 5710ee8

Browse files
committed
ci: test multiple base images to verify the domain model works correctly
1 parent e44c496 commit 5710ee8

File tree

3 files changed

+155
-49
lines changed

3 files changed

+155
-49
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,6 @@ tracing-subscriber = "0.3.19"
3636
[dev-dependencies]
3737
itertools = "0.14.0"
3838
lazy_static = "1.5.0"
39+
rstest = "0.26.1"
3940
tracing-subscriber = { version = "0.3.19", features = ["fmt", "env-filter"] }
4041
tracing-test = "0.2.5"

src/infra/sysdig_image_scanner.rs

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -140,67 +140,67 @@ fn deserialize_with_debug(json_bytes: &[u8]) -> Result<JsonScanResultV1, SysdigI
140140
}
141141

142142
#[cfg(test)]
143-
#[serial_test::file_serial]
144143
mod tests {
145-
use crate::infra::sysdig_image_scanner::deserialize_with_debug;
146-
use lazy_static::lazy_static;
147-
144+
use super::*;
145+
use crate::infra::sysdig_image_scanner;
146+
use rstest::*;
148147
use tracing_test::traced_test;
149148

150-
use crate::app::ImageScanner;
149+
#[test]
150+
#[traced_test]
151+
fn it_logs_invalid_json_on_deserialization_error() {
152+
let invalid_json = b"{\"foo\": \"bar\"}";
151153

152-
use super::{SysdigAPIToken, SysdigImageScanner};
154+
let result = sysdig_image_scanner::deserialize_with_debug(invalid_json);
155+
assert!(result.is_err());
156+
assert!(logs_contain(
157+
"Failed to deserialize scanner output. Raw JSON: {\"foo\": \"bar\"}"
158+
));
159+
}
153160

154-
lazy_static! {
155-
static ref SYSDIG_SECURE_URL: String =
161+
#[fixture]
162+
fn scanner() -> SysdigImageScanner {
163+
let sysdig_secure_url: String =
156164
std::env::var("SECURE_API_URL").expect("SECURE_API_URL env var not set");
157-
static ref SYSDIG_SECURE_TOKEN: SysdigAPIToken =
165+
let sysdig_secure_token: SysdigAPIToken =
158166
SysdigAPIToken(std::env::var("SECURE_API_TOKEN").expect("SECURE_API_TOKEN not set"));
167+
SysdigImageScanner::new(sysdig_secure_url.clone(), sysdig_secure_token.clone())
159168
}
160169

170+
#[rstest]
171+
#[case("ubuntu:22.04")]
172+
#[case("ubuntu@sha256:a76d0e9d99f0e91640e35824a6259c93156f0f07b7778ba05808c750e7fa6e68")]
173+
#[case("debian:11")]
174+
#[case("alpine:3.16")]
175+
#[case("centos:7")]
176+
#[case("nginx:1.23")]
177+
#[case("postgres:14")]
178+
#[case("mysql:8.0")]
179+
#[case("node:18")]
180+
#[case("python:3.13")]
181+
#[case("golang:1.25")]
182+
#[case("rust:1.88")]
183+
#[case("quay.io/prometheus/prometheus:v2.40.1")]
184+
#[case("registry.access.redhat.com/ubi8/ubi:latest")]
185+
#[case("gcr.io/distroless/static-debian12")]
186+
#[case("gcr.io/distroless/base-debian12")]
187+
#[case("amazonlinux:2")]
188+
#[case("mongo:5.0")]
189+
#[case("quay.io/sysdig/agent-slim:latest")]
190+
#[case("openjdk:11-jre-slim")]
191+
#[case("quay.io/sysdig/sysdig-ubi9:1")]
192+
#[serial_test::file_serial(scanner)]
161193
#[tokio::test]
162-
async fn it_retrieves_the_scanner_from_the_specified_version() {
163-
let scanner =
164-
SysdigImageScanner::new(SYSDIG_SECURE_URL.clone(), SYSDIG_SECURE_TOKEN.clone());
165-
166-
let report = scanner.scan("ubuntu:22.04").await.unwrap();
167-
168-
assert_eq!(report.scanner.name, "sysdig-cli-scanner");
169-
assert_eq!(report.result.metadata.pull_string, "ubuntu:22.04");
170-
}
171-
172-
#[tokio::test]
173-
async fn it_scans_the_ubuntu_image_correctly() {
174-
let scanner =
175-
SysdigImageScanner::new(SYSDIG_SECURE_URL.clone(), SYSDIG_SECURE_TOKEN.clone());
176-
177-
let report = scanner
178-
.scan_image(
179-
"ubuntu@sha256:a76d0e9d99f0e91640e35824a6259c93156f0f07b7778ba05808c750e7fa6e68",
180-
)
181-
.await
182-
.unwrap();
194+
async fn it_scans_popular_images_correctly_test(
195+
scanner: SysdigImageScanner,
196+
#[case] image_to_scan: &str,
197+
) {
198+
use crate::app::ImageScanner;
183199

184-
assert_eq!(
185-
report.metadata().pull_string(),
186-
"ubuntu@sha256:a76d0e9d99f0e91640e35824a6259c93156f0f07b7778ba05808c750e7fa6e68"
187-
);
200+
let report = scanner.scan_image(image_to_scan).await.unwrap();
188201

189-
assert!(!report.layers().is_empty());
190-
assert!(!report.vulnerabilities().is_empty());
202+
assert_eq!(report.metadata().pull_string(), image_to_scan);
191203
assert!(!report.packages().is_empty());
192-
assert!(report.evaluation_result().is_failed());
193-
}
194-
195-
#[test]
196-
#[traced_test]
197-
fn it_logs_invalid_json_on_deserialization_error() {
198-
let invalid_json = b"{\"foo\": \"bar\"}";
199-
200-
let result = deserialize_with_debug(invalid_json);
201-
assert!(result.is_err());
202-
assert!(logs_contain(
203-
"Failed to deserialize scanner output. Raw JSON: {\"foo\": \"bar\"}"
204-
));
204+
assert!(!report.layers().is_empty());
205205
}
206206
}

0 commit comments

Comments
 (0)