opentofu/terraform/transform_destroy_cbd_test.go
James Bardin 847c8d6244 CBD transformer test update
Comment out an out of date CBD test. The test no longer works due to
the CBD status being checked during plan, but the test case may still
have some value which we can review later.

update the text in the CBD transformer to reflect the
s/ancestor/descendent/ change.
2018-10-16 19:14:11 -07:00

199 lines
4.7 KiB
Go

package terraform
import (
"strings"
"testing"
"github.com/hashicorp/terraform/addrs"
)
func TestCBDEdgeTransformer(t *testing.T) {
g := Graph{Path: addrs.RootModuleInstance}
g.Add(&graphNodeCreatorTest{AddrString: "test_object.A"})
g.Add(&graphNodeCreatorTest{AddrString: "test_object.B"})
g.Add(&graphNodeDestroyerTest{AddrString: "test_object.A", CBD: true})
module := testModule(t, "transform-destroy-edge-basic")
{
tf := &DestroyEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
{
tf := &CBDEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
actual := strings.TrimSpace(g.String())
expected := strings.TrimSpace(testTransformCBDEdgeBasicStr)
if actual != expected {
t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected)
}
}
// FIXME: see if there is a worthwhile test to create from this.
// CBD is marked on created nodes during the plan phase now, and the
// CBDEdgeTransformer only takes care of the final edge reversal.
/*
func TestCBDEdgeTransformer_depNonCBD(t *testing.T) {
g := Graph{Path: addrs.RootModuleInstance}
g.Add(&graphNodeCreatorTest{AddrString: "test_object.A"})
g.Add(&graphNodeCreatorTest{AddrString: "test_object.B"})
g.Add(&graphNodeDestroyerTest{AddrString: "test_object.A"})
g.Add(&graphNodeDestroyerTest{AddrString: "test_object.B", CBD: true})
module := testModule(t, "transform-destroy-edge-basic")
{
tf := &DestroyEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
{
tf := &CBDEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
actual := strings.TrimSpace(g.String())
expected := strings.TrimSpace(testTransformCBDEdgeDepNonCBDStr)
if actual != expected {
t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected)
}
}
*/
func TestCBDEdgeTransformer_depNonCBDCount(t *testing.T) {
g := Graph{Path: addrs.RootModuleInstance}
g.Add(&graphNodeCreatorTest{AddrString: "test_object.A"})
g.Add(&graphNodeCreatorTest{AddrString: "test_object.B[0]"})
g.Add(&graphNodeCreatorTest{AddrString: "test_object.B[1]"})
g.Add(&graphNodeDestroyerTest{AddrString: "test_object.A", CBD: true})
module := testModule(t, "transform-destroy-edge-splat")
{
tf := &DestroyEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
{
tf := &CBDEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
actual := strings.TrimSpace(g.String())
expected := strings.TrimSpace(`
test_object.A
test_object.A (destroy)
test_object.A
test_object.B[0]
test_object.B[1]
test_object.B[0]
test_object.B[1]
`)
if actual != expected {
t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected)
}
}
func TestCBDEdgeTransformer_depNonCBDCountBoth(t *testing.T) {
g := Graph{Path: addrs.RootModuleInstance}
g.Add(&graphNodeCreatorTest{AddrString: "test_object.A[0]"})
g.Add(&graphNodeCreatorTest{AddrString: "test_object.A[1]"})
g.Add(&graphNodeCreatorTest{AddrString: "test_object.B[0]"})
g.Add(&graphNodeCreatorTest{AddrString: "test_object.B[1]"})
g.Add(&graphNodeDestroyerTest{AddrString: "test_object.A[0]", CBD: true})
g.Add(&graphNodeDestroyerTest{AddrString: "test_object.A[1]", CBD: true})
module := testModule(t, "transform-destroy-edge-splat")
{
tf := &DestroyEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
{
tf := &CBDEdgeTransformer{
Config: module,
Schemas: simpleTestSchemas(),
}
if err := tf.Transform(&g); err != nil {
t.Fatalf("err: %s", err)
}
}
actual := strings.TrimSpace(g.String())
expected := strings.TrimSpace(`
test_object.A[0]
test_object.A[0] (destroy)
test_object.A[0]
test_object.B[0]
test_object.B[1]
test_object.A[1]
test_object.A[1] (destroy)
test_object.A[1]
test_object.B[0]
test_object.B[1]
test_object.B[0]
test_object.B[1]
`)
if actual != expected {
t.Fatalf("wrong result\n\ngot:\n%s\n\nwant:\n%s", actual, expected)
}
}
const testTransformCBDEdgeBasicStr = `
test_object.A
test_object.A (destroy)
test_object.A
test_object.B
test_object.B
`
const testTransformCBDEdgeDepNonCBDStr = `
test_object.A
test_object.A (destroy) (modified)
test_object.A
test_object.B
test_object.B (destroy)
test_object.B
test_object.B (destroy)
test_object.B
`