Skip to content

Commit 2de2a8d

Browse files
committed
Add an E2E test for ScyllaDBDatacenter integration with global ScyllaDB Manager instance: registration and deregistration
1 parent ac22b1b commit 2de2a8d

File tree

1 file changed

+191
-0
lines changed

1 file changed

+191
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
// Copyright (C) 2025 ScyllaDB
2+
3+
package scylladbdatacenter
4+
5+
import (
6+
"context"
7+
8+
g "github.com/onsi/ginkgo/v2"
9+
o "github.com/onsi/gomega"
10+
scyllav1alpha1 "github.com/scylladb/scylla-operator/pkg/api/scylla/v1alpha1"
11+
"github.com/scylladb/scylla-operator/pkg/controllerhelpers"
12+
"github.com/scylladb/scylla-operator/pkg/helpers/managerclienterrors"
13+
"github.com/scylladb/scylla-operator/pkg/helpers/slices"
14+
"github.com/scylladb/scylla-operator/pkg/naming"
15+
"github.com/scylladb/scylla-operator/pkg/pointer"
16+
"github.com/scylladb/scylla-operator/test/e2e/framework"
17+
"github.com/scylladb/scylla-operator/test/e2e/utils"
18+
utilsv1alpha1 "github.com/scylladb/scylla-operator/test/e2e/utils/v1alpha1"
19+
scylladbdatacenterverification "github.com/scylladb/scylla-operator/test/e2e/utils/verification/scylladbdatacenter"
20+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21+
"k8s.io/apimachinery/pkg/types"
22+
)
23+
24+
var _ = g.Describe("ScyllaDBDatacenter integration with global ScyllaDB Manager", func() {
25+
f := framework.NewFramework("scylladbdatacenter")
26+
27+
hasDeletionFinalizer := func(smcr *scyllav1alpha1.ScyllaDBManagerClusterRegistration) (bool, error) {
28+
return slices.ContainsItem(smcr.Finalizers, naming.ScyllaDBManagerClusterRegistrationFinalizer), nil
29+
}
30+
31+
g.It("should register labeled ScyllaDBDatacenter and deregister it when it's unlabeled", func(ctx g.SpecContext) {
32+
ns, nsClient, ok := f.DefaultNamespaceIfAny()
33+
o.Expect(ok).To(o.BeTrue())
34+
35+
sdc := f.GetDefaultScyllaDBDatacenter()
36+
metav1.SetMetaDataLabel(&sdc.ObjectMeta, naming.GlobalScyllaDBManagerRegistrationLabel, naming.LabelValueTrue)
37+
38+
framework.By(`Creating a ScyllaDBDatacenter with the global ScyllaDB Manager registration label`)
39+
sdc, err := nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBDatacenters(ns.Name).Create(ctx, sdc, metav1.CreateOptions{})
40+
o.Expect(err).NotTo(o.HaveOccurred())
41+
42+
framework.By("Waiting for ScyllaDBDatacenter to roll out (RV=%s)", sdc.ResourceVersion)
43+
rolloutCtx, rolloutCtxCancel := utilsv1alpha1.ContextForRollout(ctx, sdc)
44+
defer rolloutCtxCancel()
45+
sdc, err = controllerhelpers.WaitForScyllaDBDatacenterState(rolloutCtx, nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBDatacenters(ns.Name), sdc.Name, controllerhelpers.WaitForStateOptions{}, utilsv1alpha1.IsScyllaDBDatacenterRolledOut)
46+
o.Expect(err).NotTo(o.HaveOccurred())
47+
48+
scylladbdatacenterverification.Verify(ctx, nsClient.KubeClient(), nsClient.ScyllaClient(), sdc)
49+
scylladbdatacenterverification.WaitForFullQuorum(ctx, nsClient.KubeClient().CoreV1(), sdc)
50+
51+
hosts, err := utilsv1alpha1.GetBroadcastRPCAddresses(ctx, f.KubeClient().CoreV1(), sdc)
52+
o.Expect(err).NotTo(o.HaveOccurred())
53+
o.Expect(hosts).To(o.HaveLen(1))
54+
di := scylladbdatacenterverification.InsertAndVerifyCQLData(ctx, hosts)
55+
defer di.Close()
56+
57+
smcrName, err := naming.ScyllaDBManagerClusterRegistrationNameForScyllaDBDatacenter(sdc)
58+
o.Expect(err).NotTo(o.HaveOccurred())
59+
60+
framework.By("Waiting for ScyllaDBDatacenter to register with global ScyllaDB Manager instance")
61+
registrationCtx, registrationCtxCancel := context.WithTimeout(ctx, utils.SyncTimeout)
62+
defer registrationCtxCancel()
63+
smcr, err := controllerhelpers.WaitForScyllaDBManagerClusterRegistrationState(registrationCtx, nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBManagerClusterRegistrations(ns.Name), smcrName, controllerhelpers.WaitForStateOptions{}, utilsv1alpha1.IsScyllaDBManagerClusterRegistrationRolledOut, hasDeletionFinalizer)
64+
o.Expect(err).NotTo(o.HaveOccurred())
65+
o.Expect(smcr.Status.ClusterID).NotTo(o.BeNil())
66+
o.Expect(*smcr.Status.ClusterID).NotTo(o.BeEmpty())
67+
managerClusterID := *smcr.Status.ClusterID
68+
69+
managerClient, err := utils.GetManagerClient(ctx, f.KubeAdminClient().CoreV1())
70+
o.Expect(err).NotTo(o.HaveOccurred())
71+
72+
framework.By("Verifying that ScyllaDBDatacenter was registered with global ScyllaDB Manager")
73+
managerCluster, err := managerClient.GetCluster(ctx, *smcr.Status.ClusterID)
74+
o.Expect(err).NotTo(o.HaveOccurred())
75+
o.Expect(managerCluster.Labels).NotTo(o.BeNil())
76+
o.Expect(managerCluster.Labels[naming.OwnerUIDLabel]).To(o.Equal(string(smcr.UID)))
77+
78+
framework.By(`Removing the global ScyllaDB Manager registration label from ScyllaDBDatacenter`)
79+
sdcCopy := sdc.DeepCopy()
80+
delete(sdcCopy.Labels, naming.GlobalScyllaDBManagerRegistrationLabel)
81+
82+
patch, err := controllerhelpers.GenerateMergePatch(sdc, sdcCopy)
83+
o.Expect(err).NotTo(o.HaveOccurred())
84+
85+
sdc, err = nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBDatacenters(ns.Name).Patch(
86+
ctx,
87+
sdc.Name,
88+
types.MergePatchType,
89+
patch,
90+
metav1.PatchOptions{},
91+
)
92+
o.Expect(err).NotTo(o.HaveOccurred())
93+
94+
framework.By(`Waiting for ScyllaDBManagerClusterRegistration to be deleted`)
95+
deletionCtx, deletionCtxCancel := context.WithTimeout(ctx, utils.SyncTimeout)
96+
defer deletionCtxCancel()
97+
err = framework.WaitForObjectDeletion(
98+
deletionCtx,
99+
f.DynamicClient(),
100+
scyllav1alpha1.GroupVersion.WithResource("scylladbmanagerclusterregistrations"),
101+
smcr.Namespace,
102+
smcr.Name,
103+
pointer.Ptr(smcr.UID),
104+
)
105+
o.Expect(err).NotTo(o.HaveOccurred())
106+
107+
framework.By("Verifying that the cluster was removed from the global ScyllaDB Manager state")
108+
_, err = managerClient.GetCluster(ctx, managerClusterID)
109+
o.Expect(err).To(o.HaveOccurred())
110+
o.Expect(err).To(o.Satisfy(managerclienterrors.IsNotFound))
111+
}, g.SpecTimeout(testTimeout))
112+
113+
g.It("should register labeled ScyllaDBDatacenter and deregister it when it's deleted", func(ctx g.SpecContext) {
114+
ns, nsClient, ok := f.DefaultNamespaceIfAny()
115+
o.Expect(ok).To(o.BeTrue())
116+
117+
sdc := f.GetDefaultScyllaDBDatacenter()
118+
metav1.SetMetaDataLabel(&sdc.ObjectMeta, naming.GlobalScyllaDBManagerRegistrationLabel, naming.LabelValueTrue)
119+
120+
framework.By(`Creating a ScyllaDBDatacenter with the global ScyllaDB Manager registration label`)
121+
sdc, err := nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBDatacenters(ns.Name).Create(ctx, sdc, metav1.CreateOptions{})
122+
o.Expect(err).NotTo(o.HaveOccurred())
123+
124+
framework.By("Waiting for ScyllaDBDatacenter to roll out (RV=%s)", sdc.ResourceVersion)
125+
rolloutCtx, rolloutCtxCancel := utilsv1alpha1.ContextForRollout(ctx, sdc)
126+
defer rolloutCtxCancel()
127+
sdc, err = controllerhelpers.WaitForScyllaDBDatacenterState(rolloutCtx, nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBDatacenters(ns.Name), sdc.Name, controllerhelpers.WaitForStateOptions{}, utilsv1alpha1.IsScyllaDBDatacenterRolledOut)
128+
o.Expect(err).NotTo(o.HaveOccurred())
129+
130+
scylladbdatacenterverification.Verify(ctx, nsClient.KubeClient(), nsClient.ScyllaClient(), sdc)
131+
scylladbdatacenterverification.WaitForFullQuorum(ctx, nsClient.KubeClient().CoreV1(), sdc)
132+
133+
hosts, err := utilsv1alpha1.GetBroadcastRPCAddresses(ctx, f.KubeClient().CoreV1(), sdc)
134+
o.Expect(err).NotTo(o.HaveOccurred())
135+
o.Expect(hosts).To(o.HaveLen(1))
136+
di := scylladbdatacenterverification.InsertAndVerifyCQLData(ctx, hosts)
137+
defer di.Close()
138+
139+
smcrName, err := naming.ScyllaDBManagerClusterRegistrationNameForScyllaDBDatacenter(sdc)
140+
o.Expect(err).NotTo(o.HaveOccurred())
141+
142+
framework.By("Waiting for ScyllaDBDatacenter to register with global ScyllaDB Manager instance")
143+
registrationCtx, registrationCtxCancel := context.WithTimeout(ctx, utils.SyncTimeout)
144+
defer registrationCtxCancel()
145+
smcr, err := controllerhelpers.WaitForScyllaDBManagerClusterRegistrationState(registrationCtx, nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBManagerClusterRegistrations(ns.Name), smcrName, controllerhelpers.WaitForStateOptions{}, utilsv1alpha1.IsScyllaDBManagerClusterRegistrationRolledOut, hasDeletionFinalizer)
146+
o.Expect(err).NotTo(o.HaveOccurred())
147+
o.Expect(smcr.Status.ClusterID).NotTo(o.BeNil())
148+
o.Expect(*smcr.Status.ClusterID).NotTo(o.BeEmpty())
149+
managerClusterID := *smcr.Status.ClusterID
150+
151+
managerClient, err := utils.GetManagerClient(ctx, f.KubeAdminClient().CoreV1())
152+
o.Expect(err).NotTo(o.HaveOccurred())
153+
154+
framework.By("Verifying that ScyllaDBDatacenter was registered with global ScyllaDB Manager")
155+
managerCluster, err := managerClient.GetCluster(ctx, *smcr.Status.ClusterID)
156+
o.Expect(err).NotTo(o.HaveOccurred())
157+
o.Expect(managerCluster.Labels).NotTo(o.BeNil())
158+
o.Expect(managerCluster.Labels[naming.OwnerUIDLabel]).To(o.Equal(string(smcr.UID)))
159+
160+
framework.By(`Deleting ScyllaDBDatacenter`)
161+
err = nsClient.ScyllaClient().ScyllaV1alpha1().ScyllaDBDatacenters(ns.Name).Delete(
162+
ctx,
163+
sdc.Name,
164+
metav1.DeleteOptions{
165+
PropagationPolicy: pointer.Ptr(metav1.DeletePropagationForeground),
166+
Preconditions: &metav1.Preconditions{
167+
UID: &sdc.UID,
168+
},
169+
},
170+
)
171+
o.Expect(err).NotTo(o.HaveOccurred())
172+
173+
framework.By(`Waiting for ScyllaDBManagerClusterRegistration to be deleted`)
174+
deletionCtx, deletionCtxCancel := context.WithTimeout(ctx, utils.SyncTimeout)
175+
defer deletionCtxCancel()
176+
err = framework.WaitForObjectDeletion(
177+
deletionCtx,
178+
f.DynamicClient(),
179+
scyllav1alpha1.GroupVersion.WithResource("scylladbmanagerclusterregistrations"),
180+
smcr.Namespace,
181+
smcr.Name,
182+
pointer.Ptr(smcr.UID),
183+
)
184+
o.Expect(err).NotTo(o.HaveOccurred())
185+
186+
framework.By("Verifying that the cluster was removed from the global ScyllaDB Manager state")
187+
_, err = managerClient.GetCluster(ctx, managerClusterID)
188+
o.Expect(err).To(o.HaveOccurred())
189+
o.Expect(err).To(o.Satisfy(managerclienterrors.IsNotFound))
190+
}, g.SpecTimeout(testTimeout))
191+
})

0 commit comments

Comments
 (0)