2018-02-03 20:42:56 +01:00
|
|
|
package rpm
|
|
|
|
|
|
|
|
import (
|
2018-02-18 21:13:47 +01:00
|
|
|
"bytes"
|
|
|
|
"flag"
|
2019-03-20 00:47:02 +01:00
|
|
|
"fmt"
|
2018-02-12 22:15:37 +01:00
|
|
|
"io/ioutil"
|
2018-02-16 23:50:13 +01:00
|
|
|
"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-09-12 18:17:59 +02:00
|
|
|
"github.com/stretchr/testify/require"
|
2018-02-03 20:42:56 +01:00
|
|
|
)
|
|
|
|
|
2019-03-04 14:14:05 +01:00
|
|
|
// nolint: gochecknoglobals
|
2018-02-18 21:13:47 +01:00
|
|
|
var update = flag.Bool("update", false, "update .golden files")
|
|
|
|
|
2019-03-20 00:47:02 +01:00
|
|
|
func exampleInfo(targetarch string) nfpm.Info {
|
2018-03-28 19:22:19 +02:00
|
|
|
return nfpm.WithDefaults(nfpm.Info{
|
2018-04-10 23:10:32 +02:00
|
|
|
Name: "foo",
|
2019-03-20 00:47:02 +01:00
|
|
|
Arch: targetarch,
|
2018-03-28 19:22:19 +02:00
|
|
|
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",
|
2018-04-10 17:39:43 +02:00
|
|
|
Overridables: nfpm.Overridables{
|
|
|
|
Depends: []string{
|
|
|
|
"bash",
|
|
|
|
},
|
|
|
|
Recommends: []string{
|
|
|
|
"git",
|
|
|
|
},
|
|
|
|
Suggests: []string{
|
|
|
|
"bash",
|
|
|
|
},
|
|
|
|
Replaces: []string{
|
|
|
|
"svn",
|
|
|
|
},
|
|
|
|
Provides: []string{
|
|
|
|
"bzr",
|
|
|
|
},
|
|
|
|
Conflicts: []string{
|
|
|
|
"zsh",
|
|
|
|
},
|
|
|
|
Files: map[string]string{
|
|
|
|
"../testdata/fake": "/usr/local/bin/fake",
|
|
|
|
},
|
|
|
|
ConfigFiles: map[string]string{
|
|
|
|
"../testdata/whatever.conf": "/etc/fake/fake.conf",
|
|
|
|
},
|
2018-05-17 01:58:56 +02:00
|
|
|
EmptyFolders: []string{
|
|
|
|
"/var/log/whatever",
|
|
|
|
"/usr/share/whatever",
|
|
|
|
},
|
2018-04-10 17:39:43 +02:00
|
|
|
Scripts: nfpm.Scripts{
|
|
|
|
PreInstall: "../testdata/scripts/preinstall.sh",
|
|
|
|
PostInstall: "../testdata/scripts/postinstall.sh",
|
|
|
|
PreRemove: "../testdata/scripts/preremove.sh",
|
|
|
|
PostRemove: "../testdata/scripts/postremove.sh",
|
|
|
|
},
|
2018-04-09 16:53:49 +02:00
|
|
|
},
|
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-07-09 04:19:51 +02:00
|
|
|
"testdata/spec_4.14.x.golden": {Major: 4, Minor: 14, Patch: 2},
|
|
|
|
"testdata/spec_4.13.x.golden": {Major: 4, Minor: 13, Patch: 1},
|
|
|
|
"testdata/spec_4.12.x.golden": {Major: 4, Minor: 12, Patch: 9},
|
2018-02-18 22:41:32 +01:00
|
|
|
} {
|
2019-03-04 14:14:05 +01:00
|
|
|
vs := vs
|
|
|
|
golden := golden
|
2018-02-18 22:41:32 +01:00
|
|
|
t.Run(golden, func(tt *testing.T) {
|
|
|
|
var w bytes.Buffer
|
2019-03-20 00:47:02 +01:00
|
|
|
assert.NoError(tt, writeSpec(&w, exampleInfo("amd64"), vs))
|
2018-02-18 22:41:32 +01:00
|
|
|
if *update {
|
2018-09-12 18:17:59 +02:00
|
|
|
require.NoError(t, ioutil.WriteFile(golden, w.Bytes(), 0655))
|
2018-02-18 22:41:32 +01:00
|
|
|
}
|
2018-09-12 18:17:59 +02:00
|
|
|
bts, err := ioutil.ReadFile(golden) //nolint:gosec
|
2018-02-18 22:41:32 +01:00
|
|
|
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) {
|
2019-03-20 00:47:02 +01:00
|
|
|
var err = Default.Package(exampleInfo("amd64"), ioutil.Discard)
|
2018-02-03 20:42:56 +01:00
|
|
|
assert.NoError(t, err)
|
|
|
|
}
|
2018-02-16 22:11:52 +01:00
|
|
|
|
2018-03-28 19:23:05 +02:00
|
|
|
func TestRPMVersionWithDash(t *testing.T) {
|
2019-03-20 00:47:02 +01:00
|
|
|
info := exampleInfo("amd64")
|
2018-03-28 19:23:05 +02:00
|
|
|
info.Version = "1.0.0-beta"
|
|
|
|
var err = Default.Package(info, ioutil.Discard)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
}
|
|
|
|
|
2018-04-09 16:53:49 +02:00
|
|
|
func TestRPMScripts(t *testing.T) {
|
2019-03-20 00:47:02 +01:00
|
|
|
info := exampleInfo("amd64")
|
2018-04-09 16:53:49 +02:00
|
|
|
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,
|
|
|
|
} {
|
2019-03-20 00:47:02 +01:00
|
|
|
data, err := ioutil.ReadFile(src) //nolint:gosec
|
|
|
|
fmt.Sprintf("%s %s %s", actual, src, data) //nolint.govet
|
2018-04-09 16:53:49 +02:00
|
|
|
assert.NoError(t, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-28 19:22:19 +02:00
|
|
|
func TestRPMNoFiles(t *testing.T) {
|
2019-03-20 00:47:02 +01:00
|
|
|
info := exampleInfo("amd64")
|
2018-03-28 19:22:19 +02:00
|
|
|
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)
|
|
|
|
}
|
2018-02-16 23:50:13 +01:00
|
|
|
|
|
|
|
func TestRPMBuildNotInPath(t *testing.T) {
|
2018-02-18 22:41:32 +01:00
|
|
|
path := os.Getenv("PATH")
|
|
|
|
defer os.Setenv("PATH", path)
|
2018-02-16 23:50:13 +01:00
|
|
|
assert.NoError(t, os.Setenv("PATH", ""))
|
|
|
|
var err = Default.Package(
|
|
|
|
nfpm.WithDefaults(nfpm.Info{}),
|
|
|
|
ioutil.Discard,
|
|
|
|
)
|
2018-02-18 22:41:32 +01:00
|
|
|
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()
|
2018-02-18 22:41:32 +01:00
|
|
|
assert.NoError(t, err)
|
|
|
|
assert.Equal(t, 4, v.Major)
|
|
|
|
assert.True(t, v.Minor >= 11)
|
2018-07-09 04:19:51 +02:00
|
|
|
assert.True(t, v.Patch >= 0)
|
2018-02-16 23:50:13 +01:00
|
|
|
}
|
2018-03-06 01:02:26 +01:00
|
|
|
|
2018-03-28 01:36:02 +02:00
|
|
|
func TestRPMFileDoesNotExist(t *testing.T) {
|
2019-03-20 00:47:02 +01:00
|
|
|
info := exampleInfo("amd64")
|
2018-03-28 19:22:19 +02:00
|
|
|
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)
|
2018-03-28 01:36:02 +02:00
|
|
|
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",
|
2018-03-12 14:27:42 +01:00
|
|
|
"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
|
|
|
} {
|
2019-03-04 14:14:05 +01:00
|
|
|
version := version
|
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)
|
2018-07-09 04:19:51 +02:00
|
|
|
assert.Equal(t, 1, v.Patch)
|
2018-03-06 01:02:26 +01:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2018-03-06 01:33:16 +01:00
|
|
|
|
|
|
|
func TestParseRpmbuildVersionError(t *testing.T) {
|
|
|
|
for _, version := range []string{
|
|
|
|
"nooo foo bar 1.2.3",
|
|
|
|
"RPM version 4.14.a",
|
|
|
|
"RPM version 4.14",
|
|
|
|
} {
|
2019-03-04 14:14:05 +01:00
|
|
|
version := version
|
2018-03-06 01:33:16 +01:00
|
|
|
t.Run(version, func(t *testing.T) {
|
|
|
|
_, err := parseRPMbuildVersion(version)
|
|
|
|
assert.Error(t, err)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|