Blob


1 package icinga
3 import (
4 "errors"
5 "math/rand"
6 "sort"
7 "testing"
8 )
10 func randomHostname() string {
11 var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
12 b := make([]rune, 8)
13 for i := range b {
14 b[i] = letters[rand.Intn(len(letters))]
15 }
16 return string(b) + ".example.org"
17 }
19 func compareStringSlice(a, b []string) bool {
20 if len(a) != len(b) {
21 return false
22 }
23 for i, v := range a {
24 if v != b[i] {
25 return false
26 }
27 }
28 return true
29 }
31 func TestFilter(t *testing.T) {
32 client, err := newTestClient()
33 if err != nil {
34 t.Skipf("no local test icinga? got: %v", err)
35 }
37 hostgroup := HostGroup{Name: "examples", DisplayName: "Test Group"}
38 if err := client.CreateHostGroup(hostgroup); err != nil {
39 t.Error(err)
40 }
41 hostgroup, err = client.LookupHostGroup(hostgroup.Name)
42 if err != nil {
43 t.Error(err)
44 }
45 defer client.DeleteHostGroup(hostgroup.Name)
47 var want, got []string
48 for i := 0; i < 5; i++ {
49 h := Host{
50 Name: randomHostname(),
51 CheckCommand: "hostalive",
52 Groups: []string{hostgroup.Name},
53 }
54 want = append(want, h.Name)
55 if err := client.CreateHost(h); err != nil {
56 if !errors.Is(err, ErrExist) {
57 t.Error(err)
58 }
59 continue
60 }
61 t.Logf("created host %s", h.Name)
62 }
63 defer func() {
64 for _, name := range want {
65 if err := client.DeleteHost(name); err != nil {
66 t.Log(err)
67 }
68 }
69 }()
70 hosts, err := client.Hosts("match(\"*example.org\", host.name)")
71 if err != nil {
72 t.Fatal(err)
73 }
74 for _, h := range hosts {
75 got = append(got, h.Name)
76 }
77 sort.Strings(want)
78 sort.Strings(got)
79 if !compareStringSlice(want, got) {
80 t.Fail()
81 }
82 t.Logf("want %+v got %+v", want, got)
83 }