github.com/ibm-cloud/terraform@v0.6.4-0.20170726051544-8872b87621df/terraform/node_resource_refresh_test.go (about)

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