1// +build consulent 2 3package api 4 5import ( 6 "testing" 7 8 "github.com/stretchr/testify/require" 9) 10 11func TestAPI_Namespaces(t *testing.T) { 12 t.Parallel() 13 c, s := makeACLClient(t) 14 defer s.Stop() 15 16 namespaces := c.Namespaces() 17 acl := c.ACL() 18 19 nsPolicy, _, err := acl.PolicyCreate(&ACLPolicy{ 20 Name: "ns-policy", 21 Rules: `operator = "write"`, 22 }, nil) 23 require.NoError(t, err) 24 25 nsRole, _, err := acl.RoleCreate(&ACLRole{ 26 Name: "ns-role", 27 Policies: []*ACLRolePolicyLink{ 28 { 29 ID: nsPolicy.ID, 30 }, 31 }, 32 }, nil) 33 34 require.NoError(t, err) 35 36 t.Run("Create Nameless", func(t *testing.T) { 37 ns := Namespace{ 38 Description: "foo", 39 } 40 41 _, _, err := namespaces.Create(&ns, nil) 42 require.Error(t, err) 43 require.Contains(t, err.Error(), "Must specify a Name for Namespace creation") 44 }) 45 46 t.Run("Create", func(t *testing.T) { 47 ns, _, err := namespaces.Create(&Namespace{ 48 Name: "foo", 49 Meta: map[string]string{ 50 "foo": "bar", 51 }, 52 }, nil) 53 require.NoError(t, err) 54 require.NotNil(t, ns) 55 require.Equal(t, "foo", ns.Name) 56 require.Len(t, ns.Meta, 1) 57 require.Nil(t, ns.ACLs) 58 59 ns, _, err = namespaces.Create(&Namespace{ 60 Name: "acls", 61 Description: "This namespace has ACL config attached", 62 ACLs: &NamespaceACLConfig{ 63 PolicyDefaults: []ACLLink{ 64 {ID: nsPolicy.ID}, 65 }, 66 RoleDefaults: []ACLLink{ 67 {ID: nsRole.ID}, 68 }, 69 }, 70 }, nil) 71 72 require.NoError(t, err) 73 require.NotNil(t, ns) 74 require.NotNil(t, ns.ACLs) 75 require.Nil(t, ns.DeletedAt) 76 }) 77 78 t.Run("Update Nameless", func(t *testing.T) { 79 ns := Namespace{ 80 Description: "foo", 81 } 82 83 _, _, err := namespaces.Update(&ns, nil) 84 require.Error(t, err) 85 require.Contains(t, err.Error(), "Must specify a Name for Namespace updating") 86 }) 87 88 t.Run("Update", func(t *testing.T) { 89 ns, _, err := namespaces.Update(&Namespace{ 90 Name: "foo", 91 Description: "updated description", 92 }, nil) 93 94 require.NoError(t, err) 95 require.NotNil(t, ns) 96 require.Equal(t, "updated description", ns.Description) 97 }) 98 99 t.Run("List", func(t *testing.T) { 100 nsList, _, err := namespaces.List(nil) 101 102 require.NoError(t, err) 103 require.Len(t, nsList, 3) 104 105 found := make(map[string]struct{}) 106 for _, ns := range nsList { 107 found[ns.Name] = struct{}{} 108 } 109 110 require.Contains(t, found, "default") 111 require.Contains(t, found, "foo") 112 require.Contains(t, found, "acls") 113 }) 114 115 t.Run("Delete", func(t *testing.T) { 116 _, err := namespaces.Delete("foo", nil) 117 require.NoError(t, err) 118 119 // due to deferred deletion the namespace might still exist 120 // this checks that we get a nil return or that the obj has 121 // the deletion mark 122 ns, _, err := namespaces.Read("foo", nil) 123 require.NoError(t, err) 124 if ns != nil { 125 require.NotNil(t, ns.DeletedAt) 126 require.False(t, ns.DeletedAt.IsZero()) 127 } 128 }) 129} 130