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

170 lines
3.9 KiB
Go
Raw Normal View History

2018-02-03 20:42:56 +01:00
package rpm
import (
"fmt"
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"
"github.com/sassoftware/go-rpmutils"
2018-02-05 03:54:03 +01:00
"github.com/stretchr/testify/assert"
2018-02-03 20:42:56 +01:00
)
const (
tagPrein = 0x03ff // 1023
tagPostin = 0x0400 // 1024
tagPreun = 0x0401 // 1025
tagPostun = 0x0402 // 1026
)
2018-02-18 21:13:47 +01:00
2019-03-20 01:48:14 +01:00
func exampleInfo() 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 01:48:14 +01:00
Arch: "amd64",
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",
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",
},
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
2018-02-03 20:42:56 +01:00
func TestRPM(t *testing.T) {
2019-03-20 01:48:14 +01: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 TestWithRPMTags(t *testing.T) {
var info = exampleInfo()
info.RPM = nfpm.RPM{
Group: "default",
Prefix: "/usr",
Release: "3",
}
var err = Default.Package(info, ioutil.Discard)
assert.NoError(t, err)
}
func TestRPMVersionWithDash(t *testing.T) {
2019-03-20 01:48:14 +01:00
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()
f, err := ioutil.TempFile(".", fmt.Sprintf("%s-%s-*.rpm", info.Name, info.Version))
defer func() {
_ = f.Close()
os.Remove(f.Name())
}()
assert.NoError(t, err)
err = Default.Package(info, f)
assert.NoError(t, err)
file, err := os.OpenFile(f.Name(), os.O_RDONLY, 0600) //nolint:gosec
assert.NoError(t, err)
rpm, err := rpmutils.ReadRpm(file)
assert.NoError(t, err)
data, err := rpm.Header.GetString(tagPrein)
assert.NoError(t, err)
assert.Equal(t, `#!/bin/bash
echo "Preinstall" > /dev/null
`, data, "Preinstall script does not match")
data, err = rpm.Header.GetString(tagPreun)
assert.NoError(t, err)
assert.Equal(t, `#!/bin/bash
echo "Preremove" > /dev/null
`, data, "Preremove script does not match")
data, err = rpm.Header.GetString(tagPostin)
assert.NoError(t, err)
assert.Equal(t, `#!/bin/bash
echo "Postinstall" > /dev/null
`, data, "Postinstall script does not match")
data, err = rpm.Header.GetString(tagPostun)
assert.NoError(t, err)
assert.Equal(t, `#!/bin/bash
echo "Postremove" > /dev/null
`, data, "Postremove script does not match")
}
2018-03-28 19:22:19 +02:00
func TestRPMNoFiles(t *testing.T) {
2019-03-20 01:48:14 +01:00
info := exampleInfo()
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)
}
func TestRPMFileDoesNotExist(t *testing.T) {
2019-03-20 01:48:14 +01:00
info := exampleInfo()
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)
assert.EqualError(t, err, "../testdata/whatever.confzzz: file does not exist")
}
func TestRPMMultiArch(t *testing.T) {
info := exampleInfo()
for k := range archToRPM {
info.Arch = k
info = ensureValidArch(info)
assert.Equal(t, archToRPM[k], info.Arch)
}
}