1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package iam
16
17 import (
18 "fmt"
19 "sort"
20 "testing"
21
22 "cloud.google.com/go/internal/testutil"
23 )
24
25 func TestPolicy(t *testing.T) {
26 p := &Policy{}
27
28 add := func(member string, role RoleName) {
29 p.Add(member, role)
30 }
31 remove := func(member string, role RoleName) {
32 p.Remove(member, role)
33 }
34
35 if msg, ok := checkMembers(p, Owner, nil); !ok {
36 t.Fatal(msg)
37 }
38 add("m1", Owner)
39 if msg, ok := checkMembers(p, Owner, []string{"m1"}); !ok {
40 t.Fatal(msg)
41 }
42 add("m2", Owner)
43 if msg, ok := checkMembers(p, Owner, []string{"m1", "m2"}); !ok {
44 t.Fatal(msg)
45 }
46 add("m1", Owner)
47 if msg, ok := checkMembers(p, Owner, []string{"m1", "m2"}); !ok {
48 t.Fatal(msg)
49 }
50
51 if msg, ok := checkMembers(p, Viewer, nil); !ok {
52 t.Fatal(msg)
53 }
54 remove("m1", Owner)
55 if msg, ok := checkMembers(p, Owner, []string{"m2"}); !ok {
56 t.Fatal(msg)
57 }
58 if msg, ok := checkMembers(p, Viewer, nil); !ok {
59 t.Fatal(msg)
60 }
61 remove("m3", Owner)
62 if msg, ok := checkMembers(p, Owner, []string{"m2"}); !ok {
63 t.Fatal(msg)
64 }
65 remove("m2", Owner)
66 if msg, ok := checkMembers(p, Owner, nil); !ok {
67 t.Fatal(msg)
68 }
69 if got, want := p.Roles(), []RoleName(nil); !testutil.Equal(got, want) {
70 t.Fatalf("roles: got %v, want %v", got, want)
71 }
72 }
73
74 func checkMembers(p *Policy, role RoleName, wantMembers []string) (string, bool) {
75 gotMembers := p.Members(role)
76 sort.Strings(gotMembers)
77 sort.Strings(wantMembers)
78 if !testutil.Equal(gotMembers, wantMembers) {
79 return fmt.Sprintf("got %v, want %v", gotMembers, wantMembers), false
80 }
81 for _, m := range wantMembers {
82 if !p.HasRole(m, role) {
83 return fmt.Sprintf("member %q should have role %s but does not", m, role), false
84 }
85 }
86 return "", true
87 }
88
View as plain text