mirror of
https://github.com/fleetdm/fleet
synced 2026-05-01 18:37:37 +00:00
<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #33250 Waived most new failures. Planning to come back and fix some of them in subsequent PRs.
121 lines
3 KiB
Go
121 lines
3 KiB
Go
package update
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/fleetdm/fleet/v4/server/fleet"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var rawJSONFlags = json.RawMessage(`{"verbose":true, "num":5, "hello":"world", "largeNum":1234567890}`)
|
|
|
|
func TestGetFlagsFromJson(t *testing.T) {
|
|
flagsJson, err := getFlagsFromJSON(rawJSONFlags)
|
|
require.NoError(t, err)
|
|
|
|
require.NotEmpty(t, flagsJson)
|
|
|
|
value, ok := flagsJson["--verbose"]
|
|
if !ok {
|
|
t.Errorf(`key ""--verbose" expected but not found`)
|
|
}
|
|
if value != "true" {
|
|
t.Errorf(`expected "true", got %s`, value)
|
|
}
|
|
|
|
value, ok = flagsJson["--num"]
|
|
if !ok {
|
|
t.Errorf(`key "--num" expected but not found`)
|
|
}
|
|
if value != "5" {
|
|
t.Errorf(`expected "5", got %s`, value)
|
|
}
|
|
|
|
value, ok = flagsJson["--hello"]
|
|
if !ok {
|
|
t.Errorf(`key "--hello" expected but not found`)
|
|
}
|
|
if value != "world" {
|
|
t.Errorf(`expected "world", got %s`, value)
|
|
}
|
|
|
|
value, ok = flagsJson["--largeNum"]
|
|
if !ok {
|
|
t.Errorf(`key "--largeNum" expected but not found`)
|
|
}
|
|
if value != "1234567890" {
|
|
t.Errorf(`expected "1234567890", got %s`, value)
|
|
}
|
|
}
|
|
|
|
func TestWriteFlagFile(t *testing.T) {
|
|
flags, err := getFlagsFromJSON(rawJSONFlags)
|
|
require.NoError(t, err)
|
|
|
|
tempDir := t.TempDir()
|
|
err = writeFlagFile(tempDir, flags)
|
|
require.NoError(t, err)
|
|
|
|
diskFlags, err := readFlagFile(tempDir)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, diskFlags)
|
|
|
|
if !reflect.DeepEqual(flags, diskFlags) {
|
|
t.Errorf("expected flags to be equal: %v, %v", flags, diskFlags)
|
|
}
|
|
}
|
|
|
|
func touchFile(t *testing.T, name string) {
|
|
t.Helper()
|
|
|
|
file, err := os.OpenFile(name, os.O_RDONLY|os.O_CREATE, 0o644) // nolint:gosec // G302
|
|
require.NoError(t, err)
|
|
require.NoError(t, file.Close())
|
|
}
|
|
|
|
// TestDoFlagsUpdateWithEmptyFlags tests the scenario of Fleet flag `command_line_flags`
|
|
// being set to an empty JSON document `{}` and Orbit osquery.flags file being
|
|
// an empty file. Such scenario should trigger no update of flags.
|
|
func TestDoFlagsUpdateWithEmptyFlags(t *testing.T) {
|
|
rootDir := t.TempDir()
|
|
osqueryFlagsFile := filepath.Join(rootDir, "osquery.flags")
|
|
touchFile(t, osqueryFlagsFile)
|
|
|
|
testConfig := &fleet.OrbitConfig{
|
|
Flags: json.RawMessage("{}"),
|
|
}
|
|
|
|
var restartQueued bool
|
|
queueOrbitRestart := func(string) { restartQueued = true }
|
|
|
|
fr := NewFlagReceiver(queueOrbitRestart, FlagUpdateOptions{
|
|
RootDir: rootDir,
|
|
})
|
|
|
|
err := fr.Run(testConfig)
|
|
require.NoError(t, err)
|
|
require.False(t, restartQueued)
|
|
|
|
// Non-empty fleet flags and osquery.flags has empty flags.
|
|
testConfig = &fleet.OrbitConfig{
|
|
Flags: json.RawMessage(`{"--verbose": true}`),
|
|
}
|
|
err = fr.Run(testConfig)
|
|
require.NoError(t, err)
|
|
require.True(t, restartQueued)
|
|
|
|
// Empty Fleet flags and osquery.flags has non-empty flags.
|
|
restartQueued = false
|
|
testConfig = &fleet.OrbitConfig{
|
|
Flags: json.RawMessage("{}"),
|
|
}
|
|
err = os.WriteFile(osqueryFlagsFile, []byte("--verbose=true\n"), 0o644)
|
|
require.NoError(t, err)
|
|
err = fr.Run(testConfig)
|
|
require.NoError(t, err)
|
|
require.True(t, restartQueued)
|
|
}
|