Skip to content

Commit

Permalink
Parallelize namespace names across tests
Browse files Browse the repository at this point in the history
  • Loading branch information
cblecker committed Oct 14, 2023
1 parent d36544a commit a94a600
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 30 deletions.
41 changes: 19 additions & 22 deletions test/e2e/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,12 @@ import (
"github.com/Azure/ARO-RP/test/util/project"
)

const (
testNamespace = "test-e2e"
)

var _ = Describe("Cluster", func() {
var p project.Project

var _ = BeforeEach(func(ctx context.Context) {
By("creating a test namespace")
testNamespace := fmt.Sprintf("test-e2e-%d", GinkgoParallelProcess())
p = project.NewProject(clients.Kubernetes, clients.Project, testNamespace)
err := p.Create(ctx)
Expect(err).NotTo(HaveOccurred(), "Failed to create test namespace")
Expand Down Expand Up @@ -71,12 +68,12 @@ var _ = Describe("Cluster", func() {
storageClass = "managed-premium"
}

ssName, err := createStatefulSet(ctx, clients.Kubernetes, storageClass)
ssName, err := createStatefulSet(ctx, clients.Kubernetes, p.Name, storageClass)
Expect(err).NotTo(HaveOccurred())

By("verifying the stateful set is ready")
Eventually(func(g Gomega, ctx context.Context) {
s, err := clients.Kubernetes.AppsV1().StatefulSets(testNamespace).Get(ctx, ssName, metav1.GetOptions{})
s, err := clients.Kubernetes.AppsV1().StatefulSets(p.Name).Get(ctx, ssName, metav1.GetOptions{})
g.Expect(err).NotTo(HaveOccurred())

g.Expect(ready.StatefulSetIsReady(s)).To(BeTrue(), "expect stateful to be ready")
Expand Down Expand Up @@ -174,12 +171,12 @@ var _ = Describe("Cluster", func() {

By("creating stateful set")
storageClass := "azurefile-csi"
ssName, err := createStatefulSet(ctx, clients.Kubernetes, storageClass)
ssName, err := createStatefulSet(ctx, clients.Kubernetes, p.Name, storageClass)
Expect(err).NotTo(HaveOccurred())

By("verifying the stateful set is ready")
Eventually(func(g Gomega, ctx context.Context) {
s, err := clients.Kubernetes.AppsV1().StatefulSets(testNamespace).Get(ctx, ssName, metav1.GetOptions{})
s, err := clients.Kubernetes.AppsV1().StatefulSets(p.Name).Get(ctx, ssName, metav1.GetOptions{})
g.Expect(err).NotTo(HaveOccurred())

g.Expect(ready.StatefulSetIsReady(s)).To(BeTrue(), "expect stateful to be ready")
Expand Down Expand Up @@ -209,18 +206,18 @@ var _ = Describe("Cluster", func() {

It("can create load balancer services", func(ctx context.Context) {
By("creating an external load balancer service")
err := createLoadBalancerService(ctx, clients.Kubernetes, "elb", map[string]string{})
err := createLoadBalancerService(ctx, clients.Kubernetes, "elb", p.Name, map[string]string{})
Expect(err).NotTo(HaveOccurred())

By("creating an internal load balancer service")
err = createLoadBalancerService(ctx, clients.Kubernetes, "ilb", map[string]string{
err = createLoadBalancerService(ctx, clients.Kubernetes, "ilb", p.Name, map[string]string{
"service.beta.kubernetes.io/azure-load-balancer-internal": "true",
})
Expect(err).NotTo(HaveOccurred())

By("verifying the external load balancer service is ready")
Eventually(func(ctx context.Context) bool {
svc, err := clients.Kubernetes.CoreV1().Services(testNamespace).Get(ctx, "elb", metav1.GetOptions{})
svc, err := clients.Kubernetes.CoreV1().Services(p.Name).Get(ctx, "elb", metav1.GetOptions{})
if err != nil {
return false
}
Expand All @@ -229,7 +226,7 @@ var _ = Describe("Cluster", func() {

By("verifying the internal load balancer service is ready")
Eventually(func(ctx context.Context) bool {
svc, err := clients.Kubernetes.CoreV1().Services(testNamespace).Get(ctx, "ilb", metav1.GetOptions{})
svc, err := clients.Kubernetes.CoreV1().Services(p.Name).Get(ctx, "ilb", metav1.GetOptions{})
if err != nil {
return false
}
Expand All @@ -243,12 +240,12 @@ var _ = Describe("Cluster", func() {
deployName := "internal-registry-deploy"

By("creating a test deployment from an internal container registry")
err := createContainerFromInternalContainerRegistryImage(ctx, clients.Kubernetes, deployName)
err := createContainerFromInternalContainerRegistryImage(ctx, clients.Kubernetes, deployName, p.Name)
Expect(err).NotTo(HaveOccurred())

By("verifying the deployment is ready")
Eventually(func(g Gomega, ctx context.Context) {
s, err := clients.Kubernetes.AppsV1().Deployments(testNamespace).Get(ctx, deployName, metav1.GetOptions{})
s, err := clients.Kubernetes.AppsV1().Deployments(p.Name).Get(ctx, deployName, metav1.GetOptions{})
g.Expect(err).NotTo(HaveOccurred())

g.Expect(ready.DeploymentIsReady(s)).To(BeTrue(), "expect stateful to be ready")
Expand Down Expand Up @@ -276,14 +273,14 @@ func clusterSubnets(oc redhatopenshift.OpenShiftCluster) []string {
return subnets
}

func createStatefulSet(ctx context.Context, cli kubernetes.Interface, storageClass string) (string, error) {
func createStatefulSet(ctx context.Context, cli kubernetes.Interface, namespace, storageClass string) (string, error) {
pvcStorage, err := resource.ParseQuantity("2Gi")
if err != nil {
return "", err
}
ssName := fmt.Sprintf("busybox-%s-%d", storageClass, GinkgoParallelProcess())

_, err = cli.AppsV1().StatefulSets(testNamespace).Create(ctx, &appsv1.StatefulSet{
_, err = cli.AppsV1().StatefulSets(namespace).Create(ctx, &appsv1.StatefulSet{
ObjectMeta: metav1.ObjectMeta{
Name: ssName,
},
Expand Down Expand Up @@ -339,11 +336,11 @@ func createStatefulSet(ctx context.Context, cli kubernetes.Interface, storageCla
return ssName, err
}

func createLoadBalancerService(ctx context.Context, cli kubernetes.Interface, name string, annotations map[string]string) error {
func createLoadBalancerService(ctx context.Context, cli kubernetes.Interface, name, namespace string, annotations map[string]string) error {
svc := &corev1.Service{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: testNamespace,
Namespace: namespace,
Annotations: annotations,
},
Spec: corev1.ServiceSpec{
Expand All @@ -356,15 +353,15 @@ func createLoadBalancerService(ctx context.Context, cli kubernetes.Interface, na
Type: corev1.ServiceTypeLoadBalancer,
},
}
_, err := cli.CoreV1().Services(testNamespace).Create(ctx, svc, metav1.CreateOptions{})
_, err := cli.CoreV1().Services(namespace).Create(ctx, svc, metav1.CreateOptions{})
return err
}

func createContainerFromInternalContainerRegistryImage(ctx context.Context, cli kubernetes.Interface, name string) error {
func createContainerFromInternalContainerRegistryImage(ctx context.Context, cli kubernetes.Interface, name, namespace string) error {
deploy := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: testNamespace,
Namespace: namespace,
},
Spec: appsv1.DeploymentSpec{
Replicas: to.Int32Ptr(1),
Expand Down Expand Up @@ -393,6 +390,6 @@ func createContainerFromInternalContainerRegistryImage(ctx context.Context, cli
},
},
}
_, err := cli.AppsV1().Deployments(testNamespace).Create(ctx, deploy, metav1.CreateOptions{})
_, err := cli.AppsV1().Deployments(namespace).Create(ctx, deploy, metav1.CreateOptions{})
return err
}
16 changes: 8 additions & 8 deletions test/util/project/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,28 +18,28 @@ import (
type Project struct {
projectClient projectclient.Interface
cli kubernetes.Interface
name string
Name string
}

func NewProject(cli kubernetes.Interface, projectClient projectclient.Interface, name string) Project {
return Project{
projectClient: projectClient,
cli: cli,
name: name,
Name: name,
}
}

func (p Project) Create(ctx context.Context) error {
_, err := p.projectClient.ProjectV1().Projects().Create(ctx, &projectv1.Project{
ObjectMeta: metav1.ObjectMeta{
Name: p.name,
Name: p.Name,
},
}, metav1.CreateOptions{})
return err
}

func (p Project) Delete(ctx context.Context) error {
return p.projectClient.ProjectV1().Projects().Delete(ctx, p.name, metav1.DeleteOptions{})
return p.projectClient.ProjectV1().Projects().Delete(ctx, p.Name, metav1.DeleteOptions{})
}

// VerifyProjectIsReady verifies that the project and relevant resources have been created correctly and returns error otherwise
Expand All @@ -48,7 +48,7 @@ func (p Project) Verify(ctx context.Context) error {
&authorizationv1.SelfSubjectAccessReview{
Spec: authorizationv1.SelfSubjectAccessReviewSpec{
ResourceAttributes: &authorizationv1.ResourceAttributes{
Namespace: p.name,
Namespace: p.Name,
Verb: "create",
Resource: "pods",
},
Expand All @@ -58,7 +58,7 @@ func (p Project) Verify(ctx context.Context) error {
return err
}

sa, err := p.cli.CoreV1().ServiceAccounts(p.name).Get(ctx, "default", metav1.GetOptions{})
sa, err := p.cli.CoreV1().ServiceAccounts(p.Name).Get(ctx, "default", metav1.GetOptions{})
if err != nil || kerrors.IsNotFound(err) {
return fmt.Errorf("error retrieving default ServiceAccount")
}
Expand All @@ -67,7 +67,7 @@ func (p Project) Verify(ctx context.Context) error {
return fmt.Errorf("default ServiceAccount does not have secrets")
}

proj, err := p.projectClient.ProjectV1().Projects().Get(ctx, p.name, metav1.GetOptions{})
proj, err := p.projectClient.ProjectV1().Projects().Get(ctx, p.Name, metav1.GetOptions{})
if err != nil {
return err
}
Expand All @@ -81,7 +81,7 @@ func (p Project) Verify(ctx context.Context) error {
// VerifyProjectIsDeleted verifies that the project does not exist and returns error if a project exists
// or if it encounters an error other than NotFound
func (p Project) VerifyProjectIsDeleted(ctx context.Context) error {
_, err := p.projectClient.ProjectV1().Projects().Get(ctx, p.name, metav1.GetOptions{})
_, err := p.projectClient.ProjectV1().Projects().Get(ctx, p.Name, metav1.GetOptions{})
if kerrors.IsNotFound(err) {
return nil
}
Expand Down

0 comments on commit a94a600

Please sign in to comment.