@@ -140,67 +140,67 @@ fn deserialize_with_debug(json_bytes: &[u8]) -> Result<JsonScanResultV1, SysdigI
140140}
141141
142142#[ cfg( test) ]
143- #[ serial_test:: file_serial]
144143mod 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