97 lines
3.1 KiB
Go
97 lines
3.1 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestAgentEnrollmentTokenIsSingleUse(t *testing.T) {
|
|
store, err := openStore(":memory:")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer store.Close()
|
|
token, err := store.CreateAgentEnrollmentToken()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
credentials, err := store.EnrollAgent(agentEnrollmentRequest{Token: token, Name: "docker-01", Hostname: "vm105", VMID: 105})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if credentials.ID == "" || credentials.Secret == "" {
|
|
t.Fatal("credentials were not generated")
|
|
}
|
|
if _, err = store.EnrollAgent(agentEnrollmentRequest{Token: token, Hostname: "duplicate"}); err == nil {
|
|
t.Fatal("token was accepted twice")
|
|
}
|
|
}
|
|
|
|
func TestCurrentAgentUpdateManifestMatchesExecutable(t *testing.T) {
|
|
manifest, path, err := currentAgentUpdate()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if manifest.URL != "/api/agent/binary" || len(manifest.SHA256) != 64 {
|
|
t.Fatalf("unexpected manifest: %#v", manifest)
|
|
}
|
|
if _, err = os.Stat(path); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestAgentOnlyInstallsNewerVersion(t *testing.T) {
|
|
if !newerAgentVersion("v0.14.0", "v0.13.0") {
|
|
t.Fatal("new version was not detected")
|
|
}
|
|
if newerAgentVersion("v0.12.0", "v0.13.0") {
|
|
t.Fatal("downgrade was allowed")
|
|
}
|
|
if newerAgentVersion("v0.13.0", "v0.13.0") {
|
|
t.Fatal("same version was offered")
|
|
}
|
|
}
|
|
|
|
func TestAgentReportAuthenticationAndOfflineState(t *testing.T) {
|
|
store, err := openStore(":memory:")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer store.Close()
|
|
token, _ := store.CreateAgentEnrollmentToken()
|
|
credentials, _ := store.EnrollAgent(agentEnrollmentRequest{Token: token, Name: "docker", Hostname: "vm", VMID: 101})
|
|
report := AgentReport{Hostname: "vm", Version: "test", DockerAvailable: true, Containers: []AgentContainer{{ID: "abc", Name: "web", State: "running"}}}
|
|
if err = store.SaveAgentReport(credentials.ID, "wrong", "127.0.0.1", report); err == nil {
|
|
t.Fatal("invalid secret accepted")
|
|
}
|
|
if err = store.SaveAgentReport(credentials.ID, credentials.Secret, "127.0.0.1", report); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
agents, err := store.Agents()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(agents) != 1 || !agents[0].Online || len(agents[0].Report.Containers) != 1 {
|
|
t.Fatalf("unexpected agents: %#v", agents)
|
|
}
|
|
_, _ = store.db.Exec(`UPDATE agents SET last_seen=? WHERE id=?`, time.Now().Add(-time.Minute).Unix(), credentials.ID)
|
|
agents, _ = store.Agents()
|
|
if agents[0].Online {
|
|
t.Fatal("stale agent is online")
|
|
}
|
|
}
|
|
|
|
func TestAgentProblemsBecomeMaintenanceAwareAlerts(t *testing.T) {
|
|
metrics := dashboardMetrics{Agents: []ManagedAgent{{ID: "node", Name: "app", VMID: 105, Online: true, Report: AgentReport{
|
|
Services: []AgentService{{Name: "postgres.service", State: "failed", SubState: "failed"}},
|
|
Containers: []AgentContainer{{ID: "dead", Name: "web", State: "exited", Status: "Exited (1)"}}, DockerAvailable: true,
|
|
}}}}
|
|
alerts := evaluateAlerts(metrics, defaultThresholds())
|
|
window := MaintenanceWindow{Active: true, VMIDs: []int{105}}
|
|
active, planned := splitMaintenanceAlerts(alerts, window)
|
|
if len(planned) != 2 || len(active) != 0 {
|
|
t.Fatalf("active=%d planned=%d alerts=%#v", len(active), len(planned), alerts)
|
|
}
|
|
}
|