icinga

Icinga2 API client in Go
git clone https://git.olowe.co/icinga
Log | Files | Refs | README | LICENSE

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:
Atestdata/users.json | 42++++++++++++++++++++++++++++++++++++++++++
Auser_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) + } +}