github.com/triarius/goreleaser@v1.12.5/internal/pipe/blob/blob_test.go (about) 1 package blob 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/triarius/goreleaser/internal/testlib" 8 "github.com/triarius/goreleaser/pkg/config" 9 "github.com/triarius/goreleaser/pkg/context" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestDescription(t *testing.T) { 14 require.NotEmpty(t, Pipe{}.String()) 15 } 16 17 func TestErrors(t *testing.T) { 18 for k, v := range map[string]string{ 19 "NoSuchBucket": "provided bucket does not exist: someurl: NoSuchBucket", 20 "ContainerNotFound": "provided bucket does not exist: someurl: ContainerNotFound", 21 "notFound": "provided bucket does not exist: someurl: notFound", 22 "NoCredentialProviders": "check credentials and access to bucket: someurl: NoCredentialProviders", 23 "InvalidAccessKeyId": "aws access key id you provided does not exist in our records: InvalidAccessKeyId", 24 "AuthenticationFailed": "azure storage key you provided is not valid: AuthenticationFailed", 25 "invalid_grant": "google app credentials you provided is not valid: invalid_grant", 26 "no such host": "azure storage account you provided is not valid: no such host", 27 "ServiceCode=ResourceNotFound": "missing azure storage key for provided bucket someurl: ServiceCode=ResourceNotFound", 28 "other": "failed to write to bucket: other", 29 } { 30 t.Run(k, func(t *testing.T) { 31 require.EqualError(t, handleError(fmt.Errorf(k), "someurl"), v) 32 }) 33 } 34 } 35 36 func TestDefaultsNoConfig(t *testing.T) { 37 errorString := "bucket or provider cannot be empty" 38 ctx := context.New(config.Project{ 39 Blobs: []config.Blob{{}}, 40 }) 41 require.EqualError(t, Pipe{}.Default(ctx), errorString) 42 } 43 44 func TestDefaultsNoBucket(t *testing.T) { 45 errorString := "bucket or provider cannot be empty" 46 ctx := context.New(config.Project{ 47 Blobs: []config.Blob{ 48 { 49 Provider: "azblob", 50 }, 51 }, 52 }) 53 require.EqualError(t, Pipe{}.Default(ctx), errorString) 54 } 55 56 func TestDefaultsNoProvider(t *testing.T) { 57 errorString := "bucket or provider cannot be empty" 58 ctx := context.New(config.Project{ 59 Blobs: []config.Blob{ 60 { 61 Bucket: "goreleaser-bucket", 62 }, 63 }, 64 }) 65 require.EqualError(t, Pipe{}.Default(ctx), errorString) 66 } 67 68 func TestDefaults(t *testing.T) { 69 ctx := context.New(config.Project{ 70 Blobs: []config.Blob{ 71 { 72 Bucket: "foo", 73 Provider: "azblob", 74 IDs: []string{"foo", "bar"}, 75 }, 76 { 77 Bucket: "foobar", 78 Provider: "gcs", 79 }, 80 }, 81 }) 82 require.NoError(t, Pipe{}.Default(ctx)) 83 require.Equal(t, []config.Blob{ 84 { 85 Bucket: "foo", 86 Provider: "azblob", 87 Folder: "{{ .ProjectName }}/{{ .Tag }}", 88 IDs: []string{"foo", "bar"}, 89 }, 90 { 91 Bucket: "foobar", 92 Provider: "gcs", 93 Folder: "{{ .ProjectName }}/{{ .Tag }}", 94 }, 95 }, ctx.Config.Blobs) 96 } 97 98 func TestDefaultsWithProvider(t *testing.T) { 99 ctx := context.New(config.Project{ 100 Blobs: []config.Blob{ 101 { 102 Bucket: "foo", 103 Provider: "azblob", 104 }, 105 { 106 Bucket: "foo", 107 Provider: "s3", 108 }, 109 { 110 Bucket: "foo", 111 Provider: "gs", 112 }, 113 }, 114 }) 115 require.Nil(t, Pipe{}.Default(ctx)) 116 } 117 118 func TestURL(t *testing.T) { 119 t.Run("s3 with opts", func(t *testing.T) { 120 url, err := urlFor(context.New(config.Project{}), config.Blob{ 121 Bucket: "foo", 122 Provider: "s3", 123 Region: "us-west-1", 124 Folder: "foo", 125 Endpoint: "s3.foobar.com", 126 DisableSSL: true, 127 }) 128 require.NoError(t, err) 129 require.Equal(t, "s3://foo?disableSSL=true&endpoint=s3.foobar.com®ion=us-west-1&s3ForcePathStyle=true", url) 130 }) 131 132 t.Run("s3 with some opts", func(t *testing.T) { 133 url, err := urlFor(context.New(config.Project{}), config.Blob{ 134 Bucket: "foo", 135 Provider: "s3", 136 Region: "us-west-1", 137 DisableSSL: true, 138 }) 139 require.NoError(t, err) 140 require.Equal(t, "s3://foo?disableSSL=true®ion=us-west-1", url) 141 }) 142 143 t.Run("gs with opts", func(t *testing.T) { 144 url, err := urlFor(context.New(config.Project{}), config.Blob{ 145 Bucket: "foo", 146 Provider: "gs", 147 Region: "us-west-1", 148 Folder: "foo", 149 Endpoint: "s3.foobar.com", 150 DisableSSL: true, 151 }) 152 require.NoError(t, err) 153 require.Equal(t, "gs://foo", url) 154 }) 155 156 t.Run("s3 no opts", func(t *testing.T) { 157 url, err := urlFor(context.New(config.Project{}), config.Blob{ 158 Bucket: "foo", 159 Provider: "s3", 160 }) 161 require.NoError(t, err) 162 require.Equal(t, "s3://foo", url) 163 }) 164 165 t.Run("gs no opts", func(t *testing.T) { 166 url, err := urlFor(context.New(config.Project{}), config.Blob{ 167 Bucket: "foo", 168 Provider: "gs", 169 }) 170 require.NoError(t, err) 171 require.Equal(t, "gs://foo", url) 172 }) 173 174 t.Run("template errors", func(t *testing.T) { 175 t.Run("provider", func(t *testing.T) { 176 _, err := urlFor(context.New(config.Project{}), config.Blob{ 177 Provider: "{{ .Nope }}", 178 }) 179 testlib.RequireTemplateError(t, err) 180 }) 181 t.Run("bucket", func(t *testing.T) { 182 _, err := urlFor(context.New(config.Project{}), config.Blob{ 183 Bucket: "{{ .Nope }}", 184 Provider: "gs", 185 }) 186 testlib.RequireTemplateError(t, err) 187 }) 188 t.Run("endpoint", func(t *testing.T) { 189 _, err := urlFor(context.New(config.Project{}), config.Blob{ 190 Bucket: "foobar", 191 Endpoint: "{{.Env.NOPE}}", 192 Provider: "s3", 193 }) 194 testlib.RequireTemplateError(t, err) 195 }) 196 t.Run("region", func(t *testing.T) { 197 _, err := urlFor(context.New(config.Project{}), config.Blob{ 198 Bucket: "foobar", 199 Region: "{{.Env.NOPE}}", 200 Provider: "s3", 201 }) 202 testlib.RequireTemplateError(t, err) 203 }) 204 }) 205 } 206 207 func TestSkip(t *testing.T) { 208 t.Run("skip", func(t *testing.T) { 209 require.True(t, Pipe{}.Skip(context.New(config.Project{}))) 210 }) 211 212 t.Run("dont skip", func(t *testing.T) { 213 ctx := context.New(config.Project{ 214 Blobs: []config.Blob{{}}, 215 }) 216 require.False(t, Pipe{}.Skip(ctx)) 217 }) 218 }