commit 730f973b47017c91cc9487391554c7ecc861dfc8 from: Oliver Lowe date: Tue Jan 11 07:17:00 2022 UTC Add test for getting objects with a filter commit - ae81184d0c6aa8be7d10adac10e675d9096a3a3b commit + 730f973b47017c91cc9487391554c7ecc861dfc8 blob - /dev/null blob + c306c079c0887aeabf9a9a65c029f758d2555e5c (mode 644) --- /dev/null +++ host_test.go @@ -0,0 +1,68 @@ +package icinga + +import ( + "crypto/tls" + "errors" + "math/rand" + "net/http" + "sort" + "testing" +) + +func randomHostname() string { + var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") + b := make([]rune, 8) + for i := range b { + b[i] = letters[rand.Intn(len(letters))] + } + return string(b) + ".example.org" +} + +func compareStringSlice(a, b []string) bool { + if len(a) != len(b) { + return false + } + for i, v := range a { + if v != b[i] { + return false + } + } + return true +} + +func TestFilter(t *testing.T) { + tp := http.DefaultTransport.(*http.Transport) + tp.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} + c := http.DefaultClient + c.Transport = tp + client, err := Dial("127.0.0.1:5665", "root", "8eec5ede1673b757", c) + if err != nil { + t.Skipf("no local test icinga? got: %v", err) + } + + var want, got []string + for i := 0; i < 5; i++ { + h := Host{Name: randomHostname(), CheckCommand: "hostalive"} + want = append(want, h.Name) + if err := client.CreateHost(h); err != nil { + if !errors.Is(err, ErrExist) { + t.Error(err) + } + continue + } + t.Logf("created host %s", h.Name) + } + hosts, err := client.FilterHosts("match(\"*example.org\", host.name)") + if err != nil { + t.Fatal(err) + } + for _, h := range hosts { + got = append(got, h.Name) + } + sort.Strings(want) + sort.Strings(got) + if !compareStringSlice(want, got) { + t.Fail() + } + t.Logf("want %+v got %+v", want, got) +}