15 func randomHostname() string {
16 var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
19 b[i] = letters[rand.Intn(len(letters))]
21 return string(b) + ".example.org"
24 func newTestClient() (*icinga.Client, error) {
25 tp := http.DefaultTransport.(*http.Transport)
26 tp.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
27 c := http.DefaultClient
29 return icinga.Dial("127.0.0.1:5665", "root", "icinga", c)
32 func compareStringSlice(a, b []string) bool {
44 func TestFilter(t *testing.T) {
45 client, err := newTestClient()
47 t.Skipf("no local test icinga? got: %v", err)
50 hostgroup := icinga.HostGroup{Name: "examples", DisplayName: "Test Group"}
51 if err := client.CreateHostGroup(hostgroup); err != nil {
54 hostgroup, err = client.LookupHostGroup(hostgroup.Name)
58 defer client.DeleteHostGroup(hostgroup.Name)
60 var want, got []string
61 for i := 0; i < 5; i++ {
63 Name: randomHostname(),
64 CheckCommand: "hostalive",
65 Groups: []string{hostgroup.Name},
67 want = append(want, h.Name)
68 if err := client.CreateHost(h); err != nil {
69 if !errors.Is(err, icinga.ErrExist) {
74 t.Logf("created host %s", h.Name)
77 for _, name := range want {
78 if err := client.DeleteHost(name); err != nil {
83 hosts, err := client.Hosts("match(\"*example.org\", host.name)")
87 for _, h := range hosts {
88 got = append(got, h.Name)
92 if !compareStringSlice(want, got) {
95 t.Logf("want %+v got %+v", want, got)
98 func TestUserRoundTrip(t *testing.T) {
99 client, err := newTestClient()
101 t.Skipf("no local test icinga? got: %v", err)
103 want := icinga.User{Name: "olly", Email: "olly@example.com", Groups: []string{}}
104 if err := client.CreateUser(want); err != nil && !errors.Is(err, icinga.ErrExist) {
108 if err := client.DeleteUser(want.Name); err != nil {
112 got, err := client.LookupUser(want.Name)
116 if !reflect.DeepEqual(want, got) {
117 t.Errorf("want %+v, got %+v", want, got)
121 func TestChecker(t *testing.T) {
122 client, err := newTestClient()
124 t.Skipf("no local test icinga? got: %v", err)
127 s := icinga.Service{Name: "9p.io!http"}
128 if err := s.Check(client); err != nil {
131 s, err = client.LookupService("9p.io!http")