github.com/szyn/goreleaser@v0.76.1-0.20180517112710-333da09a1297/pipeline/checksums/checksums_test.go (about) 1 package checksums 2 3 import ( 4 "io/ioutil" 5 "path/filepath" 6 "testing" 7 8 "github.com/goreleaser/goreleaser/config" 9 "github.com/goreleaser/goreleaser/context" 10 "github.com/goreleaser/goreleaser/internal/artifact" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestDescription(t *testing.T) { 15 assert.NotEmpty(t, Pipe{}.String()) 16 } 17 18 func TestPipe(t *testing.T) { 19 var binary = "binary" 20 var checksums = binary + "_bar_checksums.txt" 21 folder, err := ioutil.TempDir("", "goreleasertest") 22 assert.NoError(t, err) 23 var file = filepath.Join(folder, binary) 24 assert.NoError(t, ioutil.WriteFile(file, []byte("some string"), 0644)) 25 var ctx = context.New( 26 config.Project{ 27 Dist: folder, 28 ProjectName: binary, 29 Checksum: config.Checksum{ 30 NameTemplate: "{{ .ProjectName }}_{{ .Env.FOO }}_checksums.txt", 31 }, 32 }, 33 ) 34 ctx.Env = map[string]string{"FOO": "bar"} 35 ctx.Artifacts.Add(artifact.Artifact{ 36 Name: binary, 37 Path: file, 38 Type: artifact.UploadableBinary, 39 }) 40 ctx.Artifacts.Add(artifact.Artifact{ 41 Name: binary + ".tar.gz", 42 Path: file, 43 Type: artifact.UploadableArchive, 44 }) 45 assert.NoError(t, Pipe{}.Run(ctx)) 46 var artifacts []string 47 for _, a := range ctx.Artifacts.List() { 48 artifacts = append(artifacts, a.Name) 49 } 50 assert.Contains(t, artifacts, checksums, binary) 51 bts, err := ioutil.ReadFile(filepath.Join(folder, checksums)) 52 assert.NoError(t, err) 53 assert.Contains(t, string(bts), "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc binary") 54 assert.Contains(t, string(bts), "61d034473102d7dac305902770471fd50f4c5b26f6831a56dd90b5184b3c30fc binary.tar.gz") 55 } 56 57 func TestPipeFileNotExist(t *testing.T) { 58 folder, err := ioutil.TempDir("", "goreleasertest") 59 assert.NoError(t, err) 60 var ctx = context.New( 61 config.Project{ 62 Dist: folder, 63 Checksum: config.Checksum{ 64 NameTemplate: "checksums.txt", 65 }, 66 }, 67 ) 68 ctx.Artifacts.Add(artifact.Artifact{ 69 Name: "nope", 70 Path: "/nope", 71 Type: artifact.UploadableBinary, 72 }) 73 err = Pipe{}.Run(ctx) 74 assert.Error(t, err) 75 assert.Contains(t, err.Error(), "/nope: no such file or directory") 76 } 77 78 func TestPipeInvalidNameTemplate(t *testing.T) { 79 for template, eerr := range map[string]string{ 80 "{{ .Pro }_checksums.txt": `template: checksums:1: unexpected "}" in operand`, 81 "{{.Env.NOPE}}": `template: checksums:1:6: executing "checksums" at <.Env.NOPE>: map has no entry for key "NOPE"`, 82 } { 83 t.Run(template, func(tt *testing.T) { 84 folder, err := ioutil.TempDir("", "goreleasertest") 85 assert.NoError(tt, err) 86 var ctx = context.New( 87 config.Project{ 88 Dist: folder, 89 ProjectName: "name", 90 Checksum: config.Checksum{ 91 NameTemplate: template, 92 }, 93 }, 94 ) 95 ctx.Artifacts.Add(artifact.Artifact{ 96 Name: "whatever", 97 Type: artifact.UploadableBinary, 98 }) 99 err = Pipe{}.Run(ctx) 100 assert.Error(tt, err) 101 assert.Equal(tt, eerr, err.Error()) 102 }) 103 } 104 } 105 106 func TestPipeCouldNotOpenChecksumsTxt(t *testing.T) { 107 folder, err := ioutil.TempDir("", "goreleasertest") 108 assert.NoError(t, err) 109 var file = filepath.Join(folder, "checksums.txt") 110 assert.NoError(t, ioutil.WriteFile(file, []byte("some string"), 0000)) 111 var ctx = context.New( 112 config.Project{ 113 Dist: folder, 114 Checksum: config.Checksum{ 115 NameTemplate: "checksums.txt", 116 }, 117 }, 118 ) 119 ctx.Artifacts.Add(artifact.Artifact{ 120 Name: "whatever", 121 Type: artifact.UploadableBinary, 122 }) 123 err = Pipe{}.Run(ctx) 124 assert.Error(t, err) 125 assert.Contains(t, err.Error(), "/checksums.txt: permission denied") 126 } 127 128 func TestDefault(t *testing.T) { 129 var ctx = &context.Context{ 130 Config: config.Project{ 131 Checksum: config.Checksum{}, 132 }, 133 } 134 assert.NoError(t, Pipe{}.Default(ctx)) 135 assert.Equal( 136 t, 137 "{{ .ProjectName }}_{{ .Version }}_checksums.txt", 138 ctx.Config.Checksum.NameTemplate, 139 ) 140 } 141 142 func TestDefaultSet(t *testing.T) { 143 var ctx = &context.Context{ 144 Config: config.Project{ 145 Checksum: config.Checksum{ 146 NameTemplate: "checksums.txt", 147 }, 148 }, 149 } 150 assert.NoError(t, Pipe{}.Default(ctx)) 151 assert.Equal(t, "checksums.txt", ctx.Config.Checksum.NameTemplate) 152 }