Skip to content

Commit

Permalink
Update Workspace controller tests (#458)
Browse files Browse the repository at this point in the history
  • Loading branch information
arybolovlev authored Aug 1, 2024
1 parent 7e2d85b commit 73aa875
Show file tree
Hide file tree
Showing 13 changed files with 158 additions and 192 deletions.
37 changes: 16 additions & 21 deletions controllers/workspace_controller_agents_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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{
Expand Down Expand Up @@ -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
Expand Down
29 changes: 16 additions & 13 deletions controllers/workspace_controller_notifications_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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{
Expand Down Expand Up @@ -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() {
Expand Down
9 changes: 5 additions & 4 deletions controllers/workspace_controller_outputs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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{
Expand Down Expand Up @@ -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)
Expand Down
35 changes: 15 additions & 20 deletions controllers/workspace_controller_projects_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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{
Expand Down Expand Up @@ -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() {
Expand Down
37 changes: 16 additions & 21 deletions controllers/workspace_controller_remote_state_sharing_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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{
Expand Down Expand Up @@ -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,
Expand Down
39 changes: 17 additions & 22 deletions controllers/workspace_controller_run_tasks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,21 @@ 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"
)

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
Expand All @@ -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{
Expand Down Expand Up @@ -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
Expand Down
Loading

0 comments on commit 73aa875

Please sign in to comment.