github.com/ticketmaster/terraform@v0.10.0-beta2.0.20170711045249-a12daf5aba4f/terraform/node_resource_refresh_test.go (about)

     1  package terraform
     2  
     3  import (
     4  	"reflect"
     5  	"sync"
     6  	"testing"
     7  
     8  	"github.com/davecgh/go-spew/spew"
     9  )
    10  
    11  func TestNodeRefreshableManagedResourceDynamicExpand_scaleOut(t *testing.T) {
    12  	var stateLock sync.RWMutex
    13  
    14  	addr, err := ParseResourceAddress("aws_instance.foo")
    15  	if err != nil {
    16  		t.Fatalf("bad: %s", err)
    17  	}
    18  
    19  	m := testModule(t, "refresh-resource-scale-inout")
    20  
    21  	state := &State{
    22  		Modules: []*ModuleState{
    23  			&ModuleState{
    24  				Path: rootModulePath,
    25  				Resources: map[string]*ResourceState{
    26  					"aws_instance.foo.0": &ResourceState{
    27  						Type: "aws_instance",
    28  						Deposed: []*InstanceState{
    29  							&InstanceState{
    30  								ID: "foo",
    31  							},
    32  						},
    33  					},
    34  					"aws_instance.foo.1": &ResourceState{
    35  						Type: "aws_instance",
    36  						Deposed: []*InstanceState{
    37  							&InstanceState{
    38  								ID: "bar",
    39  							},
    40  						},
    41  					},
    42  				},
    43  			},
    44  		},
    45  	}
    46  
    47  	n := &NodeRefreshableManagedResource{
    48  		NodeAbstractCountResource: &NodeAbstractCountResource{
    49  			NodeAbstractResource: &NodeAbstractResource{
    50  				Addr:   addr,
    51  				Config: m.Config().Resources[0],
    52  			},
    53  		},
    54  	}
    55  
    56  	g, err := n.DynamicExpand(&MockEvalContext{
    57  		PathPath:   []string{"root"},
    58  		StateState: state,
    59  		StateLock:  &stateLock,
    60  	})
    61  
    62  	actual := g.StringWithNodeTypes()
    63  	expected := `aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance
    64  aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance
    65  aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance
    66  root - terraform.graphNodeRoot
    67    aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance
    68    aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance
    69    aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance
    70  `
    71  	if expected != actual {
    72  		t.Fatalf("Expected:\n%s\nGot:\n%s", expected, actual)
    73  	}
    74  }
    75  
    76  func TestNodeRefreshableManagedResourceDynamicExpand_scaleIn(t *testing.T) {
    77  	var stateLock sync.RWMutex
    78  
    79  	addr, err := ParseResourceAddress("aws_instance.foo")
    80  	if err != nil {
    81  		t.Fatalf("bad: %s", err)
    82  	}
    83  
    84  	m := testModule(t, "refresh-resource-scale-inout")
    85  
    86  	state := &State{
    87  		Modules: []*ModuleState{
    88  			&ModuleState{
    89  				Path: rootModulePath,
    90  				Resources: map[string]*ResourceState{
    91  					"aws_instance.foo.0": &ResourceState{
    92  						Type: "aws_instance",
    93  						Deposed: []*InstanceState{
    94  							&InstanceState{
    95  								ID: "foo",
    96  							},
    97  						},
    98  					},
    99  					"aws_instance.foo.1": &ResourceState{
   100  						Type: "aws_instance",
   101  						Deposed: []*InstanceState{
   102  							&InstanceState{
   103  								ID: "bar",
   104  							},
   105  						},
   106  					},
   107  					"aws_instance.foo.2": &ResourceState{
   108  						Type: "aws_instance",
   109  						Deposed: []*InstanceState{
   110  							&InstanceState{
   111  								ID: "baz",
   112  							},
   113  						},
   114  					},
   115  					"aws_instance.foo.3": &ResourceState{
   116  						Type: "aws_instance",
   117  						Deposed: []*InstanceState{
   118  							&InstanceState{
   119  								ID: "qux",
   120  							},
   121  						},
   122  					},
   123  				},
   124  			},
   125  		},
   126  	}
   127  
   128  	n := &NodeRefreshableManagedResource{
   129  		NodeAbstractCountResource: &NodeAbstractCountResource{
   130  			NodeAbstractResource: &NodeAbstractResource{
   131  				Addr:   addr,
   132  				Config: m.Config().Resources[0],
   133  			},
   134  		},
   135  	}
   136  
   137  	g, err := n.DynamicExpand(&MockEvalContext{
   138  		PathPath:   []string{"root"},
   139  		StateState: state,
   140  		StateLock:  &stateLock,
   141  	})
   142  
   143  	actual := g.StringWithNodeTypes()
   144  	expected := `aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance
   145  aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance
   146  aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance
   147  aws_instance.foo[3] - *terraform.NodeRefreshableManagedResourceInstance
   148  root - terraform.graphNodeRoot
   149    aws_instance.foo[0] - *terraform.NodeRefreshableManagedResourceInstance
   150    aws_instance.foo[1] - *terraform.NodeRefreshableManagedResourceInstance
   151    aws_instance.foo[2] - *terraform.NodeRefreshableManagedResourceInstance
   152    aws_instance.foo[3] - *terraform.NodeRefreshableManagedResourceInstance
   153  `
   154  	if expected != actual {
   155  		t.Fatalf("Expected:\n%s\nGot:\n%s", expected, actual)
   156  	}
   157  }
   158  
   159  func TestNodeRefreshableManagedResourceEvalTree_scaleOut(t *testing.T) {
   160  	addr, err := ParseResourceAddress("aws_instance.foo[2]")
   161  	if err != nil {
   162  		t.Fatalf("bad: %s", err)
   163  	}
   164  
   165  	m := testModule(t, "refresh-resource-scale-inout")
   166  
   167  	n := &NodeRefreshableManagedResourceInstance{
   168  		NodeAbstractResource: &NodeAbstractResource{
   169  			Addr:   addr,
   170  			Config: m.Config().Resources[0],
   171  		},
   172  	}
   173  
   174  	actual := n.EvalTree()
   175  	expected := n.evalTreeManagedResourceNoState()
   176  
   177  	if !reflect.DeepEqual(expected, actual) {
   178  		t.Fatalf("Expected:\n\n%s\nGot:\n\n%s\n", spew.Sdump(expected), spew.Sdump(actual))
   179  	}
   180  }