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 }