opentofu/terraform/terraform_test.go
2014-07-03 11:27:30 -07:00

205 lines
3.2 KiB
Go

package terraform
import (
"path/filepath"
"sync"
"testing"
"github.com/hashicorp/terraform/config"
)
// This is the directory where our test fixtures are.
const fixtureDir = "./test-fixtures"
func testConfig(t *testing.T, name string) *config.Config {
c, err := config.Load(filepath.Join(fixtureDir, name, "main.tf"))
if err != nil {
t.Fatalf("err: %s", err)
}
return c
}
func testProviderFuncFixed(rp ResourceProvider) ResourceProviderFactory {
return func() (ResourceProvider, error) {
return rp, nil
}
}
func testProviderMock(p ResourceProvider) *MockResourceProvider {
return p.(*MockResourceProvider)
}
// HookRecordApplyOrder is a test hook that records the order of applies
// by recording the PreApply event.
type HookRecordApplyOrder struct {
NilHook
Active bool
IDs []string
States []*ResourceState
Diffs []*ResourceDiff
l sync.Mutex
}
func (h *HookRecordApplyOrder) PreApply(
id string,
s *ResourceState,
d *ResourceDiff) (HookAction, error) {
if h.Active {
h.l.Lock()
defer h.l.Unlock()
h.IDs = append(h.IDs, id)
h.Diffs = append(h.Diffs, d)
h.States = append(h.States, s)
}
return HookActionContinue, nil
}
// Below are all the constant strings that are the expected output for
// various tests.
const testTerraformApplyStr = `
aws_instance.bar:
ID = foo
foo = bar
type = aws_instance
aws_instance.foo:
ID = foo
num = 2
type = aws_instance
`
const testTerraformApplyCancelStr = `
aws_instance.foo:
ID = foo
num = 2
`
const testTerraformApplyComputeStr = `
aws_instance.bar:
ID = foo
foo = computed_dynamical
type = aws_instance
aws_instance.foo:
ID = foo
dynamical = computed_dynamical
num = 2
type = aws_instance
`
const testTerraformApplyDestroyStr = `
<no state>
`
const testTerraformApplyErrorStr = `
aws_instance.foo:
ID = foo
num = 2
`
const testTerraformApplyErrorPartialStr = `
aws_instance.bar:
ID = bar
aws_instance.foo:
ID = foo
num = 2
`
const testTerraformApplyUnknownAttrStr = `
aws_instance.foo:
ID = foo
num = 2
type = aws_instance
`
const testTerraformApplyVarsStr = `
aws_instance.bar:
ID = foo
foo = bar
type = aws_instance
aws_instance.foo:
ID = foo
num = 2
type = aws_instance
`
const testTerraformPlanStr = `
DIFF:
UPDATE: aws_instance.bar
foo: "" => "2"
type: "" => "aws_instance"
UPDATE: aws_instance.foo
num: "" => "2"
type: "" => "aws_instance"
STATE:
<no state>
`
const testTerraformPlanComputedStr = `
DIFF:
UPDATE: aws_instance.bar
foo: "" => "<computed>"
type: "" => "aws_instance"
UPDATE: aws_instance.foo
id: "" => "<computed>"
num: "" => "2"
type: "" => "aws_instance"
STATE:
<no state>
`
const testTerraformPlanDestroyStr = `
DIFF:
DESTROY: aws_instance.one
DESTROY: aws_instance.two
STATE:
aws_instance.one:
ID = bar
aws_instance.two:
ID = baz
`
const testTerraformPlanOrphanStr = `
DIFF:
DESTROY: aws_instance.baz
UPDATE: aws_instance.foo
num: "" => "2"
type: "" => "aws_instance"
STATE:
aws_instance.baz:
ID = bar
`
const testTerraformPlanStateStr = `
DIFF:
UPDATE: aws_instance.bar
foo: "" => "2"
type: "" => "aws_instance"
UPDATE: aws_instance.foo
num: "" => "2"
type: "" => ""
STATE:
aws_instance.foo:
ID = bar
`