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  }