get.porter.sh/porter@v1.3.0/tests/integration/publish_test.go (about)

     1  //go:build integration
     2  
     3  package integration
     4  
     5  import (
     6  	"encoding/json"
     7  	"fmt"
     8  	"path"
     9  	"testing"
    10  
    11  	"get.porter.sh/porter/pkg/yaml"
    12  	"get.porter.sh/porter/tests"
    13  	"get.porter.sh/porter/tests/testdata"
    14  	"get.porter.sh/porter/tests/tester"
    15  	"github.com/google/go-containerregistry/pkg/crane"
    16  	"github.com/stretchr/testify/require"
    17  )
    18  
    19  func TestPublish(t *testing.T) {
    20  	test, err := tester.NewTest(t)
    21  	defer test.Close()
    22  	require.NoError(t, err, "test setup failed")
    23  
    24  	// Create a bundle
    25  	test.Chdir(test.TestDir)
    26  	test.RequirePorter("create")
    27  
    28  	// Try to publish with autobuild disabled, it should fail
    29  	_, output, _ := test.RunPorter("publish", "--autobuild-disabled")
    30  	tests.RequireOutputContains(t, output, "Skipping autobuild because --autobuild-disabled was specified")
    31  
    32  	// Try again with autobuild disabled via a config setting instead of a flag
    33  	// This is a regression test for https://github.com/getporter/porter/issues/2735
    34  	test.EditYaml(path.Join(test.PorterHomeDir, "config.yaml"), func(yq *yaml.Editor) error {
    35  		return yq.SetValue("autobuild-disabled", "true")
    36  	})
    37  	_, output, _ = test.RunPorter("publish")
    38  	fmt.Println(output)
    39  	tests.RequireOutputContains(t, output, "Skipping autobuild because --autobuild-disabled was specified")
    40  
    41  	// Build with version override
    42  	test.RequirePorter("build", "--version=0.0.0")
    43  
    44  	// Start up an insecure registry with self-signed TLS certificates
    45  	reg := test.StartTestRegistry(tester.TestRegistryOptions{UseTLS: true})
    46  	defer reg.Close()
    47  
    48  	// Confirm that publish picks up the version override
    49  	// Use an insecure registry to validate that we can publish to one
    50  	_, output = test.RequirePorter("publish", "--registry", reg.String(), "--insecure-registry")
    51  	tests.RequireOutputContains(t, output, fmt.Sprintf("Bundle %s/porter-hello:v0.0.0 pushed successfully", reg))
    52  }
    53  
    54  func TestPublish_PreserveTags(t *testing.T) {
    55  	test, err := tester.NewTest(t)
    56  	defer test.Close()
    57  	require.NoError(t, err, "test setup failed")
    58  
    59  	// Start a temporary registry, that uses plain http (no TLS)
    60  	reg := test.StartTestRegistry(tester.TestRegistryOptions{UseTLS: false})
    61  	defer reg.Close()
    62  
    63  	ref := fmt.Sprintf("%s/embeddedimg:v0.1.1", reg)
    64  	test.MakeTestBundle(testdata.EmbeddedImg, ref, tester.PreserveTags)
    65  
    66  	taggedDigest, err := crane.Digest(fmt.Sprintf("%s/alpine:3.20.3", reg), crane.Insecure)
    67  	require.NoError(t, err)
    68  
    69  	// Confirm that the digest is the same
    70  	output, _ := test.RequirePorter("inspect", ref, "-o", "json", "--verbosity", "info")
    71  	var images struct {
    72  		Images []struct {
    73  			Digest string `json:"contentDigest"`
    74  		} `json:"images"`
    75  	}
    76  	require.NoError(t, json.Unmarshal([]byte(output), &images))
    77  	require.Equal(t, 1, len(images.Images))
    78  	require.Equal(t, taggedDigest, images.Images[0].Digest)
    79  }
    80  
    81  func TestPublish_PreserveTagsChanged(t *testing.T) {
    82  	test, err := tester.NewTest(t)
    83  	defer test.Close()
    84  	require.NoError(t, err, "test setup failed")
    85  
    86  	// Start a temporary registry, that uses plain http (no TLS)
    87  	reg := test.StartTestRegistry(tester.TestRegistryOptions{UseTLS: false})
    88  	defer reg.Close()
    89  
    90  	ref := fmt.Sprintf("%s/embeddedimg:v0.1.1", reg)
    91  	test.MakeTestBundle(testdata.EmbeddedImg, ref)
    92  	_, err = crane.Digest(fmt.Sprintf("%s/alpine:3.20.3", reg), crane.Insecure)
    93  	require.Error(t, err)
    94  
    95  	ref = fmt.Sprintf("%s/embeddedimg:v0.1.2", reg)
    96  	test.MakeTestBundle(testdata.EmbeddedImg, ref, tester.PreserveTags)
    97  	_, err = crane.Digest(fmt.Sprintf("%s/alpine:3.20.3", reg), crane.Insecure)
    98  	require.NoError(t, err)
    99  }