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