Blob


1 package icinga
3 import (
4 "crypto/tls"
5 "encoding/json"
6 "errors"
7 "net/http"
8 "os"
9 "reflect"
10 "testing"
11 )
13 func TestUser(t *testing.T) {
14 want := User{Name: "test", Email: "test@example.com", Groups: []string{}}
15 f, err := os.Open("testdata/users.json")
16 if err != nil {
17 t.Fatal(err)
18 }
19 defer f.Close()
20 resp, err := parseResponse(f)
21 if err != nil {
22 t.Fatal(err)
23 }
24 obj, err := objectFromLookup(resp)
25 if err != nil {
26 t.Fatal(err)
27 }
28 got, ok := obj.(User)
29 if !ok {
30 t.Fatalf("want %T, got %T", want, got)
31 }
32 if !reflect.DeepEqual(want, got) {
33 t.Errorf("want: %+v, got %+v", want, got)
34 }
35 }
37 func TestUserMarshal(t *testing.T) {
38 user := &User{Name: "test", Email: "test@example.com", Groups: []string{}}
39 want := `{"attrs":{"email":"test@example.com"}}`
40 got, err := json.Marshal(user)
41 if err != nil {
42 t.Fatal(err)
43 }
44 if string(got) != want {
45 t.Fail()
46 }
47 t.Logf("want %s, got %s", want, got)
48 }
50 func TestUserRoundTrip(t *testing.T) {
51 tp := http.DefaultTransport.(*http.Transport)
52 tp.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
53 c := http.DefaultClient
54 c.Transport = tp
55 client, err := Dial("127.0.0.1:5665", "root", "8eec5ede1673b757", c)
56 if err != nil {
57 t.Skipf("no local test icinga? got: %v", err)
58 }
60 want := User{Name: "olly", Email: "olly@example.com", Groups: []string{}}
61 if err := client.CreateUser(want); err != nil && !errors.Is(err, ErrExist) {
62 t.Fatal(err)
63 }
64 defer func() {
65 if err := client.DeleteUser(want.Name); err != nil {
66 t.Error(err)
67 }
68 }()
69 got, err := client.LookupUser(want.Name)
70 if err != nil {
71 t.Fatal(err)
72 }
73 if !reflect.DeepEqual(want, got) {
74 t.Errorf("want %+v, got %+v", want, got)
75 }
76 }