mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-18 04:32:59 -06:00
d196d2870a
As the cloud e2e tests evolved some common patters became apparent. This standardizes and consolidates the patterns into a common test runner that takes the table tests and runs them in parallel. Some tests also needed to be converted to utilize table tests.
179 lines
5.8 KiB
Go
179 lines
5.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
tfe "github.com/hashicorp/go-tfe"
|
|
tfversion "github.com/hashicorp/terraform/version"
|
|
)
|
|
|
|
func Test_terraform_apply_autoApprove(t *testing.T) {
|
|
t.Parallel()
|
|
skipIfMissingEnvVar(t)
|
|
skipWithoutRemoteTerraformVersion(t)
|
|
|
|
ctx := context.Background()
|
|
|
|
cases := testCases{
|
|
"workspace manual apply, terraform apply without auto-approve, expect prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(false),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply"},
|
|
expectedCmdOutput: `Do you want to perform these actions in workspace "app"?`,
|
|
userInput: []string{"yes"},
|
|
postInputOutput: []string{`Apply complete!`},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
"workspace auto apply, terraform apply without auto-approve, expect prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(true),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply"},
|
|
expectedCmdOutput: `Do you want to perform these actions in workspace "app"?`,
|
|
userInput: []string{"yes"},
|
|
postInputOutput: []string{`Apply complete!`},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
"workspace manual apply, terraform apply with auto-approve, no prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(false),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply", "-auto-approve"},
|
|
expectedCmdOutput: `Apply complete!`,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
"workspace auto apply, terraform apply with auto-approve, no prompt": {
|
|
operations: []operationSets{
|
|
{
|
|
prep: func(t *testing.T, orgName, dir string) {
|
|
wsName := "app"
|
|
_ = createWorkspace(t, orgName, tfe.WorkspaceCreateOptions{
|
|
Name: tfe.String(wsName),
|
|
TerraformVersion: tfe.String(tfversion.String()),
|
|
AutoApply: tfe.Bool(true),
|
|
})
|
|
tfBlock := terraformConfigCloudBackendName(orgName, wsName)
|
|
writeMainTF(t, tfBlock, dir)
|
|
},
|
|
commands: []tfCommand{
|
|
{
|
|
command: []string{"init"},
|
|
expectedCmdOutput: `Terraform Cloud has been successfully initialized!`,
|
|
},
|
|
{
|
|
command: []string{"apply", "-auto-approve"},
|
|
expectedCmdOutput: `Apply complete!`,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
validations: func(t *testing.T, orgName string) {
|
|
workspace, err := tfeClient.Workspaces.ReadWithOptions(ctx, orgName, "app", &tfe.WorkspaceReadOptions{Include: "current_run"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if workspace.CurrentRun == nil {
|
|
t.Fatal("Expected workspace to have run, but got nil")
|
|
}
|
|
if workspace.CurrentRun.Status != tfe.RunApplied {
|
|
t.Fatalf("Expected run status to be `applied`, but is %s", workspace.CurrentRun.Status)
|
|
}
|
|
},
|
|
},
|
|
}
|
|
|
|
testRunner(t, cases, 1)
|
|
}
|