Skip to content

Commit 68dbd07

Browse files
committed
tests: e2e tests implemented
Signed-off-by: Bharath Nallapeta <bnallapeta@mirantis.com>
1 parent 3262348 commit 68dbd07

File tree

10 files changed

+60
-113
lines changed

10 files changed

+60
-113
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ e2e-templates: $(addprefix $(E2E_NO_ARTIFACT_TEMPLATES_DIR)/, \
187187
cluster-template-k8s-upgrade.yaml \
188188
cluster-template-flatcar-sysext.yaml \
189189
cluster-template-no-bastion.yaml \
190-
cluster-template-health-monitor.yaml)
190+
cluster-template-health-monitor.yaml \
191+
cluster-template-cluster-identity.yaml)
191192
# Currently no templates that require CI artifacts
192193
# $(addprefix $(E2E_TEMPLATES_DIR)/, add-templates-here.yaml) \
193194

config/crd/kustomization.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ labels:
88
# It should be run by config/
99
resources:
1010
- bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml
11+
- bases/infrastructure.cluster.x-k8s.io_openstackclusteridentities.yaml
1112
- bases/infrastructure.cluster.x-k8s.io_openstackmachines.yaml
1213
- bases/infrastructure.cluster.x-k8s.io_openstackmachinetemplates.yaml
1314
- bases/infrastructure.cluster.x-k8s.io_openstackclustertemplates.yaml

controllers/openstackcluster_controller_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,32 @@ var _ = Describe("OpenStackCluster controller", func() {
261261
Expect(fetched.Spec.IdentityRef.Type).To(Equal("Secret"))
262262
})
263263

