github.com/elyscape/goreleaser@v0.66.1-0.20180515111211-5252f74ade63/pipeline/nfpm/nfpm_test.go (about) 1 package nfpm 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "runtime" 8 "testing" 9 10 "github.com/goreleaser/goreleaser/config" 11 "github.com/goreleaser/goreleaser/context" 12 "github.com/goreleaser/goreleaser/internal/artifact" 13 "github.com/goreleaser/goreleaser/internal/testlib" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestDescription(t *testing.T) { 18 assert.NotEmpty(t, Pipe{}.String()) 19 } 20 21 func TestRunPipeNoFormats(t *testing.T) { 22 var ctx = &context.Context{ 23 Git: context.GitInfo{ 24 CurrentTag: "v1.0.0", 25 }, 26 Config: config.Project{}, 27 Parallelism: runtime.NumCPU(), 28 } 29 testlib.AssertSkipped(t, Pipe{}.Run(ctx)) 30 } 31 32 func TestRunPipeInvalidFormat(t *testing.T) { 33 var ctx = context.New(config.Project{ 34 ProjectName: "nope", 35 NFPM: config.NFPM{ 36 Bindir: "/usr/bin", 37 Formats: []string{"nope"}, 38 NFPMOverridables: config.NFPMOverridables{ 39 NameTemplate: defaultNameTemplate, 40 Files: map[string]string{}, 41 }, 42 }, 43 }) 44 ctx.Git = context.GitInfo{ 45 CurrentTag: "v1.2.3", 46 } 47 for _, goos := range []string{"linux", "darwin"} { 48 for _, goarch := range []string{"amd64", "386"} { 49 ctx.Artifacts.Add(artifact.Artifact{ 50 Name: "mybin", 51 Path: "whatever", 52 Goarch: goarch, 53 Goos: goos, 54 Type: artifact.Binary, 55 }) 56 } 57 } 58 assert.Contains(t, Pipe{}.Run(ctx).Error(), `no packager registered for the format nope`) 59 } 60 61 func TestRunPipe(t *testing.T) { 62 folder, err := ioutil.TempDir("", "archivetest") 63 assert.NoError(t, err) 64 var dist = filepath.Join(folder, "dist") 65 assert.NoError(t, os.Mkdir(dist, 0755)) 66 assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 67 var binPath = filepath.Join(dist, "mybin", "mybin") 68 _, err = os.Create(binPath) 69 assert.NoError(t, err) 70 var ctx = context.New(config.Project{ 71 ProjectName: "mybin", 72 Dist: dist, 73 NFPM: config.NFPM{ 74 Bindir: "/usr/bin", 75 Formats: []string{"deb", "rpm"}, 76 Description: "Some description", 77 License: "MIT", 78 Maintainer: "me@me", 79 Vendor: "asdf", 80 Homepage: "https://goreleaser.github.io", 81 NFPMOverridables: config.NFPMOverridables{ 82 NameTemplate: defaultNameTemplate, 83 Dependencies: []string{"make"}, 84 Recommends: []string{"svn"}, 85 Suggests: []string{"bzr"}, 86 Conflicts: []string{"git"}, 87 Files: map[string]string{ 88 "./testdata/testfile.txt": "/usr/share/testfile.txt", 89 }, 90 ConfigFiles: map[string]string{ 91 "./testdata/testfile.txt": "/etc/nope.conf", 92 }, 93 }, 94 Overrides: map[string]config.NFPMOverridables{ 95 "rpm": { 96 ConfigFiles: map[string]string{ 97 "./testdata/testfile.txt": "/etc/nope-rpm.conf", 98 }, 99 }, 100 }, 101 }, 102 }) 103 ctx.Git = context.GitInfo{CurrentTag: "v1.0.0"} 104 for _, goos := range []string{"linux", "darwin"} { 105 for _, goarch := range []string{"amd64", "386"} { 106 ctx.Artifacts.Add(artifact.Artifact{ 107 Name: "mybin", 108 Path: binPath, 109 Goarch: goarch, 110 Goos: goos, 111 Type: artifact.Binary, 112 }) 113 } 114 } 115 assert.NoError(t, Pipe{}.Run(ctx)) 116 assert.Len(t, ctx.Config.NFPM.Files, 1, "should not modify the config file list") 117 } 118 119 func TestInvalidNameTemplate(t *testing.T) { 120 var ctx = &context.Context{ 121 Parallelism: runtime.NumCPU(), 122 Artifacts: artifact.New(), 123 Config: config.Project{ 124 NFPM: config.NFPM{ 125 NFPMOverridables: config.NFPMOverridables{NameTemplate: "{{.Foo}"}, 126 Formats: []string{"deb"}, 127 }, 128 }, 129 } 130 ctx.Artifacts.Add(artifact.Artifact{ 131 Name: "mybin", 132 Goos: "linux", 133 Goarch: "amd64", 134 Type: artifact.Binary, 135 }) 136 assert.Contains(t, Pipe{}.Run(ctx).Error(), `template: {{.Foo}:1: unexpected "}" in operand`) 137 } 138 139 func TestCreateFileDoesntExist(t *testing.T) { 140 folder, err := ioutil.TempDir("", "archivetest") 141 assert.NoError(t, err) 142 var dist = filepath.Join(folder, "dist") 143 assert.NoError(t, os.Mkdir(dist, 0755)) 144 assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 145 var ctx = context.New(config.Project{ 146 Dist: dist, 147 ProjectName: "asd", 148 NFPM: config.NFPM{ 149 Formats: []string{"deb", "rpm"}, 150 NFPMOverridables: config.NFPMOverridables{ 151 Files: map[string]string{ 152 "testdata/testfile.txt": "/var/lib/test/testfile.txt", 153 }, 154 }, 155 }, 156 }) 157 ctx.Git = context.GitInfo{ 158 CurrentTag: "v1.2.3", 159 } 160 ctx.Artifacts.Add(artifact.Artifact{ 161 Name: "mybin", 162 Path: filepath.Join(dist, "mybin", "mybin"), 163 Goos: "linux", 164 Goarch: "amd64", 165 Type: artifact.Binary, 166 }) 167 assert.Contains(t, Pipe{}.Run(ctx).Error(), `dist/mybin/mybin: file does not exist`) 168 } 169 170 func TestInvalidConfig(t *testing.T) { 171 folder, err := ioutil.TempDir("", "archivetest") 172 assert.NoError(t, err) 173 var dist = filepath.Join(folder, "dist") 174 assert.NoError(t, os.Mkdir(dist, 0755)) 175 assert.NoError(t, os.Mkdir(filepath.Join(dist, "mybin"), 0755)) 176 var ctx = context.New(config.Project{ 177 Dist: dist, 178 NFPM: config.NFPM{ 179 Formats: []string{"deb"}, 180 }, 181 }) 182 ctx.Artifacts.Add(artifact.Artifact{ 183 Name: "mybin", 184 Path: filepath.Join(dist, "mybin", "mybin"), 185 Goos: "linux", 186 Goarch: "amd64", 187 Type: artifact.Binary, 188 }) 189 assert.Contains(t, Pipe{}.Run(ctx).Error(), `invalid nfpm config: package name cannot be empty`) 190 } 191 192 func TestDefault(t *testing.T) { 193 var ctx = &context.Context{ 194 Config: config.Project{ 195 NFPM: config.NFPM{}, 196 }, 197 } 198 assert.NoError(t, Pipe{}.Default(ctx)) 199 assert.Equal(t, "/usr/local/bin", ctx.Config.NFPM.Bindir) 200 assert.Equal(t, defaultNameTemplate, ctx.Config.NFPM.NameTemplate) 201 } 202 203 func TestDefaultSet(t *testing.T) { 204 var ctx = &context.Context{ 205 Config: config.Project{ 206 NFPM: config.NFPM{ 207 Bindir: "/bin", 208 NFPMOverridables: config.NFPMOverridables{ 209 NameTemplate: "foo", 210 }, 211 }, 212 }, 213 } 214 assert.NoError(t, Pipe{}.Default(ctx)) 215 assert.Equal(t, "/bin", ctx.Config.NFPM.Bindir) 216 assert.Equal(t, "foo", ctx.Config.NFPM.NameTemplate) 217 } 218 219 func TestOverrides(t *testing.T) { 220 var ctx = &context.Context{ 221 Config: config.Project{ 222 NFPM: config.NFPM{ 223 Bindir: "/bin", 224 NFPMOverridables: config.NFPMOverridables{ 225 NameTemplate: "foo", 226 }, 227 Overrides: map[string]config.NFPMOverridables{ 228 "deb": { 229 NameTemplate: "bar", 230 }, 231 }, 232 }, 233 }, 234 } 235 assert.NoError(t, Pipe{}.Default(ctx)) 236 merged, err := mergeOverrides(ctx, "deb") 237 assert.NoError(t, err) 238 assert.Equal(t, "/bin", ctx.Config.NFPM.Bindir) 239 assert.Equal(t, "foo", ctx.Config.NFPM.NameTemplate) 240 assert.Equal(t, "bar", ctx.Config.NFPM.Overrides["deb"].NameTemplate) 241 assert.Equal(t, "bar", merged.NameTemplate) 242 }