commit ae81184d0c6aa8be7d10adac10e675d9096a3a3b from: Oliver Lowe date: Tue Jan 11 06:56:37 2022 UTC Add tests for user management commit - 76669f9b1f06b7299f2261667b4b21db38db7cae commit + ae81184d0c6aa8be7d10adac10e675d9096a3a3b blob - /dev/null blob + 24d38a09aaba3202d282123dd02b26cce1d5d930 (mode 644) --- /dev/null +++ testdata/users.json @@ -0,0 +1,42 @@ +{ + "results": [ + { + "attrs": { + "__name": "test", + "active": true, + "display_name": "test", + "email": "test@example.com", + "enable_notifications": true, + "groups": [], + "ha_mode": 0, + "last_notification": 0, + "name": "test", + "original_attributes": null, + "package": "_etc", + "pager": "", + "paused": false, + "period": "", + "source_location": { + "first_column": 1, + "first_line": 56, + "last_column": 18, + "last_line": 56, + "path": "/etc/icinga2/conf.d/ye.conf" + }, + "states": null, + "templates": [ + "test" + ], + "type": "User", + "types": null, + "vars": null, + "version": 0, + "zone": "" + }, + "joins": {}, + "meta": {}, + "name": "test", + "type": "User" + } + ] +} blob - /dev/null blob + a6b02927619bc505fe49e38d85a142d6b7705459 (mode 644) --- /dev/null +++ user_test.go @@ -0,0 +1,76 @@ +package icinga + +import ( + "crypto/tls" + "encoding/json" + "errors" + "net/http" + "os" + "reflect" + "testing" +) + +func TestUser(t *testing.T) { + want := User{Name: "test", Email: "test@example.com", Groups: []string{}} + f, err := os.Open("testdata/users.json") + if err != nil { + t.Fatal(err) + } + defer f.Close() + resp, err := parseResponse(f) + if err != nil { + t.Fatal(err) + } + obj, err := objectFromLookup(resp) + if err != nil { + t.Fatal(err) + } + got, ok := obj.(User) + if !ok { + t.Fatalf("want %T, got %T", want, got) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("want: %+v, got %+v", want, got) + } +} + +func TestUserMarshal(t *testing.T) { + user := &User{Name: "test", Email: "test@example.com", Groups: []string{}} + want := `{"attrs":{"email":"test@example.com"}}` + got, err := json.Marshal(user) + if err != nil { + t.Fatal(err) + } + if string(got) != want { + t.Fail() + } + t.Logf("want %s, got %s", want, got) +} + +func TestUserRoundTrip(t *testing.T) { + tp := http.DefaultTransport.(*http.Transport) + tp.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} + c := http.DefaultClient + c.Transport = tp + client, err := Dial("127.0.0.1:5665", "root", "8eec5ede1673b757", c) + if err != nil { + t.Skipf("no local test icinga? got: %v", err) + } + + want := User{Name: "olly", Email: "olly@example.com", Groups: []string{}} + if err := client.CreateUser(want); err != nil && !errors.Is(err, ErrExist) { + t.Fatal(err) + } + defer func() { + if err := client.DeleteUser(want.Name); err != nil { + t.Error(err) + } + }() + got, err := client.LookupUser(want.Name) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(want, got) { + t.Errorf("want %+v, got %+v", want, got) + } +}