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  }