147 lines
2.6 KiB
Go
147 lines
2.6 KiB
Go
//go:build e2e
|
|
// +build e2e
|
|
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
tfe "github.com/hashicorp/go-tfe"
|
|
"github.com/hashicorp/go-uuid"
|
|
)
|
|
|
|
const (
|
|
expectConsoleTimeout = 15 * time.Second
|
|
)
|
|
|
|
type tfCommand struct {
|
|
command []string
|
|
expectedOutput string
|
|
expectedErr string
|
|
expectError bool
|
|
userInput []string
|
|
postInputOutput string
|
|
}
|
|
|
|
type operationSets struct {
|
|
commands []tfCommand
|
|
prep func(t *testing.T, orgName, dir string)
|
|
}
|
|
|
|
type testCases map[string]struct {
|
|
operations []operationSets
|
|
validations func(t *testing.T, orgName string)
|
|
}
|
|
|
|
func createOrganization(t *testing.T) (*tfe.Organization, func()) {
|
|
ctx := context.Background()
|
|
org, err := tfeClient.Organizations.Create(ctx, tfe.OrganizationCreateOptions{
|
|
Name: tfe.String("tst-" + randomString(t)),
|
|
Email: tfe.String(fmt.Sprintf("%s@tfe.local", randomString(t))),
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
return org, func() {
|
|
if err := tfeClient.Organizations.Delete(ctx, org.Name); err != nil {
|
|
t.Errorf("Error destroying organization! WARNING: Dangling resources\n"+
|
|
"may exist! The full error is shown below.\n\n"+
|
|
"Organization: %s\nError: %s", org.Name, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func createWorkspace(t *testing.T, org *tfe.Organization, wOpts tfe.WorkspaceCreateOptions) *tfe.Workspace {
|
|
ctx := context.Background()
|
|
w, err := tfeClient.Workspaces.Create(ctx, org.Name, wOpts)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
return w
|
|
}
|
|
|
|
func randomString(t *testing.T) string {
|
|
v, err := uuid.GenerateUUID()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return v
|
|
}
|
|
|
|
func terraformConfigLocalBackend() string {
|
|
return fmt.Sprintf(`
|
|
terraform {
|
|
backend "local" {
|
|
}
|
|
}
|
|
|
|
output "val" {
|
|
value = "${terraform.workspace}"
|
|
}
|
|
`)
|
|
}
|
|
|
|
func terraformConfigCloudBackendTags(org, tag string) string {
|
|
return fmt.Sprintf(`
|
|
terraform {
|
|
cloud {
|
|
hostname = "%s"
|
|
organization = "%s"
|
|
|
|
workspaces {
|
|
tags = ["%s"]
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "random_pet" "server" {
|
|
keepers = {
|
|
uuid = uuid()
|
|
}
|
|
|
|
length = 3
|
|
}
|
|
`, tfeHostname, org, tag)
|
|
}
|
|
|
|
func terraformConfigCloudBackendName(org, name string) string {
|
|
return fmt.Sprintf(`
|
|
terraform {
|
|
cloud {
|
|
hostname = "%s"
|
|
organization = "%s"
|
|
|
|
workspaces {
|
|
name = "%s"
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "random_pet" "server" {
|
|
keepers = {
|
|
uuid = uuid()
|
|
}
|
|
|
|
length = 3
|
|
}
|
|
`, tfeHostname, org, name)
|
|
}
|
|
|
|
func writeMainTF(t *testing.T, block string, dir string) {
|
|
f, err := os.Create(fmt.Sprintf("%s/main.tf", dir))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
_, err = f.WriteString(block)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
f.Close()
|
|
}
|