Commit Diff


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)
+	}
+}