github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/caas/kubernetes/provider/resources/role_test.go (about) 1 // Copyright 2021 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package resources_test 5 6 import ( 7 "context" 8 9 "github.com/juju/errors" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 rbacv1 "k8s.io/api/rbac/v1" 13 k8serrors "k8s.io/apimachinery/pkg/api/errors" 14 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 15 16 "github.com/juju/juju/caas/kubernetes/provider/resources" 17 ) 18 19 type roleSuite struct { 20 resourceSuite 21 } 22 23 var _ = gc.Suite(&roleSuite{}) 24 25 func (s *roleSuite) TestApply(c *gc.C) { 26 role := &rbacv1.Role{ 27 ObjectMeta: metav1.ObjectMeta{ 28 Name: "role1", 29 Namespace: "test", 30 }, 31 } 32 // Create. 33 roleResource := resources.NewRole("role1", "test", role) 34 c.Assert(roleResource.Apply(context.TODO(), s.client), jc.ErrorIsNil) 35 result, err := s.client.RbacV1().Roles("test").Get(context.TODO(), "role1", metav1.GetOptions{}) 36 c.Assert(err, jc.ErrorIsNil) 37 c.Assert(len(result.GetAnnotations()), gc.Equals, 0) 38 39 // Update. 40 role.SetAnnotations(map[string]string{"a": "b"}) 41 roleResource = resources.NewRole("role1", "test", role) 42 c.Assert(roleResource.Apply(context.TODO(), s.client), jc.ErrorIsNil) 43 44 result, err = s.client.RbacV1().Roles("test").Get(context.TODO(), "role1", metav1.GetOptions{}) 45 c.Assert(err, jc.ErrorIsNil) 46 c.Assert(result.GetName(), gc.Equals, `role1`) 47 c.Assert(result.GetNamespace(), gc.Equals, `test`) 48 c.Assert(result.GetAnnotations(), gc.DeepEquals, map[string]string{"a": "b"}) 49 } 50 51 func (s *roleSuite) TestGet(c *gc.C) { 52 template := rbacv1.Role{ 53 ObjectMeta: metav1.ObjectMeta{ 54 Name: "role1", 55 Namespace: "test", 56 }, 57 } 58 role1 := template 59 role1.SetAnnotations(map[string]string{"a": "b"}) 60 _, err := s.client.RbacV1().Roles("test").Create(context.TODO(), &role1, metav1.CreateOptions{}) 61 c.Assert(err, jc.ErrorIsNil) 62 63 roleResource := resources.NewRole("role1", "test", &template) 64 c.Assert(len(roleResource.GetAnnotations()), gc.Equals, 0) 65 err = roleResource.Get(context.TODO(), s.client) 66 c.Assert(err, jc.ErrorIsNil) 67 c.Assert(roleResource.GetName(), gc.Equals, `role1`) 68 c.Assert(roleResource.GetNamespace(), gc.Equals, `test`) 69 c.Assert(roleResource.GetAnnotations(), gc.DeepEquals, map[string]string{"a": "b"}) 70 } 71 72 func (s *roleSuite) TestDelete(c *gc.C) { 73 role := rbacv1.Role{ 74 ObjectMeta: metav1.ObjectMeta{ 75 Name: "role1", 76 Namespace: "test", 77 }, 78 } 79 _, err := s.client.RbacV1().Roles("test").Create(context.TODO(), &role, metav1.CreateOptions{}) 80 c.Assert(err, jc.ErrorIsNil) 81 82 result, err := s.client.RbacV1().Roles("test").Get(context.TODO(), "role1", metav1.GetOptions{}) 83 c.Assert(err, jc.ErrorIsNil) 84 c.Assert(result.GetName(), gc.Equals, `role1`) 85 86 roleResource := resources.NewRole("role1", "test", &role) 87 err = roleResource.Delete(context.TODO(), s.client) 88 c.Assert(err, jc.ErrorIsNil) 89 90 err = roleResource.Get(context.TODO(), s.client) 91 c.Assert(err, jc.Satisfies, errors.IsNotFound) 92 93 _, err = s.client.RbacV1().Roles("test").Get(context.TODO(), "role1", metav1.GetOptions{}) 94 c.Assert(err, jc.Satisfies, k8serrors.IsNotFound) 95 }