@@ -6,16 +6,29 @@ import (
66 "os/exec"
77 "time"
88
9+ "k8s.io/apimachinery/pkg/types"
910 "k8s.io/apimachinery/pkg/util/rand"
1011
12+ v1 "k8s.io/api/core/v1"
13+
14+ "github.com/rancher/k3k/pkg/controller/policy"
15+
1116 . "github.com/onsi/ginkgo/v2"
1217 . "github.com/onsi/gomega"
1318)
1419
1520func K3kcli (args ... string ) (string , string , error ) {
21+ return runCmd ("k3kcli" , args ... )
22+ }
23+
24+ func Kubectl (args ... string ) (string , string , error ) {
25+ return runCmd ("kubectl" , args ... )
26+ }
27+
28+ func runCmd (cmdName string , args ... string ) (string , string , error ) {
1629 stdout , stderr := & bytes.Buffer {}, & bytes.Buffer {}
1730
18- cmd := exec .CommandContext (context .Background (), "k3kcli" , args ... )
31+ cmd := exec .CommandContext (context .Background (), cmdName , args ... )
1932 cmd .Stdout = stdout
2033 cmd .Stderr = stderr
2134
@@ -115,8 +128,76 @@ var _ = When("using the k3kcli", Label("cli"), func() {
115128
116129 stdout , stderr , err = K3kcli ("policy" , "list" )
117130 Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
118- Expect (stdout ).To (BeEmpty ())
119- Expect (stderr ).To (BeEmpty ())
131+ Expect (stdout ).To (Not (ContainSubstring (policyName )))
132+ })
133+
134+ It ("can bound a policy to a namespace" , func () {
135+ var (
136+ stdout string
137+ stderr string
138+ err error
139+ )
140+
141+ namespaceName := "ns-" + rand .String (5 )
142+
143+ _ , _ , err = Kubectl ("create" , "namespace" , namespaceName )
144+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
145+
146+ DeferCleanup (func () {
147+ DeleteNamespaces (namespaceName )
148+ })
149+
150+ By ("Creating a policy and binding to a namespace" )
151+
152+ policy1Name := "policy-" + rand .String (5 )
153+
154+ _ , stderr , err = K3kcli ("policy" , "create" , "--namespace" , namespaceName , policy1Name )
155+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
156+ Expect (stderr ).To (ContainSubstring (`Creating policy '%s'` , policy1Name ))
157+
158+ DeferCleanup (func () {
159+ stdout , stderr , err = K3kcli ("policy" , "delete" , policy1Name )
160+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
161+ Expect (stdout ).To (BeEmpty ())
162+ Expect (stderr ).To (ContainSubstring (`Policy '%s' deleted` , policy1Name ))
163+ })
164+
165+ var ns v1.Namespace
166+ err = k8sClient .Get (context .Background (), types.NamespacedName {Name : namespaceName }, & ns )
167+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
168+ Expect (ns .Name ).To (Equal (namespaceName ))
169+ Expect (ns .Labels ).To (HaveKeyWithValue (policy .PolicyNameLabelKey , policy1Name ))
170+
171+ By ("Creating another policy and binding to the same namespace without the --overwrite flag" )
172+
173+ policy2Name := "policy-" + rand .String (5 )
174+
175+ stdout , stderr , err = K3kcli ("policy" , "create" , "--namespace" , namespaceName , policy2Name )
176+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
177+ Expect (stderr ).To (ContainSubstring (`Creating policy '%s'` , policy2Name ))
178+
179+ DeferCleanup (func () {
180+ stdout , stderr , err = K3kcli ("policy" , "delete" , policy2Name )
181+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
182+ Expect (stdout ).To (BeEmpty ())
183+ Expect (stderr ).To (ContainSubstring (`Policy '%s' deleted` , policy2Name ))
184+ })
185+
186+ err = k8sClient .Get (context .Background (), types.NamespacedName {Name : namespaceName }, & ns )
187+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
188+ Expect (ns .Name ).To (Equal (namespaceName ))
189+ Expect (ns .Labels ).To (HaveKeyWithValue (policy .PolicyNameLabelKey , policy1Name ))
190+
191+ By ("Forcing the other policy binding with the overwrite flag" )
192+
193+ stdout , stderr , err = K3kcli ("policy" , "create" , "--namespace" , namespaceName , "--overwrite" , policy2Name )
194+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
195+ Expect (stderr ).To (ContainSubstring (`Creating policy '%s'` , policy2Name ))
196+
197+ err = k8sClient .Get (context .Background (), types.NamespacedName {Name : namespaceName }, & ns )
198+ Expect (err ).To (Not (HaveOccurred ()), string (stderr ))
199+ Expect (ns .Name ).To (Equal (namespaceName ))
200+ Expect (ns .Labels ).To (HaveKeyWithValue (policy .PolicyNameLabelKey , policy2Name ))
120201 })
121202 })
122203
0 commit comments