github.com/amane3/goreleaser@v0.182.0/internal/artifact/artifact_test.go (about) 1 package artifact 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "path/filepath" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 "golang.org/x/sync/errgroup" 11 ) 12 13 // ensure Type implements the stringer interface... 14 var _ fmt.Stringer = Type(0) 15 16 func TestAdd(t *testing.T) { 17 var g errgroup.Group 18 var artifacts = New() 19 for _, a := range []*Artifact{ 20 { 21 Name: "foo", 22 Type: UploadableArchive, 23 }, 24 { 25 Name: "bar", 26 Type: Binary, 27 }, 28 { 29 Name: "foobar", 30 Type: DockerImage, 31 }, 32 { 33 Name: "check", 34 Type: Checksum, 35 }, 36 } { 37 a := a 38 g.Go(func() error { 39 artifacts.Add(a) 40 return nil 41 }) 42 } 43 require.NoError(t, g.Wait()) 44 require.Len(t, artifacts.List(), 4) 45 } 46 47 func TestFilter(t *testing.T) { 48 var data = []*Artifact{ 49 { 50 Name: "foo", 51 Goos: "linux", 52 Goarch: "arm", 53 }, 54 { 55 Name: "bar", 56 Goarch: "amd64", 57 }, 58 { 59 Name: "foobar", 60 Goarm: "6", 61 }, 62 { 63 Name: "check", 64 Type: Checksum, 65 }, 66 { 67 Name: "checkzumm", 68 Type: Checksum, 69 }, 70 } 71 var artifacts = New() 72 for _, a := range data { 73 artifacts.Add(a) 74 } 75 76 require.Len(t, artifacts.Filter(ByGoos("linux")).items, 1) 77 require.Len(t, artifacts.Filter(ByGoos("darwin")).items, 0) 78 79 require.Len(t, artifacts.Filter(ByGoarch("amd64")).items, 1) 80 require.Len(t, artifacts.Filter(ByGoarch("386")).items, 0) 81 82 require.Len(t, artifacts.Filter(ByGoarm("6")).items, 1) 83 require.Len(t, artifacts.Filter(ByGoarm("7")).items, 0) 84 85 require.Len(t, artifacts.Filter(ByType(Checksum)).items, 2) 86 require.Len(t, artifacts.Filter(ByType(Binary)).items, 0) 87 88 require.Len(t, artifacts.Filter(nil).items, 5) 89 90 require.Len(t, artifacts.Filter( 91 And( 92 ByType(Checksum), 93 func(a *Artifact) bool { 94 return a.Name == "checkzumm" 95 }, 96 ), 97 ).List(), 1) 98 99 require.Len(t, artifacts.Filter( 100 Or( 101 ByType(Checksum), 102 And( 103 ByGoos("linux"), 104 ByGoarm("arm"), 105 ), 106 ), 107 ).List(), 2) 108 } 109 110 func TestGroupByPlatform(t *testing.T) { 111 var data = []*Artifact{ 112 { 113 Name: "foo", 114 Goos: "linux", 115 Goarch: "amd64", 116 }, 117 { 118 Name: "bar", 119 Goos: "linux", 120 Goarch: "amd64", 121 }, 122 { 123 Name: "foobar", 124 Goos: "linux", 125 Goarch: "arm", 126 Goarm: "6", 127 }, 128 { 129 Name: "foobar", 130 Goos: "linux", 131 Goarch: "mips", 132 Goarm: "softfloat", 133 }, 134 { 135 Name: "foobar", 136 Goos: "linux", 137 Goarch: "mips", 138 Goarm: "hardfloat", 139 }, 140 { 141 Name: "check", 142 Type: Checksum, 143 }, 144 } 145 var artifacts = New() 146 for _, a := range data { 147 artifacts.Add(a) 148 } 149 150 var groups = artifacts.GroupByPlatform() 151 require.Len(t, groups["linuxamd64"], 2) 152 require.Len(t, groups["linuxarm6"], 1) 153 require.Len(t, groups["linuxmipssoftfloat"], 1) 154 require.Len(t, groups["linuxmipshardfloat"], 1) 155 } 156 157 func TestChecksum(t *testing.T) { 158 var folder = t.TempDir() 159 var file = filepath.Join(folder, "subject") 160 require.NoError(t, ioutil.WriteFile(file, []byte("lorem ipsum"), 0644)) 161 162 var artifact = Artifact{ 163 Path: file, 164 } 165 166 for algo, result := range map[string]string{ 167 "sha256": "5e2bf57d3f40c4b6df69daf1936cb766f832374b4fc0259a7cbff06e2f70f269", 168 "sha512": "f80eebd9aabb1a15fb869ed568d858a5c0dca3d5da07a410e1bd988763918d973e344814625f7c844695b2de36ffd27af290d0e34362c51dee5947d58d40527a", 169 "sha1": "bfb7759a67daeb65410490b4d98bb9da7d1ea2ce", 170 "crc32": "72d7748e", 171 "md5": "80a751fde577028640c419000e33eba6", 172 "sha224": "e191edf06005712583518ced92cc2ac2fac8d6e4623b021a50736a91", 173 "sha384": "597493a6cf1289757524e54dfd6f68b332c7214a716a3358911ef5c09907adc8a654a18c1d721e183b0025f996f6e246", 174 } { 175 t.Run(algo, func(t *testing.T) { 176 sum, err := artifact.Checksum(algo) 177 require.NoError(t, err) 178 require.Equal(t, result, sum) 179 }) 180 } 181 } 182 183 func TestChecksumFileDoesntExist(t *testing.T) { 184 var artifact = Artifact{ 185 Path: "/tmp/adasdasdas/asdasd/asdas", 186 } 187 sum, err := artifact.Checksum("sha1") 188 require.EqualError(t, err, `failed to checksum: open /tmp/adasdasdas/asdasd/asdas: no such file or directory`) 189 require.Empty(t, sum) 190 } 191 192 func TestInvalidAlgorithm(t *testing.T) { 193 f, err := ioutil.TempFile(t.TempDir(), "") 194 require.NoError(t, err) 195 t.Cleanup(func() { f.Close() }) 196 var artifact = Artifact{ 197 Path: f.Name(), 198 } 199 sum, err := artifact.Checksum("sha1ssss") 200 require.EqualError(t, err, `invalid algorithm: sha1ssss`) 201 require.Empty(t, sum) 202 } 203 204 func TestExtraOr(t *testing.T) { 205 var a = &Artifact{ 206 Extra: map[string]interface{}{ 207 "Foo": "foo", 208 }, 209 } 210 require.Equal(t, "foo", a.ExtraOr("Foo", "bar")) 211 require.Equal(t, "bar", a.ExtraOr("Foobar", "bar")) 212 } 213 214 func TestByIDs(t *testing.T) { 215 var data = []*Artifact{ 216 { 217 Name: "foo", 218 Extra: map[string]interface{}{ 219 "ID": "foo", 220 }, 221 }, 222 { 223 Name: "bar", 224 Extra: map[string]interface{}{ 225 "ID": "bar", 226 }, 227 }, 228 { 229 Name: "foobar", 230 Extra: map[string]interface{}{ 231 "ID": "foo", 232 }, 233 }, 234 { 235 Name: "check", 236 Extra: map[string]interface{}{ 237 "ID": "check", 238 }, 239 }, 240 { 241 Name: "checksum", 242 Type: Checksum, 243 }, 244 } 245 var artifacts = New() 246 for _, a := range data { 247 artifacts.Add(a) 248 } 249 250 require.Len(t, artifacts.Filter(ByIDs("check")).items, 2) 251 require.Len(t, artifacts.Filter(ByIDs("foo")).items, 3) 252 require.Len(t, artifacts.Filter(ByIDs("foo", "bar")).items, 4) 253 } 254 255 func TestByFormats(t *testing.T) { 256 var data = []*Artifact{ 257 { 258 Name: "foo", 259 Extra: map[string]interface{}{ 260 "Format": "zip", 261 }, 262 }, 263 { 264 Name: "bar", 265 Extra: map[string]interface{}{ 266 "Format": "tar.gz", 267 }, 268 }, 269 { 270 Name: "foobar", 271 Extra: map[string]interface{}{ 272 "Format": "zip", 273 }, 274 }, 275 { 276 Name: "bin", 277 Extra: map[string]interface{}{ 278 "Format": "binary", 279 }, 280 }, 281 } 282 var artifacts = New() 283 for _, a := range data { 284 artifacts.Add(a) 285 } 286 287 require.Len(t, artifacts.Filter(ByFormats("binary")).items, 1) 288 require.Len(t, artifacts.Filter(ByFormats("zip")).items, 2) 289 require.Len(t, artifacts.Filter(ByFormats("zip", "tar.gz")).items, 3) 290 } 291 292 func TestTypeToString(t *testing.T) { 293 for _, a := range []Type{ 294 UploadableArchive, 295 UploadableBinary, 296 UploadableFile, 297 Binary, 298 LinuxPackage, 299 PublishableSnapcraft, 300 Snapcraft, 301 PublishableDockerImage, 302 DockerImage, 303 DockerManifest, 304 Checksum, 305 Signature, 306 UploadableSourceArchive, 307 } { 308 t.Run(a.String(), func(t *testing.T) { 309 require.NotEqual(t, "unknown", a.String()) 310 }) 311 } 312 t.Run("unknown", func(t *testing.T) { 313 require.Equal(t, "unknown", Type(9999).String()) 314 }) 315 }