From 73aa875c5041582d585c277e5ac15c113f66aeb6 Mon Sep 17 00:00:00 2001 From: Aleksandr Rybolovlev Date: Thu, 1 Aug 2024 16:54:48 +0200 Subject: [PATCH] Update Workspace controller tests (#458) --- .../workspace_controller_agents_test.go | 37 ++++++++---------- ...workspace_controller_notifications_test.go | 29 +++++++------- .../workspace_controller_outputs_test.go | 9 +++-- .../workspace_controller_projects_test.go | 35 +++++++---------- ...ce_controller_remote_state_sharing_test.go | 37 ++++++++---------- .../workspace_controller_run_tasks_test.go | 39 ++++++++----------- .../workspace_controller_run_triggers_test.go | 36 ++++++++--------- controllers/workspace_controller_runs_test.go | 12 +++--- .../workspace_controller_sshkey_test.go | 37 ++++++++---------- .../workspace_controller_team_access_test.go | 20 ++++------ controllers/workspace_controller_test.go | 8 ++-- .../workspace_controller_variables_test.go | 30 ++++++-------- controllers/workspace_controller_vcs_test.go | 21 +++++----- 13 files changed, 158 insertions(+), 192 deletions(-) diff --git a/controllers/workspace_controller_agents_test.go b/controllers/workspace_controller_agents_test.go index 291352ec..15973a21 100644 --- a/controllers/workspace_controller_agents_test.go +++ b/controllers/workspace_controller_agents_test.go @@ -12,6 +12,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -20,35 +21,28 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string - agentPoolName = fmt.Sprintf("kubernetes-operator-agent-%v", randomNumber()) - agentPoolName2 = fmt.Sprintf("%v-2", agentPoolName) - agentPoolID = "" - agentPoolID2 = "" + agentPoolName string + agentPoolName2 string + agentPoolID string + agentPoolID2 string ) BeforeAll(func() { // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) - - // Create an Agent Pools - agentPoolID = createAgentPool(agentPoolName) - agentPoolID2 = createAgentPool(agentPoolName2) - }) - - AfterAll(func() { - // Clean up the Agent Pools - err := tfClient.AgentPools.Delete(ctx, agentPoolID) - Expect(err).Should(Succeed()) - - err = tfClient.AgentPools.Delete(ctx, agentPoolID2) - Expect(err).Should(Succeed()) }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + agentPoolName = fmt.Sprintf("kubernetes-operator-agent-%v", randomNumber()) + agentPoolName2 = fmt.Sprintf("%v-2", agentPoolName) + agentPoolID = createAgentPool(agentPoolName) + agentPoolID2 = createAgentPool(agentPoolName2) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -79,11 +73,12 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(tfClient.AgentPools.Delete(ctx, agentPoolID)).Should(Succeed()) + Expect(tfClient.AgentPools.Delete(ctx, agentPoolID2)).Should(Succeed()) }) - Context("Workspace controller", func() { + Context("Agent Execution Mode", func() { It("can handle agent pool by name", func() { instance.Spec.AgentPool = &appv1alpha2.WorkspaceAgentPool{Name: agentPoolName} // Create a new Kubernetes workspace object and wait until the controller finishes the reconciliation diff --git a/controllers/workspace_controller_notifications_test.go b/controllers/workspace_controller_notifications_test.go index bc497abf..185476d5 100644 --- a/controllers/workspace_controller_notifications_test.go +++ b/controllers/workspace_controller_notifications_test.go @@ -12,6 +12,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -20,24 +21,29 @@ import ( var _ = Describe("Workspace controller", Label("Notifications"), Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string - memberEmail = fmt.Sprintf("kubernetes-operator-member-%v@hashicorp.com", randomNumber()) - memberEmail2 = fmt.Sprintf("kubernetes-operator-member-2-%v@hashicorp.com", randomNumber()) - memberID = "" - memberID2 = "" + memberEmail string + memberEmail2 string + memberID string + memberID2 string ) BeforeAll(func() { - memberID = createOrgMember(memberEmail) - memberID2 = createOrgMember(memberEmail2) + // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + memberEmail = fmt.Sprintf("kubernetes-operator-member-%v@hashicorp.com", randomNumber()) + memberEmail2 = fmt.Sprintf("kubernetes-operator-member-2-%v@hashicorp.com", randomNumber()) + memberID = createOrgMember(memberEmail) + memberID2 = createOrgMember(memberEmail2) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -67,14 +73,11 @@ var _ = Describe("Workspace controller", Label("Notifications"), Ordered, func() } }) - AfterAll(func() { - Expect(tfClient.OrganizationMemberships.Delete(ctx, memberID)).Should(Succeed()) - Expect(tfClient.OrganizationMemberships.Delete(ctx, memberID2)).Should(Succeed()) - }) - AfterEach(func() { // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(tfClient.OrganizationMemberships.Delete(ctx, memberID)).Should(Succeed()) + Expect(tfClient.OrganizationMemberships.Delete(ctx, memberID2)).Should(Succeed()) }) Context("Notifications", func() { diff --git a/controllers/workspace_controller_outputs_test.go b/controllers/workspace_controller_outputs_test.go index 65cd91aa..d2589961 100644 --- a/controllers/workspace_controller_outputs_test.go +++ b/controllers/workspace_controller_outputs_test.go @@ -22,8 +22,8 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string ) BeforeAll(func() { @@ -36,6 +36,8 @@ var _ = Describe("Workspace controller", Ordered, func() { if cloudEndpoint != tfcDefaultAddress { Skip("Does not run against TFC, skip this test") } + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -66,11 +68,10 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) }) - Context("Workspace controller", func() { + Context("Outputs", func() { It("can handle outputs", func() { // Create a new Kubernetes workspace object and wait until the controller finishes the reconciliation createWorkspace(instance) diff --git a/controllers/workspace_controller_projects_test.go b/controllers/workspace_controller_projects_test.go index 9c6c59c8..1f8f1016 100644 --- a/controllers/workspace_controller_projects_test.go +++ b/controllers/workspace_controller_projects_test.go @@ -12,6 +12,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -20,35 +21,28 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string - projectName = fmt.Sprintf("project-%v", randomNumber()) - projectName2 = fmt.Sprintf("%v-2", projectName) - projectID = "" - projectID2 = "" + projectName string + projectName2 string + projectID string + projectID2 string ) BeforeAll(func() { // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) - - // Create Projects - projectID = createTestProject(projectName) - projectID2 = createTestProject(projectName2) - }) - - AfterAll(func() { - // Clean up the Project - err := tfClient.Projects.Delete(ctx, projectID) - Expect(err).Should(Succeed()) - - err = tfClient.Projects.Delete(ctx, projectID2) - Expect(err).Should(Succeed()) }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + projectName = fmt.Sprintf("project-%v", randomNumber()) + projectName2 = fmt.Sprintf("%v-2", projectName) + projectID = createTestProject(projectName) + projectID2 = createTestProject(projectName2) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -78,8 +72,9 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(tfClient.Projects.Delete(ctx, projectID)).Should(Succeed()) + Expect(tfClient.Projects.Delete(ctx, projectID2)).Should(Succeed()) }) Context("Project", func() { diff --git a/controllers/workspace_controller_remote_state_sharing_test.go b/controllers/workspace_controller_remote_state_sharing_test.go index b676cd08..b68a094a 100644 --- a/controllers/workspace_controller_remote_state_sharing_test.go +++ b/controllers/workspace_controller_remote_state_sharing_test.go @@ -12,6 +12,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -20,26 +21,29 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string - wsName = fmt.Sprintf("%s-share", workspace) - wsName2 = fmt.Sprintf("%s-share2", workspace) - wsID = "" - wsID2 = "" + wsName string + wsName2 string + wsID string + wsID2 string ) BeforeAll(func() { // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) + }) - // Create new workspaces for tests + BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + wsName = fmt.Sprintf("%v-share", workspace) + wsName2 = fmt.Sprintf("%v-2", wsName) wsID = createWorkspaceForTests(wsName) wsID2 = createWorkspaceForTests(wsName2) - }) - BeforeEach(func() { // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -69,21 +73,12 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(tfClient.Workspaces.DeleteByID(ctx, wsID)).Should(Succeed()) + Expect(tfClient.Workspaces.DeleteByID(ctx, wsID2)).Should(Succeed()) }) - AfterAll(func() { - // Clean up additional workspaces - err := tfClient.Workspaces.DeleteByID(ctx, wsID) - Expect(err).Should(Succeed()) - - err = tfClient.Workspaces.DeleteByID(ctx, wsID2) - Expect(err).Should(Succeed()) - - }) - - Context("Workspace controller", func() { + Context("Remote State Sharing", func() { It("can enable remote state sharing for all workspaces", func() { instance.Spec.RemoteStateSharing = &appv1alpha2.RemoteStateSharing{ AllWorkspaces: true, diff --git a/controllers/workspace_controller_run_tasks_test.go b/controllers/workspace_controller_run_tasks_test.go index 21629f2a..bfcff0b0 100644 --- a/controllers/workspace_controller_run_tasks_test.go +++ b/controllers/workspace_controller_run_tasks_test.go @@ -14,6 +14,7 @@ import ( tfc "github.com/hashicorp/go-tfe" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" ) @@ -21,12 +22,13 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) - runTaskName = fmt.Sprintf("kubernetes-operator-run-task-%v", randomNumber()) - runTaskName2 = fmt.Sprintf("kubernetes-operator-run-task-2-%v", randomNumber()) - runTaskID = "" - runTaskID2 = "" + namespacedName types.NamespacedName + workspace string + + runTaskName string + runTaskName2 string + runTaskID string + runTaskID2 string ) // KNOWN ISSUE @@ -44,6 +46,12 @@ var _ = Describe("Workspace controller", Ordered, func() { }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + runTaskName = fmt.Sprintf("kubernetes-operator-run-task-%v", randomNumber()) + runTaskName2 = fmt.Sprintf("kubernetes-operator-run-task-2-%v", randomNumber()) + runTaskID = createRunTaskForTest(runTaskName) + runTaskID2 = createRunTaskForTest(runTaskName2) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -78,28 +86,15 @@ var _ = Describe("Workspace controller", Ordered, func() { }, Status: appv1alpha2.WorkspaceStatus{}, } - - runTaskID = createRunTaskForTest(runTaskName) - runTaskID2 = createRunTaskForTest(runTaskName2) }) AfterEach(func() { - // Delete all Run Tasks from the Workspace before deleting the Workspace, otherwise, it won't be possible to delete the Run Tasks instantly. - Expect(k8sClient.Get(ctx, namespacedName, instance)).Should(Succeed()) - instance.Spec.RunTasks = []appv1alpha2.WorkspaceRunTask{} - Expect(k8sClient.Update(ctx, instance)).Should(Succeed()) - isRunTasksReconciled(instance) - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) - // Delete Run Task 1 - err := tfClient.RunTasks.Delete(ctx, runTaskID) - Expect(err).Should(Succeed()) - // Delete Run Task 2 - err = tfClient.RunTasks.Delete(ctx, runTaskID2) - Expect(err).Should(Succeed()) + Expect(tfClient.RunTasks.Delete(ctx, runTaskID)).Should(Succeed()) + Expect(tfClient.RunTasks.Delete(ctx, runTaskID2)).Should(Succeed()) }) - Context("Workspace controller", func() { + Context("Run Tasks", func() { It("can create run task by ID", func() { instance.Spec.RunTasks[0].ID = runTaskID // Create a new Kubernetes workspace object and wait until the controller finishes the reconciliation diff --git a/controllers/workspace_controller_run_triggers_test.go b/controllers/workspace_controller_run_triggers_test.go index b9e596af..72b93498 100644 --- a/controllers/workspace_controller_run_triggers_test.go +++ b/controllers/workspace_controller_run_triggers_test.go @@ -12,6 +12,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -20,34 +21,28 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string - wsName = fmt.Sprintf("kubernetes-operator-source-%v", randomNumber()) - wsName2 = fmt.Sprintf("kubernetes-operator-source2-%v", randomNumber()) - wsID = "" - wsID2 = "" + wsName string + wsName2 string + wsID string + wsID2 string ) BeforeAll(func() { // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) - - // Create two new workspaces to act as a source for Run Triggers - wsID = createWorkspaceForTests(wsName) - wsID2 = createWorkspaceForTests(wsName2) - }) - - AfterAll(func() { - err := tfClient.Workspaces.DeleteByID(ctx, wsID) - Expect(err).Should(Succeed()) - - err = tfClient.Workspaces.DeleteByID(ctx, wsID2) - Expect(err).Should(Succeed()) }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + wsName = fmt.Sprintf("kubernetes-operator-source-%v", randomNumber()) + wsName2 = fmt.Sprintf("kubernetes-operator-source-2-%v", randomNumber()) + wsID = createWorkspaceForTests(wsName) + wsID2 = createWorkspaceForTests(wsName2) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -77,11 +72,12 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(tfClient.Workspaces.DeleteByID(ctx, wsID)).Should(Succeed()) + Expect(tfClient.Workspaces.DeleteByID(ctx, wsID2)).Should(Succeed()) }) - Context("Workspace controller", func() { + Context("Run Triggers", func() { It("can handle run triggers by name", func() { instance.Spec.RunTriggers = []appv1alpha2.RunTrigger{ {Name: wsName}, diff --git a/controllers/workspace_controller_runs_test.go b/controllers/workspace_controller_runs_test.go index d45f0e43..32a9072d 100644 --- a/controllers/workspace_controller_runs_test.go +++ b/controllers/workspace_controller_runs_test.go @@ -12,13 +12,14 @@ import ( . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" ) -var _ = Describe("Workspace controller", Label("Runs"), Ordered, func() { +var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string ) BeforeAll(func() { @@ -31,6 +32,8 @@ var _ = Describe("Workspace controller", Label("Runs"), Ordered, func() { if cloudEndpoint != tfcDefaultAddress { Skip("Does not run against TFC, skip this test") } + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -61,11 +64,10 @@ var _ = Describe("Workspace controller", Label("Runs"), Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) }) - Context("Workspace controller", func() { + Context("Runs", func() { It("can handle runs", func() { namespacedName := getNamespacedName(instance) // Create a new Kubernetes workspace object and wait until the controller finishes the reconciliation diff --git a/controllers/workspace_controller_sshkey_test.go b/controllers/workspace_controller_sshkey_test.go index 1402a874..d89e89e8 100644 --- a/controllers/workspace_controller_sshkey_test.go +++ b/controllers/workspace_controller_sshkey_test.go @@ -16,6 +16,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -24,35 +25,28 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string - sshKeyName = fmt.Sprintf("kubernetes-operator-sshkey-%v", randomNumber()) - sshKeyName2 = fmt.Sprintf("%v-2", sshKeyName) - sshKeyID = "" - sshKeyID2 = "" + sshKeyName string + sshKeyName2 string + sshKeyID string + sshKeyID2 string ) BeforeAll(func() { // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) - - // Create an SSH keys - sshKeyID = createSSHKey(sshKeyName) - sshKeyID2 = createSSHKey(sshKeyName2) - }) - - AfterAll(func() { - // Delete SSH keys - err := tfClient.SSHKeys.Delete(ctx, sshKeyID) - Expect(err).Should(Succeed()) - - err = tfClient.SSHKeys.Delete(ctx, sshKeyID2) - Expect(err).Should(Succeed()) }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + sshKeyName = fmt.Sprintf("kubernetes-operator-sshkey-%v", randomNumber()) + sshKeyName2 = fmt.Sprintf("%v-2", sshKeyName) + sshKeyID = createSSHKey(sshKeyName) + sshKeyID2 = createSSHKey(sshKeyName2) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -82,11 +76,12 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(tfClient.SSHKeys.Delete(ctx, sshKeyID)).Should(Succeed()) + Expect(tfClient.SSHKeys.Delete(ctx, sshKeyID2)).Should(Succeed()) }) - Context("Workspace controller", func() { + Context("SSH Key", func() { It("can handle SSH Key by name", func() { instance.Spec.SSHKey = &appv1alpha2.SSHKey{ Name: sshKeyName, diff --git a/controllers/workspace_controller_team_access_test.go b/controllers/workspace_controller_team_access_test.go index 27c33aa8..48e00fdd 100644 --- a/controllers/workspace_controller_team_access_test.go +++ b/controllers/workspace_controller_team_access_test.go @@ -12,6 +12,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -20,26 +21,21 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace + namespacedName types.NamespacedName + workspace string team *tfc.Team - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) ) BeforeAll(func() { // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) - - // Create new teams - team = createTeam(fmt.Sprintf("%s-team", workspace)) - }) - - AfterAll(func() { - err := tfClient.Teams.Delete(ctx, team.ID) - Expect(err).Should(Succeed()) }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + team = createTeam(fmt.Sprintf("%s-team", workspace)) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -69,11 +65,11 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(tfClient.Teams.Delete(ctx, team.ID)).Should(Succeed()) }) - Context("Workspace controller", func() { + Context("Team Access", func() { It("can handle pre-set team access", func() { instance.Spec.TeamAccess = []*appv1alpha2.TeamAccess{ { diff --git a/controllers/workspace_controller_test.go b/controllers/workspace_controller_test.go index 82e388ce..70ba162a 100644 --- a/controllers/workspace_controller_test.go +++ b/controllers/workspace_controller_test.go @@ -13,6 +13,7 @@ import ( corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" tfc "github.com/hashicorp/go-tfe" appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" @@ -21,8 +22,8 @@ import ( var _ = Describe("Workspace controller", Ordered, func() { var ( instance *appv1alpha2.Workspace - namespacedName = newNamespacedName() - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) + namespacedName types.NamespacedName + workspace string ) BeforeAll(func() { @@ -32,6 +33,8 @@ var _ = Describe("Workspace controller", Ordered, func() { }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -66,7 +69,6 @@ var _ = Describe("Workspace controller", Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) }) diff --git a/controllers/workspace_controller_variables_test.go b/controllers/workspace_controller_variables_test.go index 577bbfce..88e3f26f 100644 --- a/controllers/workspace_controller_variables_test.go +++ b/controllers/workspace_controller_variables_test.go @@ -20,26 +20,27 @@ import ( appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" ) -var _ = Describe("Workspace controller", Label("Variables"), Ordered, func() { +var _ = Describe("Workspace controller", Ordered, func() { var ( - instance *appv1alpha2.Workspace - namespacedName = types.NamespacedName{ - Name: "this", - Namespace: "default", - } + instance *appv1alpha2.Workspace + namespacedName types.NamespacedName + workspace string secretVariables *corev1.Secret - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) ) BeforeAll(func() { // Set default Eventually timers SetDefaultEventuallyTimeout(syncPeriod * 4) SetDefaultEventuallyPollingInterval(2 * time.Second) + }) + BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) // Create a secret object that will be used by the controller to get variables secretVariables = &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ - Name: "variables", + Name: fmt.Sprintf("%s-variables", namespacedName.Name), Namespace: namespacedName.Namespace, }, Type: corev1.SecretTypeOpaque, @@ -48,13 +49,6 @@ var _ = Describe("Workspace controller", Label("Variables"), Ordered, func() { }, } Expect(k8sClient.Create(ctx, secretVariables)).Should(Succeed()) - }) - - AfterAll(func() { - Expect(k8sClient.Delete(ctx, secretVariables)).Should(Succeed()) - }) - - BeforeEach(func() { // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -84,11 +78,11 @@ var _ = Describe("Workspace controller", Label("Variables"), Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) + Expect(k8sClient.Delete(ctx, secretVariables)).Should(Succeed()) }) - Context("Reconcile terraform variables", func() { + Context("Terraform Variables", func() { It("can handle workspace terraform variables", func() { instance.Spec.TerraformVariables = []appv1alpha2.Variable{ { @@ -224,7 +218,7 @@ var _ = Describe("Workspace controller", Label("Variables"), Ordered, func() { }) }) - Context("Reconcile environment variables", func() { + Context("Environment Variables", func() { It("can handle workspace environment variables", func() { instance.Spec.EnvironmentVariables = []appv1alpha2.Variable{ { diff --git a/controllers/workspace_controller_vcs_test.go b/controllers/workspace_controller_vcs_test.go index a239322a..7beb35be 100644 --- a/controllers/workspace_controller_vcs_test.go +++ b/controllers/workspace_controller_vcs_test.go @@ -19,19 +19,15 @@ import ( appv1alpha2 "github.com/hashicorp/terraform-cloud-operator/api/v1alpha2" ) -var _ = Describe("Workspace controller", Label("VCS"), Ordered, func() { +var _ = Describe("Workspace controller", Ordered, func() { var ( - instance *appv1alpha2.Workspace - workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) - oAuthTokenID = os.Getenv("TFC_OAUTH_TOKEN") - repository = os.Getenv("TFC_VCS_REPO") + instance *appv1alpha2.Workspace + namespacedName types.NamespacedName + workspace string + oAuthTokenID = os.Getenv("TFC_OAUTH_TOKEN") + repository = os.Getenv("TFC_VCS_REPO") ) - namespacedName := types.NamespacedName{ - Name: "this", - Namespace: "default", - } - BeforeAll(func() { if oAuthTokenID == "" { Skip("Environment variable TFC_OAUTH_TOKEN is either not set or empty") @@ -45,6 +41,8 @@ var _ = Describe("Workspace controller", Label("VCS"), Ordered, func() { }) BeforeEach(func() { + namespacedName = newNamespacedName() + workspace = fmt.Sprintf("kubernetes-operator-%v", randomNumber()) // Create a new workspace object for each test instance = &appv1alpha2.Workspace{ TypeMeta: metav1.TypeMeta{ @@ -80,11 +78,10 @@ var _ = Describe("Workspace controller", Label("VCS"), Ordered, func() { }) AfterEach(func() { - // Delete the Kubernetes workspace object and wait until the controller finishes the reconciliation after deletion of the object deleteWorkspace(instance) }) - Context("Workspace controller", func() { + Context("VCS", func() { It("can attach VCS to the workspace", func() { // Create a new Kubernetes workspace object and wait until the controller finishes the reconciliation createWorkspace(instance)