fleet/cmd/fleetctl/integrationtest/package/package_test.go
Victor Lyuboslavsky 33396a5d91
Moved some integration tests into their own package. (#28978)
For #27927 

Refactoring to speed up fleetctl tests, no functional changes. Mostly
changing test files.

fleetctl is no longer the long pole in CI, the long pole is mysql,
followed by vuln.

<img width="389" alt="image"
src="https://github.com/user-attachments/assets/9ada64e2-b5e8-42e3-b120-4eb36183ae38"
/>
2025-05-09 09:26:57 -05:00

73 lines
2.9 KiB
Go

package _package
import (
"fmt"
"os"
"path/filepath"
"runtime"
"testing"
"github.com/fleetdm/fleet/v4/cmd/fleetctl/fleetctl"
"github.com/fleetdm/fleet/v4/orbit/pkg/packaging"
"github.com/fleetdm/fleet/v4/orbit/pkg/update"
"github.com/fleetdm/fleet/v4/pkg/nettest"
"github.com/stretchr/testify/require"
)
func TestPackage(t *testing.T) {
nettest.Run(t)
updateOpt := update.DefaultOptions
updateOpt.RootDirectory = t.TempDir()
updatesData, err := packaging.InitializeUpdates(updateOpt)
require.NoError(t, err)
// --type is required
fleetctl.RunAppCheckErr(t, []string{"package", "deb"}, "Required flag \"type\" not set")
// if you provide -fleet-url & --enroll-secret are required together
fleetctl.RunAppCheckErr(t, []string{"package", "--type=deb", "--fleet-url=https://localhost:8080"},
"--enroll-secret and --fleet-url must be provided together")
fleetctl.RunAppCheckErr(t, []string{"package", "--type=deb", "--enroll-secret=foobar"}, "--enroll-secret and --fleet-url must be provided together")
// --insecure and --fleet-certificate are mutually exclusive
fleetctl.RunAppCheckErr(t, []string{"package", "--type=deb", "--insecure", "--fleet-certificate=test123"},
"--insecure and --fleet-certificate may not be provided together")
// Test invalid PEM file provided in --fleet-certificate.
certDir := t.TempDir()
fleetCertificate := filepath.Join(certDir, "fleet.pem")
err = os.WriteFile(fleetCertificate, []byte("undefined"), os.FileMode(0o644))
require.NoError(t, err)
fleetctl.RunAppCheckErr(t, []string{"package", "--type=deb", fmt.Sprintf("--fleet-certificate=%s", fleetCertificate)},
fmt.Sprintf("failed to read fleet server certificate %q: invalid PEM file", fleetCertificate))
if runtime.GOOS != "linux" {
fleetctl.RunAppCheckErr(t, []string{"package", "--type=msi", "--native-tooling"}, "native tooling is only available in Linux")
}
t.Run("deb", func(t *testing.T) {
fleetctl.RunAppForTest(t, []string{"package", "--type=deb", "--insecure", "--disable-open-folder"})
info, err := os.Stat(fmt.Sprintf("fleet-osquery_%s_amd64.deb", updatesData.OrbitVersion))
require.NoError(t, err)
require.Greater(t, info.Size(), int64(0)) // TODO verify contents
})
t.Run("--use-sytem-configuration can't be used on installers that aren't pkg", func(t *testing.T) {
for _, p := range []string{"deb", "msi", "rpm", ""} {
fleetctl.RunAppCheckErr(
t,
[]string{"package", fmt.Sprintf("--type=%s", p), "--use-system-configuration"},
"--use-system-configuration is only available for pkg installers",
)
}
})
// fleet-osquery.msi
// runAppForTest(t, []string{"package", "--type=msi", "--insecure"}) TODO: this is currently failing on Github runners due to permission issues
// info, err = os.Stat("orbit-osquery_0.0.3.msi")
// require.NoError(t, err)
// require.Greater(t, info.Size(), int64(0))
// runAppForTest(t, []string{"package", "--type=pkg", "--insecure"}) TODO: had a hard time getting xar installed on Ubuntu
}