1
1
Fork 0
mirror of https://github.com/goreleaser/nfpm synced 2024-05-24 05:56:16 +02:00
nfpm/rpm/rpm_test.go

179 lines
4.2 KiB
Go
Raw Normal View History

2018-02-03 20:42:56 +01:00
package rpm
import (
2018-02-18 21:13:47 +01:00
"bytes"
"flag"
2018-02-12 22:15:37 +01:00
"io/ioutil"
"os"
2018-02-03 20:42:56 +01:00
"testing"
2018-02-05 02:53:22 +01:00
"github.com/goreleaser/nfpm"
2018-02-05 03:54:03 +01:00
"github.com/stretchr/testify/assert"
2018-02-03 20:42:56 +01:00
)
2018-02-18 21:13:47 +01:00
var update = flag.Bool("update", false, "update .golden files")
2018-03-28 19:22:19 +02:00
func exampleInfo() nfpm.Info {
return nfpm.WithDefaults(nfpm.Info{
Name: "foo",
Arch: "amd64",
Depends: []string{
"bash",
},
Recommends: []string{
"git",
},
Suggests: []string{
"bash",
},
Replaces: []string{
"svn",
},
Provides: []string{
"bzr",
},
Conflicts: []string{
"zsh",
},
Description: "Foo does things",
Priority: "extra",
Maintainer: "Carlos A Becker <pkg@carlosbecker.com>",
Version: "1.0.0",
Section: "default",
Homepage: "http://carlosbecker.com",
Vendor: "nope",
License: "MIT",
Bindir: "/usr/local/bin",
Files: map[string]string{
"../testdata/fake": "/usr/local/bin/fake",
},
ConfigFiles: map[string]string{
"../testdata/whatever.conf": "/etc/fake/fake.conf",
},
Scripts: nfpm.Scripts{
PreInstall: "../testdata/scripts/preinstall.sh",
PostInstall: "../testdata/scripts/postinstall.sh",
PreRemove: "../testdata/scripts/preremove.sh",
PostRemove: "../testdata/scripts/postremove.sh",
},
2018-03-28 19:22:19 +02:00
})
}
2018-02-18 21:13:47 +01:00
func TestSpec(t *testing.T) {
2018-02-18 22:54:15 +01:00
for golden, vs := range map[string]rpmbuildVersion{
2018-02-18 23:32:47 +01:00
"testdata/spec_4.14.x.golden": {4, 14, 2},
"testdata/spec_4.13.x.golden": {4, 13, 1},
"testdata/spec_4.12.x.golden": {4, 12, 9},
} {
t.Run(golden, func(tt *testing.T) {
var w bytes.Buffer
2018-03-28 19:22:19 +02:00
assert.NoError(tt, writeSpec(&w, exampleInfo(), vs))
if *update {
ioutil.WriteFile(golden, w.Bytes(), 0655)
}
bts, err := ioutil.ReadFile(golden)
assert.NoError(tt, err)
assert.Equal(tt, string(bts), w.String())
})
2018-02-18 21:13:47 +01:00
}
}
2018-02-03 20:42:56 +01:00
func TestRPM(t *testing.T) {
2018-03-28 19:22:19 +02:00
var err = Default.Package(exampleInfo(), ioutil.Discard)
2018-02-03 20:42:56 +01:00
assert.NoError(t, err)
}
2018-02-16 22:11:52 +01:00
func TestRPMVersionWithDash(t *testing.T) {
info := exampleInfo()
info.Version = "1.0.0-beta"
var err = Default.Package(info, ioutil.Discard)
assert.NoError(t, err)
}
func TestRPMScripts(t *testing.T) {
info := exampleInfo()
scripts, err := readScripts(info)
assert.NoError(t, err)
for actual, src := range map[string]string{
scripts.Pre: info.Scripts.PreInstall,
scripts.Post: info.Scripts.PostInstall,
scripts.Preun: info.Scripts.PreRemove,
scripts.Postun: info.Scripts.PostRemove,
} {
data, err := ioutil.ReadFile(src)
assert.NoError(t, err)
assert.Equal(t, string(data), actual)
}
}
2018-03-28 19:22:19 +02:00
func TestRPMNoFiles(t *testing.T) {
info := exampleInfo()
info.Files = map[string]string{}
info.ConfigFiles = map[string]string{}
var err = Default.Package(info, ioutil.Discard)
// TODO: better deal with this error
2018-02-16 22:11:52 +01:00
assert.Error(t, err)
}
func TestRPMBuildNotInPath(t *testing.T) {
path := os.Getenv("PATH")
defer os.Setenv("PATH", path)
assert.NoError(t, os.Setenv("PATH", ""))
var err = Default.Package(
nfpm.WithDefaults(nfpm.Info{}),
ioutil.Discard,
)
assert.EqualError(t, err, `rpmbuild not present in $PATH`)
}
2018-03-28 19:22:19 +02:00
func TestRPMBuildVersion(t *testing.T) {
2018-02-18 22:54:15 +01:00
v, err := getRpmbuildVersion()
assert.NoError(t, err)
assert.Equal(t, 4, v.Major)
assert.True(t, v.Minor >= 11)
assert.True(t, v.Path >= 0)
}
2018-03-06 01:02:26 +01:00
func TestRPMFileDoesNotExist(t *testing.T) {
2018-03-28 19:22:19 +02:00
info := exampleInfo()
info.Files = map[string]string{
"../testdata/": "/usr/local/bin/fake",
}
info.ConfigFiles = map[string]string{
"../testdata/whatever.confzzz": "/etc/fake/fake.conf",
}
var err = Default.Package(info, ioutil.Discard)
assert.EqualError(t, err, "../testdata/whatever.confzzz: file does not exist")
}
2018-03-06 01:02:26 +01:00
func TestParseRpmbuildVersion(t *testing.T) {
for _, version := range []string{
"RPM-Version 4.14.1",
"RPM version 4.14.1",
"RPM vers~ao 4.14.1",
"RPM versão 4.14.1",
"RPM-Versionzz 4.14.1",
2018-03-06 01:02:26 +01:00
} {
t.Run(version, func(t *testing.T) {
v, err := parseRPMbuildVersion(version)
assert.NoError(t, err)
assert.Equal(t, 4, v.Major)
assert.Equal(t, 14, v.Minor)
assert.Equal(t, 1, v.Path)
})
}
}
func TestParseRpmbuildVersionError(t *testing.T) {
for _, version := range []string{
"nooo foo bar 1.2.3",
"RPM version 4.14.a",
"RPM version 4.14",
} {
t.Run(version, func(t *testing.T) {
_, err := parseRPMbuildVersion(version)
assert.Error(t, err)
})
}
}