github.com/nbering/terraform@v0.8.5-0.20170113232247-453f670684b5/terraform/transform_destroy_edge_test.go (about)

     1  package terraform
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  )
     7  
     8  func TestDestroyEdgeTransformer_basic(t *testing.T) {
     9  	g := Graph{Path: RootModulePath}
    10  	g.Add(&graphNodeDestroyerTest{AddrString: "test.A"})
    11  	g.Add(&graphNodeDestroyerTest{AddrString: "test.B"})
    12  	tf := &DestroyEdgeTransformer{
    13  		Module: testModule(t, "transform-destroy-edge-basic"),
    14  	}
    15  	if err := tf.Transform(&g); err != nil {
    16  		t.Fatalf("err: %s", err)
    17  	}
    18  
    19  	actual := strings.TrimSpace(g.String())
    20  	expected := strings.TrimSpace(testTransformDestroyEdgeBasicStr)
    21  	if actual != expected {
    22  		t.Fatalf("bad:\n\n%s", actual)
    23  	}
    24  }
    25  
    26  func TestDestroyEdgeTransformer_create(t *testing.T) {
    27  	g := Graph{Path: RootModulePath}
    28  	g.Add(&graphNodeDestroyerTest{AddrString: "test.A"})
    29  	g.Add(&graphNodeDestroyerTest{AddrString: "test.B"})
    30  	g.Add(&graphNodeCreatorTest{AddrString: "test.A"})
    31  	tf := &DestroyEdgeTransformer{
    32  		Module: testModule(t, "transform-destroy-edge-basic"),
    33  	}
    34  	if err := tf.Transform(&g); err != nil {
    35  		t.Fatalf("err: %s", err)
    36  	}
    37  
    38  	actual := strings.TrimSpace(g.String())
    39  	expected := strings.TrimSpace(testTransformDestroyEdgeCreatorStr)
    40  	if actual != expected {
    41  		t.Fatalf("bad:\n\n%s", actual)
    42  	}
    43  }
    44  
    45  func TestDestroyEdgeTransformer_multi(t *testing.T) {
    46  	g := Graph{Path: RootModulePath}
    47  	g.Add(&graphNodeDestroyerTest{AddrString: "test.A"})
    48  	g.Add(&graphNodeDestroyerTest{AddrString: "test.B"})
    49  	g.Add(&graphNodeDestroyerTest{AddrString: "test.C"})
    50  	tf := &DestroyEdgeTransformer{
    51  		Module: testModule(t, "transform-destroy-edge-multi"),
    52  	}
    53  	if err := tf.Transform(&g); err != nil {
    54  		t.Fatalf("err: %s", err)
    55  	}
    56  
    57  	actual := strings.TrimSpace(g.String())
    58  	expected := strings.TrimSpace(testTransformDestroyEdgeMultiStr)
    59  	if actual != expected {
    60  		t.Fatalf("bad:\n\n%s", actual)
    61  	}
    62  }
    63  
    64  func TestDestroyEdgeTransformer_selfRef(t *testing.T) {
    65  	g := Graph{Path: RootModulePath}
    66  	g.Add(&graphNodeDestroyerTest{AddrString: "test.A"})
    67  	tf := &DestroyEdgeTransformer{
    68  		Module: testModule(t, "transform-destroy-edge-self-ref"),
    69  	}
    70  	if err := tf.Transform(&g); err != nil {
    71  		t.Fatalf("err: %s", err)
    72  	}
    73  
    74  	actual := strings.TrimSpace(g.String())
    75  	expected := strings.TrimSpace(testTransformDestroyEdgeSelfRefStr)
    76  	if actual != expected {
    77  		t.Fatalf("bad:\n\n%s", actual)
    78  	}
    79  }
    80  
    81  func TestDestroyEdgeTransformer_module(t *testing.T) {
    82  	g := Graph{Path: RootModulePath}
    83  	g.Add(&graphNodeDestroyerTest{AddrString: "module.child.aws_instance.b"})
    84  	g.Add(&graphNodeDestroyerTest{AddrString: "aws_instance.a"})
    85  	tf := &DestroyEdgeTransformer{
    86  		Module: testModule(t, "transform-destroy-edge-module"),
    87  	}
    88  	if err := tf.Transform(&g); err != nil {
    89  		t.Fatalf("err: %s", err)
    90  	}
    91  
    92  	actual := strings.TrimSpace(g.String())
    93  	expected := strings.TrimSpace(testTransformDestroyEdgeModuleStr)
    94  	if actual != expected {
    95  		t.Fatalf("bad:\n\n%s", actual)
    96  	}
    97  }
    98  
    99  type graphNodeCreatorTest struct {
   100  	AddrString string
   101  	Refs       []string
   102  }
   103  
   104  func (n *graphNodeCreatorTest) Name() string { return n.CreateAddr().String() }
   105  func (n *graphNodeCreatorTest) CreateAddr() *ResourceAddress {
   106  	addr, err := ParseResourceAddress(n.AddrString)
   107  	if err != nil {
   108  		panic(err)
   109  	}
   110  
   111  	return addr
   112  }
   113  
   114  func (n *graphNodeCreatorTest) References() []string { return n.Refs }
   115  
   116  type graphNodeDestroyerTest struct {
   117  	AddrString string
   118  	CBD        bool
   119  	Modified   bool
   120  }
   121  
   122  func (n *graphNodeDestroyerTest) Name() string {
   123  	result := n.DestroyAddr().String() + " (destroy)"
   124  	if n.Modified {
   125  		result += " (modified)"
   126  	}
   127  
   128  	return result
   129  }
   130  
   131  func (n *graphNodeDestroyerTest) CreateBeforeDestroy() bool { return n.CBD }
   132  
   133  func (n *graphNodeDestroyerTest) ModifyCreateBeforeDestroy(v bool) error {
   134  	n.Modified = true
   135  	return nil
   136  }
   137  
   138  func (n *graphNodeDestroyerTest) DestroyAddr() *ResourceAddress {
   139  	addr, err := ParseResourceAddress(n.AddrString)
   140  	if err != nil {
   141  		panic(err)
   142  	}
   143  
   144  	return addr
   145  }
   146  
   147  const testTransformDestroyEdgeBasicStr = `
   148  test.A (destroy)
   149    test.B (destroy)
   150  test.B (destroy)
   151  `
   152  
   153  const testTransformDestroyEdgeCreatorStr = `
   154  test.A
   155    test.A (destroy)
   156  test.A (destroy)
   157    test.B (destroy)
   158  test.B (destroy)
   159  `
   160  
   161  const testTransformDestroyEdgeMultiStr = `
   162  test.A (destroy)
   163    test.B (destroy)
   164    test.C (destroy)
   165  test.B (destroy)
   166    test.C (destroy)
   167  test.C (destroy)
   168  `
   169  
   170  const testTransformDestroyEdgeSelfRefStr = `
   171  test.A (destroy)
   172  `
   173  
   174  const testTransformDestroyEdgeModuleStr = `
   175  aws_instance.a (destroy)
   176  module.child.aws_instance.b (destroy)
   177    aws_instance.a (destroy)
   178  `