commit ae81184d0c6aa8be7d10adac10e675d9096a3a3b
parent 76669f9b1f06b7299f2261667b4b21db38db7cae
Author: Oliver Lowe <o@olowe.co>
Date: Tue, 11 Jan 2022 17:56:37 +1100
Add tests for user management
Diffstat:
| A | testdata/users.json | | | 42 | ++++++++++++++++++++++++++++++++++++++++++ |
| A | user_test.go | | | 76 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 118 insertions(+), 0 deletions(-)
diff --git a/testdata/users.json b/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"
+ }
+ ]
+}
diff --git a/user_test.go b/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)
+ }
+}