fleet/tools/terraform/fleetdm_client/fleetdm_client_test.go

94 lines
3.2 KiB
Go
Raw Normal View History

package fleetdm_client
import (
"encoding/json"
"github.com/stretchr/testify/require"
"math/rand"
"os"
"testing"
)
var letters = []rune("abcdefghijklmnopqrstuvwxyz")
var defaultDescription = "Awesome description"
var defaultAgentOptions = `{"config":{"decorators":{"load":["SELECT uuid AS host_uuid FROM system_info;","SELECT hostname AS hostname FROM system_info;"]},"options":{"disable_distributed":false,"distributed_interval":10,"distributed_plugin":"tls","distributed_tls_max_attempts":3,"logger_tls_endpoint":"/api/osquery/log","logger_tls_period":10,"pack_delimiter":"/"}},"overrides":{}}`
func randTeam() string {
b := make([]rune, 6)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
return "aaa-" + string(b)
}
func TestBasic(t *testing.T) {
apiKey := os.Getenv("FLEETDM_APIKEY")
if apiKey == "" {
t.Skip("FLEETDM_APIKEY not set")
}
apiURL := os.Getenv("FLEETDM_URL")
if apiURL == "" {
t.Skip("FLEETDM_URL not set")
}
client := NewFleetDMClient(apiURL, apiKey)
require.NotNil(t, client)
// Create a nice default team
teamName := randTeam()
team, err := client.CreateTeam(teamName, defaultDescription)
require.NoError(t, err)
require.NotNil(t, team)
require.Equal(t, teamName, team.Team.Name)
require.Equal(t, defaultDescription, team.Team.Description)
aoBytes, err := json.Marshal(team.Team.AgentOptions)
require.NoError(t, err)
require.Equal(t, defaultAgentOptions, string(aoBytes))
// And verify we can get that team back
teamGotten, err := client.GetTeam(team.Team.ID)
require.NoError(t, err)
require.NotNil(t, teamGotten)
require.Equal(t, team.Team.ID, teamGotten.Team.ID)
require.Equal(t, team.Team.Name, teamGotten.Team.Name)
require.Equal(t, teamName, teamGotten.Team.Name)
require.Equal(t, defaultDescription, teamGotten.Team.Description)
aoBytes, err = json.Marshal(teamGotten.Team.AgentOptions)
require.NoError(t, err)
require.Equal(t, defaultAgentOptions, string(aoBytes))
// Set different agent options
newAO := `{"command_line_flags":{"disable_events":true},"config":{"options":{"logger_tls_endpoint":"/test"}},"overrides":{}}`
teamAO, err := client.UpdateAgentOptions(team.Team.ID, newAO)
require.NoError(t, err)
require.NotNil(t, teamAO)
require.Equal(t, team.Team.ID, teamAO.Team.ID)
aoBytes, err = json.Marshal(teamAO.Team.AgentOptions)
require.NoError(t, err)
require.Equal(t, newAO, string(aoBytes))
// Set a different description and different name
newName := randTeam()
newDescription := "New description"
teamUp, err := client.UpdateTeam(team.Team.ID, &newName, &newDescription)
require.NoError(t, err)
require.NotNil(t, teamUp)
require.Equal(t, team.Team.ID, teamUp.Team.ID)
require.Equal(t, newName, teamUp.Team.Name)
require.Equal(t, newDescription, teamUp.Team.Description)
// Lookup the team based on the new name
teamId, err := client.TeamNameToID(newName)
require.NoError(t, err)
require.NotEqual(t, 0, teamId)
require.Equal(t, teamUp.Team.ID, teamId)
require.Equal(t, newName, teamUp.Team.Name)
// And finally, delete the team
err = client.DeleteTeam(team.Team.ID)
require.NoError(t, err)
// And verify it's gone
teamDNE, err := client.GetTeam(team.Team.ID)
require.Error(t, err)
require.Nil(t, teamDNE)
}