Blob


1 package icinga
3 import (
4 "crypto/tls"
5 "errors"
6 "math/rand"
7 "net/http"
8 "sort"
9 "testing"
10 )
12 func randomHostname() string {
13 var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
14 b := make([]rune, 8)
15 for i := range b {
16 b[i] = letters[rand.Intn(len(letters))]
17 }
18 return string(b) + ".example.org"
19 }
21 func compareStringSlice(a, b []string) bool {
22 if len(a) != len(b) {
23 return false
24 }
25 for i, v := range a {
26 if v != b[i] {
27 return false
28 }
29 }
30 return true
31 }
33 func TestFilter(t *testing.T) {
34 tp := http.DefaultTransport.(*http.Transport)
35 tp.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
36 c := http.DefaultClient
37 c.Transport = tp
38 client, err := Dial("127.0.0.1:5665", "root", "8eec5ede1673b757", c)
39 if err != nil {
40 t.Skipf("no local test icinga? got: %v", err)
41 }
43 var want, got []string
44 for i := 0; i < 5; i++ {
45 h := Host{Name: randomHostname(), CheckCommand: "hostalive"}
46 want = append(want, h.Name)
47 if err := client.CreateHost(h); err != nil {
48 if !errors.Is(err, ErrExist) {
49 t.Error(err)
50 }
51 continue
52 }
53 t.Logf("created host %s", h.Name)
54 }
55 hosts, err := client.Hosts("match(\"*example.org\", host.name)")
56 if err != nil {
57 t.Fatal(err)
58 }
59 for _, h := range hosts {
60 got = append(got, h.Name)
61 }
62 sort.Strings(want)
63 sort.Strings(got)
64 if !compareStringSlice(want, got) {
65 t.Fail()
66 }
67 t.Logf("want %+v got %+v", want, got)
68 }