github.com/go-chef/chef@v0.30.1/acl_test.go (about) 1 package chef 2 3 import ( 4 "fmt" 5 "github.com/stretchr/testify/assert" 6 "net/http" 7 "testing" 8 ) 9 10 func TestACLService_Get(t *testing.T) { 11 setup() 12 defer teardown() 13 14 mux.HandleFunc("/nodes/hostname/_acl", func(w http.ResponseWriter, r *http.Request) { 15 fmt.Fprintf(w, `{ 16 "create": { 17 "actors": [ 18 "hostname", 19 "pivotal" 20 ], 21 "groups": [ 22 "clients", 23 "users", 24 "admins" 25 ], 26 "users": [ 27 "pivotal" 28 ], 29 "clients": [ 30 "hostname" 31 ] 32 }, 33 "read": { 34 "actors": [ 35 "hostname", 36 "pivotal" 37 ], 38 "groups": [ 39 "clients", 40 "users", 41 "admins" 42 ], 43 "users": [ 44 "pivotal" 45 ], 46 "clients": [ 47 "hostname" 48 ] 49 }, 50 "update": { 51 "actors": [ 52 "hostname", 53 "pivotal" 54 ], 55 "groups": [ 56 "users", 57 "admins" 58 ], 59 "users": [ 60 "pivotal" 61 ], 62 "clients": [ 63 "hostname" 64 ] 65 }, 66 "delete": { 67 "actors": [ 68 "hostname", 69 "pivotal" 70 ], 71 "groups": [ 72 "users", 73 "admins" 74 ], 75 "users": [ 76 "pivotal" 77 ], 78 "clients": [ 79 "hostname" 80 ] 81 }, 82 "grant": { 83 "actors": [ 84 "hostname", 85 "pivotal" 86 ], 87 "groups": [ 88 "admins" 89 ], 90 "users": [ 91 "pivotal" 92 ], 93 "clients": [ 94 "hostname" 95 ] 96 } 97 } 98 `) 99 }) 100 101 acl, err := client.ACLs.Get("nodes", "hostname") 102 assert.Nil(t, err, "Get returned error") 103 104 want := ACL{ 105 "create": ACLitems{Groups: []string{"clients", "users", "admins"}, Actors: []string{"hostname", "pivotal"}, Users: []string{"pivotal"}, Clients: []string{"hostname"}}, 106 "read": ACLitems{Groups: []string{"clients", "users", "admins"}, Actors: []string{"hostname", "pivotal"}, Users: []string{"pivotal"}, Clients: []string{"hostname"}}, 107 "update": ACLitems{Groups: []string{"users", "admins"}, Actors: []string{"hostname", "pivotal"}, Users: []string{"pivotal"}, Clients: []string{"hostname"}}, 108 "delete": ACLitems{Groups: []string{"users", "admins"}, Actors: []string{"hostname", "pivotal"}, Users: []string{"pivotal"}, Clients: []string{"hostname"}}, 109 "grant": ACLitems{Groups: []string{"admins"}, Actors: []string{"hostname", "pivotal"}, Users: []string{"pivotal"}, Clients: []string{"hostname"}}, 110 } 111 112 assert.Equal(t, want, acl, "Get Return") 113 114 } 115 116 func TestNewACL(t *testing.T) { 117 118 } 119 120 func TestACLAdminAccess(t *testing.T) { 121 acl := NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{"pivotal", "user"}, []string{"client"}) 122 err := ACLAdminAccess(acl) 123 assert.Nil(t, err, fmt.Sprintf("Pivotal missing %+v\n", acl)) 124 125 acl = NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{"pivotal", "folks", "other"}, []string{}) 126 err = ACLAdminAccess(acl) 127 assert.Nil(t, err, fmt.Sprintf("Pivotal first %+v\n", acl)) 128 129 acl = NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{"other", "pivotal", "folks"}, []string{}) 130 err = ACLAdminAccess(acl) 131 assert.Nil(t, err, fmt.Sprintf("Pivotal first %+v\n", acl)) 132 133 acl = NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{"other", "folks", "pivotal"}, []string{}) 134 err = ACLAdminAccess(acl) 135 assert.Nil(t, err, fmt.Sprintf("Pivotal last %+v\n", acl)) 136 137 acl = NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{}, []string{}) 138 err = ACLAdminAccess(acl) 139 assert.NotNil(t, err, fmt.Sprintf("Pivotal not there %+v\n", acl)) 140 141 acl = NewACL("create", []string{"pivotal"}, []string{"admins"}, nil, []string{}) 142 err = ACLAdminAccess(acl) 143 assert.NotNil(t, err, fmt.Sprintf("Nil user array %+v\n", acl)) 144 145 myacl := *NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{"pivotal"}, []string{}) 146 myacl["read"] = *NewACLItems([]string{"pivotal"}, []string{"admins"}, []string{"pivotal"}, []string{}) 147 myacl["destroy"] = *NewACLItems([]string{"pivotal"}, []string{"admins"}, []string{"pivotal"}, []string{}) 148 err = ACLAdminAccess(&myacl) 149 assert.Nil(t, err, fmt.Sprintf("mutliple types ok %+v\n", myacl)) 150 151 myacl["read"] = *NewACLItems([]string{"pivotal"}, []string{"admins"}, []string{}, []string{}) 152 err = ACLAdminAccess(&myacl) 153 assert.NotNil(t, err, fmt.Sprintf("mutliple types missing pivotal %+v\n", myacl)) 154 155 } 156 157 func TestACLService_Put(t *testing.T) { 158 setup() 159 defer teardown() 160 161 mux.HandleFunc("/nodes/hostname/_acl/create", func(w http.ResponseWriter, r *http.Request) { 162 fmt.Fprintf(w, ``) 163 }) 164 165 acl := NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{"pivotal"}, []string{}) 166 err := client.ACLs.Put("nodes", "hostname", "create", acl) 167 assert.Nil(t, err, "Put returned error") 168 169 acl = NewACL("create", []string{"pivotal"}, []string{"admins"}, []string{}, []string{}) 170 err = client.ACLs.Put("nodes", "hostname", "create", acl) 171 assert.NotNil(t, err, "Put should return error, pivotal not in users list") 172 }