Skip to content

Commit fc6bced

Browse files
authored
fix for missing label update in creation, added tests (#592)
1 parent 0086d5a commit fc6bced

File tree

2 files changed

+86
-3
lines changed

2 files changed

+86
-3
lines changed

cli/cmds/policy_create.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ func bindPolicyToNamespaces(ctx context.Context, client client.Client, config *V
150150

151151
// no old policy, safe to update
152152
if oldPolicy == "" {
153+
ns.Labels[policy.PolicyNameLabelKey] = policyName
154+
153155
if err := client.Update(ctx, &ns); err != nil {
154156
errs = append(errs, err)
155157
} else {

tests/cli_test.go

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1520
func 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

Comments
 (0)