icinga

Icinga2 API client in Go
git clone https://git.olowe.co/icinga
Log | Files | Refs | README | LICENSE

commit 730f973b47017c91cc9487391554c7ecc861dfc8
parent ae81184d0c6aa8be7d10adac10e675d9096a3a3b
Author: Oliver Lowe <o@olowe.co>
Date:   Tue, 11 Jan 2022 18:17:00 +1100

Add test for getting objects with a filter

Diffstat:
Ahost_test.go | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+), 0 deletions(-)

diff --git a/host_test.go b/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) +}