github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/test/e2e/11_oci_pull_inspect_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: 2021-Present The Jackal Authors 3 4 // Package test provides e2e tests for Jackal. 5 package test 6 7 import ( 8 "fmt" 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 "github.com/stretchr/testify/suite" 13 "oras.land/oras-go/v2/registry" 14 ) 15 16 type PullInspectTestSuite struct { 17 suite.Suite 18 *require.Assertions 19 Reference registry.Reference 20 PackagesDir string 21 } 22 23 var badPullInspectRef = registry.Reference{ 24 Registry: "localhost:5000", 25 Repository: "jackal-test", 26 Reference: "bad-tag", 27 } 28 29 func (suite *PullInspectTestSuite) SetupSuite() { 30 suite.Assertions = require.New(suite.T()) 31 suite.PackagesDir = "build" 32 } 33 34 func (suite *PullInspectTestSuite) TearDownSuite() { 35 local := fmt.Sprintf("jackal-package-dos-games-%s-1.0.0.tar.zst", e2e.Arch) 36 e2e.CleanFiles(local) 37 } 38 39 func (suite *PullInspectTestSuite) Test_0_Pull() { 40 suite.T().Log("E2E: Package Pull oci://") 41 42 out := fmt.Sprintf("jackal-package-dos-games-%s-1.0.0.tar.zst", e2e.Arch) 43 44 // Build the fully qualified reference. 45 ref := fmt.Sprintf("oci://ghcr.io/defenseunicorns/packages/dos-games:1.0.0-%s", e2e.Arch) 46 47 // Pull the package via OCI. 48 stdOut, stdErr, err := e2e.Jackal("package", "pull", ref) 49 suite.NoError(err, stdOut, stdErr) 50 suite.Contains(stdErr, fmt.Sprintf("Pulling %q", ref)) 51 suite.Contains(stdErr, "Validating full package checksums") 52 suite.NotContains(stdErr, "Package signature validated!") 53 54 sbomTmp := suite.T().TempDir() 55 56 // Verify the package was pulled correctly. 57 suite.FileExists(out) 58 stdOut, stdErr, err = e2e.Jackal("package", "inspect", out, "--key", "https://jackal.dev/cosign.pub", "--sbom-out", sbomTmp) 59 suite.NoError(err, stdOut, stdErr) 60 suite.Contains(stdErr, "Validating SBOM checksums") 61 suite.Contains(stdErr, "Package signature validated!") 62 63 // Test pull w/ bad ref. 64 stdOut, stdErr, err = e2e.Jackal("package", "pull", "oci://"+badPullInspectRef.String(), "--insecure") 65 suite.Error(err, stdOut, stdErr) 66 } 67 68 func (suite *PullInspectTestSuite) Test_1_Remote_Inspect() { 69 suite.T().Log("E2E: Package Inspect oci://") 70 71 // Test inspect w/ bad ref. 72 _, stdErr, err := e2e.Jackal("package", "inspect", "oci://"+badPullInspectRef.String(), "--insecure") 73 suite.Error(err, stdErr) 74 75 // Test inspect on a public package. 76 // NOTE: This also makes sure that Jackal does not attempt auth when inspecting a public package. 77 ref := fmt.Sprintf("oci://ghcr.io/defenseunicorns/packages/dos-games:1.0.0-%s", e2e.Arch) 78 _, stdErr, err = e2e.Jackal("package", "inspect", ref) 79 suite.NoError(err, stdErr) 80 } 81 82 func TestPullInspectSuite(t *testing.T) { 83 suite.Run(t, new(PullInspectTestSuite)) 84 }