-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmanager_test.go
118 lines (99 loc) · 3.12 KB
/
manager_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package main
import (
"bytes"
"encoding/json"
"io"
"net/http"
"testing"
)
func encodeToReader(i interface{}) io.ReadCloser {
var b bytes.Buffer
json.NewEncoder(&b).Encode(i)
return io.NopCloser(&b)
}
func TestDecodeMemberList(t *testing.T) {
gMember1 := googleMember{"[email protected]"}
gMember2 := googleMember{"[email protected]"}
gMemberList := googleMemberList{
Members: []googleMember{gMember1, gMember2},
}
r := encodeToReader(gMemberList)
memberList, err := decodeMemberList(r)
if err != nil {
t.Fatal(err)
}
if len(memberList.Members) != 2 {
t.Error("Unexpected MemberList", memberList.Members)
}
}
func TestAddSSHKeys(t *testing.T) {
dg := group{Name: "dummy group"}
emptyKey := googleKeys{SSH: ""}
schema := googleCustomSchema{Keys: emptyKey}
adminUser := googleAdminUser{CustomSchemas: schema}
r := encodeToReader(adminUser)
dg.addSSHKeys(r)
if len(dg.Keys) > 0 {
t.Error("empty key!", dg.Keys)
}
dummyKey := googleKeys{SSH: "dummy ssh key"}
schema = googleCustomSchema{Keys: dummyKey}
adminUser = googleAdminUser{CustomSchemas: schema}
r = encodeToReader(adminUser)
dg.addSSHKeys(r)
if len(dg.Keys) == 0 {
t.Error("Key not added", dg.Keys)
}
}
// Mock http Do function for requesting keys from googleapis
type mockTransport struct{}
func newMockTransport() http.RoundTripper {
return &mockTransport{}
}
func (t *mockTransport) RoundTrip(req *http.Request) (*http.Response, error) {
response := &http.Response{
Header: make(http.Header),
Request: req,
StatusCode: http.StatusOK,
}
response.Header.Set("Content-Type", "application/json")
if req.URL.String() == "https://www.googleapis.com/admin/directory/v1/groups/ingroup1/members" {
gMember1 := &googleMember{"[email protected]"}
gMember2 := &googleMember{"[email protected]"}
gMemberList := &googleMemberList{
Members: []googleMember{*gMember1, *gMember2},
}
response.Body = encodeToReader(*gMemberList)
} else if req.URL.String() == "https://www.googleapis.com/admin/directory/v1/users/[email protected]?customFieldMask=keys&projection=custom" {
dummyKey := &googleKeys{SSH: "dummy ssh key"}
schema := &googleCustomSchema{Keys: *dummyKey}
adminUser := &googleAdminUser{CustomSchemas: *schema}
response.Body = encodeToReader(*adminUser)
} else if req.URL.String() == "https://www.googleapis.com/admin/directory/v1/users/[email protected]?customFieldMask=keys&projection=custom" {
emptyKey := &googleKeys{SSH: ""}
schema := &googleCustomSchema{Keys: *emptyKey}
adminUser := &googleAdminUser{CustomSchemas: *schema}
response.Body = encodeToReader(*adminUser)
}
return response, nil
}
func TestGoogleGroupsIgnoreEmptyKeys(t *testing.T) {
client := http.DefaultClient
client.Transport = newMockTransport()
am := &authMap{client: client}
inputGroups := []string{"ingroup1"}
am.inputGroups = inputGroups
groups, err := am.groupsFromGoogle()
if err != nil {
t.Fatal(err)
}
if len(groups) > 1 {
t.Error("Got more groups than input")
}
if groups[0].Name != "ingroup1" {
t.Error("Got different group than requested")
}
if len(groups[0].Keys) > 1 {
t.Error("Got more keys (empty included)", groups[0].Keys)
}
}