17 rand.Seed(time.Now().Unix())
20 func randomHostname(suffix string) string {
21 var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
24 b[i] = letters[rand.Intn(len(letters))]
26 return string(b) + suffix
29 func createTestHosts(c *icinga.Client) ([]icinga.Host, error) {
30 hostgroup := icinga.HostGroup{Name: "test", DisplayName: "Test Group"}
31 if err := c.CreateHostGroup(hostgroup); err != nil && !errors.Is(err, icinga.ErrExist) {
35 var hosts []icinga.Host
36 for i := 0; i < 5; i++ {
38 Name: randomHostname(".example.org"),
39 CheckCommand: "random",
40 Groups: []string{hostgroup.Name},
42 hosts = append(hosts, h)
43 if err := c.CreateHost(h); err != nil && !errors.Is(err, icinga.ErrExist) {
50 func newTestClient() (*icinga.Client, error) {
51 tp := http.DefaultTransport.(*http.Transport)
52 tp.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
53 c := http.DefaultClient
55 return icinga.Dial("127.0.0.1:5665", "root", "icinga", c)
58 func compareStringSlice(a, b []string) bool {
70 func TestFilter(t *testing.T) {
71 client, err := newTestClient()
73 t.Skipf("no local test icinga? got: %v", err)
76 var want, got []string
77 hosts, err := createTestHosts(client)
81 for _, h := range hosts {
82 want = append(want, h.Name)
85 for _, h := range hosts {
86 if err := client.DeleteHost(h.Name, true); err != nil {
91 hosts, err = client.Hosts("match(\"*example.org\", host.name)")
95 for _, h := range hosts {
96 got = append(got, h.Name)
100 if !compareStringSlice(want, got) {
103 t.Logf("want %+v got %+v", want, got)
106 func TestUserRoundTrip(t *testing.T) {
107 client, err := newTestClient()
109 t.Skipf("no local test icinga? got: %v", err)
111 want := icinga.User{Name: "olly", Email: "olly@example.com", Groups: []string{}}
112 if err := client.CreateUser(want); err != nil && !errors.Is(err, icinga.ErrExist) {
116 if err := client.DeleteUser(want.Name, false); err != nil {
120 got, err := client.LookupUser(want.Name)
124 if !reflect.DeepEqual(want, got) {
125 t.Errorf("want %+v, got %+v", want, got)
129 func TestChecker(t *testing.T) {
130 client, err := newTestClient()
132 t.Skipf("no local test icinga? got: %v", err)
136 Name: randomHostname(".checker.example.com"),
137 CheckCommand: "hostalive",
139 if err := client.CreateHost(h); err != nil {
144 Name: h.Name + "!http",
145 CheckCommand: "http",
147 if err := client.CreateService(s); err != nil {
150 if err := s.Check(client); err != nil {
153 s, err = client.LookupService(h.Name + "!http")
160 func TestCheckHostGroup(t *testing.T) {
161 client, err := newTestClient()
163 t.Skipf("no local test icinga? got: %v", err)
165 hosts, err := createTestHosts(client)
170 for _, h := range hosts {
171 if err := client.DeleteHost(h.Name, true); err != nil {
176 hostgroup, err := client.LookupHostGroup("test")
180 if err := hostgroup.Check(client); err != nil {
185 func TestCreateService(t *testing.T) {
186 client, err := newTestClient()
188 t.Skipf("no local test icinga? got: %v", err)
193 Address: "example.com",
194 CheckCommand: "dummy",
195 DisplayName: "RFC 2606 example host",
197 if err := client.CreateHost(h); err != nil {
200 defer client.DeleteHost(h.Name, true)
202 Name: h.Name + "!http",
203 CheckCommand: "http",
204 DisplayName: "RFC 2606 example website",
206 if err := client.CreateService(s); err != nil {
211 func TestNonExistentService(t *testing.T) {
212 client, err := newTestClient()
214 t.Skipf("no local test icinga? got: %v", err)
217 filter := `match("blablabla", service.name)`
218 service, err := client.Services(filter)
223 t.Logf("%+v", service)