mirror of
https://github.com/fleetdm/fleet
synced 2026-05-23 08:58:41 +00:00
#22473 - [X] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/Committing-Changes.md#changes-files) for more information. - [X] Added/updated tests - [X] Manual QA for all new/changed functionality - For Orbit and Fleet Desktop changes: - [x] Manual QA must be performed in the three main OSs, macOS, Windows and Linux. --------- Co-authored-by: RachelElysia <71795832+RachelElysia@users.noreply.github.com> Co-authored-by: Ian Littman <iansltx@gmail.com>
94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
package file
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/fleetdm/fleet/v4/orbit/pkg/constant"
|
|
"github.com/goreleaser/nfpm/v2"
|
|
"github.com/goreleaser/nfpm/v2/files"
|
|
"github.com/goreleaser/nfpm/v2/rpm"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestExtractRPMMetadata(t *testing.T) {
|
|
//
|
|
// Build an RPM package on the fly with nfpm.
|
|
//
|
|
tmpDir := t.TempDir()
|
|
err := os.WriteFile(filepath.Join(tmpDir, "foo.sh"), []byte("#!/bin/sh\n\necho \"Foo!\"\n"), constant.DefaultFileMode)
|
|
require.NoError(t, err)
|
|
contents := files.Contents{
|
|
&files.Content{
|
|
Source: filepath.Join(tmpDir, "**"),
|
|
Destination: "/",
|
|
},
|
|
}
|
|
postInstallPath := filepath.Join(t.TempDir(), "postinstall.sh")
|
|
err = os.WriteFile(postInstallPath, []byte("#!/bin/sh\n\necho \"Hello world!\"\n"), constant.DefaultFileMode)
|
|
require.NoError(t, err)
|
|
info := &nfpm.Info{
|
|
Name: "foobar",
|
|
Version: "1.2.3",
|
|
Description: "Foo bar",
|
|
Arch: "x86_64",
|
|
Maintainer: "Fleet Device Management",
|
|
Vendor: "Fleet Device Management",
|
|
License: "LICENSE",
|
|
Homepage: "https://example.com",
|
|
Overridables: nfpm.Overridables{
|
|
Contents: contents,
|
|
Scripts: nfpm.Scripts{
|
|
PostInstall: postInstallPath,
|
|
},
|
|
},
|
|
}
|
|
rpmPath := filepath.Join(t.TempDir(), "foobar.rpm")
|
|
out, err := os.OpenFile(rpmPath, os.O_CREATE|os.O_RDWR, constant.DefaultFileMode)
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
out.Close()
|
|
})
|
|
err = rpm.Default.Package(info, out)
|
|
require.NoError(t, err)
|
|
err = out.Close()
|
|
require.NoError(t, err)
|
|
|
|
//
|
|
// Test ExtractRPMMetadata with the generated package.
|
|
// Using ExtractInstallerMetadata for broader testing (for a file
|
|
// with rpm extension it will call ExtractRPMMetadata).
|
|
//
|
|
f, err := os.Open(rpmPath)
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
f.Close()
|
|
})
|
|
m, err := ExtractInstallerMetadata(f)
|
|
require.NoError(t, err)
|
|
err = f.Close()
|
|
require.NoError(t, err)
|
|
require.Empty(t, m.BundleIdentifier)
|
|
require.Equal(t, "rpm", m.Extension)
|
|
require.Equal(t, "foobar", m.Name)
|
|
require.Equal(t, []string{"foobar"}, m.PackageIDs)
|
|
require.Equal(t, sha256FilePath(t, rpmPath), m.SHASum)
|
|
require.Equal(t, "1.2.3", m.Version)
|
|
}
|
|
|
|
func sha256FilePath(t *testing.T, path string) []byte {
|
|
f, err := os.Open(path)
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
f.Close()
|
|
})
|
|
h := sha256.New()
|
|
_, err = io.Copy(h, f)
|
|
require.NoError(t, err)
|
|
err = f.Close()
|
|
require.NoError(t, err)
|
|
return h.Sum(nil)
|
|
}
|