From 3f8d50033aeed747183a8a4b770509405045cdb3 Mon Sep 17 00:00:00 2001 From: Jonathan Christison Date: Thu, 23 Jan 2025 16:49:17 +0000 Subject: [PATCH 1/2] test: Add E2E tests for SBOMER-280 (skinny maifest images) Add additional E2E tests for "skinny" manifest images, additionally this type of image manifest failed at the inspect step but now fails in generation step, `org.jbo.sbo.cli.fea.sbo.adj.SyftImageAdjuster` where a version label is expected. Previous tests like madrel still manage to pass in tekton --- .../rw/ContainerImageGenerationRequestIT.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/e2e/src/test/java/org/jboss/sbomer/test/e2e/rw/ContainerImageGenerationRequestIT.java b/e2e/src/test/java/org/jboss/sbomer/test/e2e/rw/ContainerImageGenerationRequestIT.java index 8fb548b08..5e8ce0049 100644 --- a/e2e/src/test/java/org/jboss/sbomer/test/e2e/rw/ContainerImageGenerationRequestIT.java +++ b/e2e/src/test/java/org/jboss/sbomer/test/e2e/rw/ContainerImageGenerationRequestIT.java @@ -20,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.IOException; +import java.io.StringReader; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; @@ -27,11 +28,22 @@ import java.util.List; import org.jboss.sbomer.test.e2e.E2EStageBase; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ExecutionMode; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import io.restassured.response.Response; +import jakarta.json.JsonObject; +import jakarta.json.JsonReader; +import jakarta.json.JsonValue; +import jakarta.json.Json; +import jakarta.json.JsonArray; + +import java.util.stream.Collectors; +import java.util.stream.Stream; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -44,6 +56,14 @@ static Path sbomPath(String fileName) { private final static String MANDREL_IMAGE = "registry.redhat.io/quarkus/mandrel-for-jdk-21-rhel8@sha256:a406de0fd344785fb39eba81cbef01cf7fb3e2be43d0e671a8587d1abe1418b4"; + static Stream requestBodys() throws IOException, URISyntaxException { + String requestBodys = Files.readString(sbomPath("skinny-manifest-images.json")); + JsonReader jsonReader = Json.createReader(new StringReader(requestBodys)); + JsonArray requestBodyJO = jsonReader.readArray(); + jsonReader.close(); + return requestBodyJO.stream().map(jo -> jo.asJsonObject()); + } + @Test void testMultiArchImage() throws IOException, URISyntaxException { String requestBody = Files.readString(sbomPath("mandrel-image.json")); @@ -76,4 +96,30 @@ void testMultiArchImage() throws IOException, URISyntaxException { log.info("Mandrel container image passed"); } + + /* + * SBOMER-280 https://issues.redhat.com/browse/SBOMER-280 + * + * Test the following weird manifest formats application/vnd.docker.image.rootfs.foreign.diff.tar.gzip: “Layer”, as + * a gzipped tar that should never be pushed application/vnd.docker.plugin.v1+json + */ + @ParameterizedTest + @MethodSource("requestBodys") + void testSkinnyManifests(JsonObject requestBody) { + List generationIds = requestGeneration(requestBody.toString()); + assertEquals(1, generationIds.size()); + String generationId = generationIds.get(0); + + log.info( + "{} container image - Generation Request created: {}", + requestBody.getValue("/image").toString(), + generationId); + waitForGeneration(generationId); + + final Response response = getManifestsForGeneration(generationId); + + assertEquals(3, response.body().jsonPath().getInt("totalHits")); + + log.info("{} container image passed", requestBody.getValue("image")); + } } From e2ab621abe3cf33babb72967605d3e4a0f6c92da Mon Sep 17 00:00:00 2001 From: Jonathan Christison Date: Thu, 23 Jan 2025 17:20:37 +0000 Subject: [PATCH 2/2] test: Add images to test in array (SBOMER-280) --- .../resources/requests/skinny-manifest-images.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 e2e/src/test/resources/requests/skinny-manifest-images.json diff --git a/e2e/src/test/resources/requests/skinny-manifest-images.json b/e2e/src/test/resources/requests/skinny-manifest-images.json new file mode 100644 index 000000000..1bf1d4ae8 --- /dev/null +++ b/e2e/src/test/resources/requests/skinny-manifest-images.json @@ -0,0 +1,12 @@ +[ +{ + "apiVersion": "sbomer.jboss.org/v1alpha1", + "type": "image", + "image": "registry.redhat.io/openshift4/ose-egress-http-proxy@sha256:ce1e5acecb4dfa89d2b3a4ed97faa84dfbeecc115083c8f0017b4fb89fc6e400" +}, +{ + "apiVersion": "sbomer.jboss.org/v1alpha1", + "type": "image", + "image": "registry.redhat.io/openshift4/oc-mirror-plugin-rhel8@sha256:80acc20087bec702fcb2624345f3dda071cd78092e5d3c972d75615b837549de" +} +]