264+
It("should fail when namespace is denied access to ClusterIdentity", func() {
265+
testCluster.SetName("identity-access-denied")
266+
testCluster.Spec.IdentityRef = infrav1.OpenStackIdentityReference{
267+
Type: "ClusterIdentity",
268+
Name: "test-cluster-identity",
269+
CloudName: "openstack",
270+
}
271+
272+
err := k8sClient.Create(ctx, testCluster)
273+
Expect(err).To(BeNil())
274+
err = k8sClient.Create(ctx, capiCluster)
275+
Expect(err).To(BeNil())
276+
277+
identityAccessErr := &scope.IdentityAccessDeniedError{
278+
IdentityName: "test-cluster-identity",
279+
RequesterNamespace: testNamespace,
280+
}
281+
mockScopeFactory.SetClientScopeCreateError(identityAccessErr)
282+
283+
req := createRequestFromOSCluster(testCluster)
284+
result, err := reconciler.Reconcile(ctx, req)
285+
286+
Expect(err).To(MatchError(identityAccessErr))
287+
Expect(result).To(Equal(reconcile.Result{}))
288+
})
289+
264290
It("should reject updates that modify identityRef.region (immutable)", func() {
265291
testCluster.Spec = infrav1.OpenStackClusterSpec{
266292
IdentityRef: infrav1.OpenStackIdentityReference{

test/e2e/data/e2e_conf.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ providers:
128128
- sourcePath: "../data/shared/provider/metadata.yaml"
129129
- sourcePath: "./infrastructure-openstack-no-artifact/cluster-template.yaml"
130130
- sourcePath: "./infrastructure-openstack-no-artifact/cluster-template-without-lb.yaml"
131+
- sourcePath: "./infrastructure-openstack-no-artifact/cluster-template-cluster-identity.yaml"
131132
replacements:
132133
- old: gcr.io/k8s-staging-capi-openstack/capi-openstack-controller:dev
133134
new: gcr.io/k8s-staging-capi-openstack/capi-openstack-controller:e2e

test/e2e/data/kustomize/cluster-identity-denied/kustomization.yaml

Lines changed: 0 additions & 21 deletions
This file was deleted.

test/e2e/data/kustomize/cluster-identity-denied/openstackclusteridentity.yaml

Lines changed: 0 additions & 12 deletions
This file was deleted.

test/e2e/data/kustomize/cluster-identity-denied/patch-openstackcluster-identityref.yaml

Lines changed: 0 additions & 8 deletions
This file was deleted.

test/e2e/data/kustomize/cluster-identity/kustomization.yaml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,12 @@ apiVersion: kustomize.config.k8s.io/v1beta1
22
kind: Kustomization
33

44
resources:
5-
- ../../../../../kustomize/v1beta1/default
5+
- ../default
66
- openstackclusteridentity.yaml
77

8-
components:
9-
- ../common-patches/cluster
10-
- ../common-patches/cni
11-
- ../upgrade-patches
12-
- ../common-patches/ccm
13-
- ../common-patches/externalNetworkByName
14-
- ../common-patches/images
15-
168
patches:
179
- path: patch-openstackcluster-identityref.yaml
1810
target:
1911
kind: OpenStackCluster
20-
name: ${CLUSTER_NAME}
12+
name: \${CLUSTER_NAME}
2113

test/e2e/shared/defaults.go

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,35 +35,34 @@ import (
3535
)
3636

3737
const (
38-
DefaultSSHKeyPairName = "cluster-api-provider-openstack-sigs-k8s-io"
39-
KubeContext = "KUBE_CONTEXT"
40-
KubernetesVersion = "KUBERNETES_VERSION"
41-
CCMPath = "CCM"
42-
CCMResources = "CCM_RESOURCES"
43-
OpenStackBastionFlavorAlt = "OPENSTACK_BASTION_MACHINE_FLAVOR_ALT"
44-
OpenStackCloudYAMLFile = "OPENSTACK_CLOUD_YAML_FILE"
45-
OpenStackCloud = "OPENSTACK_CLOUD"
46-
OpenStackCloudCACertB64 = "OPENSTACK_CLOUD_CACERT_B64"
47-
OpenStackCloudAdmin = "OPENSTACK_CLOUD_ADMIN"
48-
OpenStackFailureDomain = "OPENSTACK_FAILURE_DOMAIN" //nolint:gosec // Linter thinks this could be credentials...
49-
OpenStackFailureDomainAlt = "OPENSTACK_FAILURE_DOMAIN_ALT"
50-
OpenStackVolumeTypeAlt = "OPENSTACK_VOLUME_TYPE_ALT"
51-
OpenStackImageName = "OPENSTACK_IMAGE_NAME"
52-
OpenStackNodeMachineFlavor = "OPENSTACK_NODE_MACHINE_FLAVOR"
53-
SSHUserMachine = "SSH_USER_MACHINE"
54-
FlavorDefault = ""
55-
FlavorNoBastion = "no-bastion"
56-
FlavorWithoutLB = "without-lb"
57-
FlavorMultiNetwork = "multi-network"
58-
FlavorMultiAZ = "multi-az"
59-
FlavorMDRemediation = "md-remediation"
60-
FlavorKCPRemediation = "kcp-remediation"
61-
FlavorFlatcar = "flatcar"
62-
FlavorKubernetesUpgrade = "k8s-upgrade"
63-
FlavorFlatcarSysext = "flatcar-sysext"
64-
FlavorHealthMonitor = "health-monitor"
65-
FlavorClusterIdentity = "cluster-identity"
66-
FlavorClusterIdentityDenied = "cluster-identity-denied"
38+
DefaultSSHKeyPairName = "cluster-api-provider-openstack-sigs-k8s-io"
39+
KubeContext = "KUBE_CONTEXT"
40+
KubernetesVersion = "KUBERNETES_VERSION"
41+
CCMPath = "CCM"
42+
CCMResources = "CCM_RESOURCES"
43+
OpenStackBastionFlavorAlt = "OPENSTACK_BASTION_MACHINE_FLAVOR_ALT"
44+
OpenStackCloudYAMLFile = "OPENSTACK_CLOUD_YAML_FILE"
45+
OpenStackCloud = "OPENSTACK_CLOUD"
46+
OpenStackCloudCACertB64 = "OPENSTACK_CLOUD_CACERT_B64"
47+
OpenStackCloudAdmin = "OPENSTACK_CLOUD_ADMIN"
48+
OpenStackFailureDomain = "OPENSTACK_FAILURE_DOMAIN" //nolint:gosec // Linter thinks this could be credentials...
49+
OpenStackFailureDomainAlt = "OPENSTACK_FAILURE_DOMAIN_ALT"
50+
OpenStackVolumeTypeAlt = "OPENSTACK_VOLUME_TYPE_ALT"
51+
OpenStackImageName = "OPENSTACK_IMAGE_NAME"
52+
OpenStackNodeMachineFlavor = "OPENSTACK_NODE_MACHINE_FLAVOR"
53+
SSHUserMachine = "SSH_USER_MACHINE"
54+
FlavorDefault = ""
55+
FlavorNoBastion = "no-bastion"
56+
FlavorWithoutLB = "without-lb"
57+
FlavorMultiNetwork = "multi-network"
58+
FlavorMultiAZ = "multi-az"
59+
FlavorMDRemediation = "md-remediation"
60+
FlavorKCPRemediation = "kcp-remediation"
61+
FlavorFlatcar = "flatcar"
62+
FlavorKubernetesUpgrade = "k8s-upgrade"
63+
FlavorFlatcarSysext = "flatcar-sysext"
64+
FlavorHealthMonitor = "health-monitor"
65+
FlavorClusterIdentity = "cluster-identity"
6766
)
6867

6968
// DefaultScheme returns the default scheme to use for testing.

test/e2e/suites/e2e/e2e_test.go

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -358,38 +358,6 @@ var _ = Describe("e2e tests [PR-Blocking]", func() {
358358
})
359359
})
360360

361-
Describe("Workload cluster (cluster-identity denied)", func() {
362-
It("should fail to reconcile new workers when namespaceSelector denies access", func(ctx context.Context) {
363-
shared.Logf("Creating a cluster with ClusterIdentity (denied flavor) and 0 workers")
364-
clusterName := fmt.Sprintf("cluster-%s", namespace.Name)
365-
configCluster := defaultConfigCluster(clusterName, namespace.Name)
366-
configCluster.ControlPlaneMachineCount = ptr.To(int64(1))
367-
configCluster.WorkerMachineCount = ptr.To(int64(0))
368-
configCluster.Flavor = shared.FlavorClusterIdentityDenied
369-
createCluster(ctx, configCluster, clusterResources)
370-
371-
// Create a new MachineDeployment that should fail to reconcile due to denied identity access
372-
mdName := clusterName + "-md-denied"
373-
replicas := int32(1)
374-
framework.CreateMachineDeployment(ctx, framework.CreateMachineDeploymentInput{
375-
Creator: e2eCtx.Environment.BootstrapClusterProxy.GetClient(),
376-
MachineDeployment: makeMachineDeployment(namespace.Name, mdName, clusterName, e2eCtx.E2EConfig.MustGetVariable(shared.OpenStackFailureDomain), replicas),
377-
BootstrapConfigTemplate: makeJoinBootstrapConfigTemplate(namespace.Name, mdName),
378-
InfraMachineTemplate: makeOpenStackMachineTemplate(namespace.Name, clusterName, mdName),
379-
})
380-
381-
// Assert that no worker servers are created
382-
machineTags := fmt.Sprintf("%s,%s", clusterName, "machine")
383-
Consistently(func() (int, error) {
384-
serversList, err := shared.DumpOpenStackServers(e2eCtx, servers.ListOpts{Tags: machineTags})
385-
if err != nil {
386-
return -1, err
387-
}
388-
return len(serversList), nil
389-
}, e2eCtx.E2EConfig.GetIntervals(specName, "wait-worker-nodes")[0]).Should(Equal(0))
390-
})
391-
})
392-
393361
Describe("Workload cluster (no bastion)", func() {
394362
It("should be creatable and deletable", func(ctx context.Context) {
395363
shared.Logf("Creating a cluster")

0 commit comments

Comments
 (0)