github.com/muratcelep/terraform@v1.1.0-beta2-not-internal-4/not-internal/instances/set_test.go (about)

     1  package instances
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/muratcelep/terraform/not-internal/addrs"
     7  	"github.com/zclconf/go-cty/cty"
     8  )
     9  
    10  func TestSet(t *testing.T) {
    11  	exp := NewExpander()
    12  
    13  	// The following constructs the following imaginary module/resource tree:
    14  	// - root module
    15  	//   - test_thing.single: no repetition
    16  	//   - test_thing.count: count = 1
    17  	//   - test_thing.for_each: for_each = { c = "C" }
    18  	//   - module.single: no repetition
    19  	//     - test_thing.single: no repetition
    20  	//     - module.nested_single: no repetition
    21  	//       - module.zero_count: count = 0
    22  	//   - module.count: count = 2
    23  	//     - module.nested_for_each: [0] for_each = {}, [1] for_each = { e = "E" }
    24  	//   - module.for_each: for_each = { a = "A", b = "B" }
    25  	//     - test_thing.count: ["a"] count = 0, ["b"] count = 1
    26  	exp.SetModuleSingle(addrs.RootModuleInstance, addrs.ModuleCall{Name: "single"})
    27  	exp.SetModuleCount(addrs.RootModuleInstance, addrs.ModuleCall{Name: "count"}, 2)
    28  	exp.SetModuleForEach(addrs.RootModuleInstance, addrs.ModuleCall{Name: "for_each"}, map[string]cty.Value{
    29  		"a": cty.StringVal("A"),
    30  		"b": cty.StringVal("B"),
    31  	})
    32  	exp.SetModuleSingle(addrs.RootModuleInstance.Child("single", addrs.NoKey), addrs.ModuleCall{Name: "nested_single"})
    33  	exp.SetModuleForEach(addrs.RootModuleInstance.Child("count", addrs.IntKey(0)), addrs.ModuleCall{Name: "nested_for_each"}, nil)
    34  	exp.SetModuleForEach(addrs.RootModuleInstance.Child("count", addrs.IntKey(1)), addrs.ModuleCall{Name: "nested_for_each"}, map[string]cty.Value{
    35  		"e": cty.StringVal("E"),
    36  	})
    37  	exp.SetModuleCount(
    38  		addrs.RootModuleInstance.Child("single", addrs.NoKey).Child("nested_single", addrs.NoKey),
    39  		addrs.ModuleCall{Name: "zero_count"},
    40  		0,
    41  	)
    42  
    43  	rAddr := func(name string) addrs.Resource {
    44  		return addrs.Resource{
    45  			Mode: addrs.ManagedResourceMode,
    46  			Type: "test_thing",
    47  			Name: name,
    48  		}
    49  	}
    50  	exp.SetResourceSingle(addrs.RootModuleInstance, rAddr("single"))
    51  	exp.SetResourceCount(addrs.RootModuleInstance, rAddr("count"), 1)
    52  	exp.SetResourceForEach(addrs.RootModuleInstance, rAddr("for_each"), map[string]cty.Value{
    53  		"c": cty.StringVal("C"),
    54  	})
    55  	exp.SetResourceSingle(addrs.RootModuleInstance.Child("single", addrs.NoKey), rAddr("single"))
    56  	exp.SetResourceCount(addrs.RootModuleInstance.Child("for_each", addrs.StringKey("a")), rAddr("count"), 0)
    57  	exp.SetResourceCount(addrs.RootModuleInstance.Child("for_each", addrs.StringKey("b")), rAddr("count"), 1)
    58  
    59  	set := exp.AllInstances()
    60  
    61  	// HasModuleInstance tests
    62  	if input := addrs.RootModuleInstance; !set.HasModuleInstance(input) {
    63  		t.Errorf("missing %T %s", input, input.String())
    64  	}
    65  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey); !set.HasModuleInstance(input) {
    66  		t.Errorf("missing %T %s", input, input.String())
    67  	}
    68  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey).Child("nested_single", addrs.NoKey); !set.HasModuleInstance(input) {
    69  		t.Errorf("missing %T %s", input, input.String())
    70  	}
    71  	if input := addrs.RootModuleInstance.Child("count", addrs.IntKey(0)); !set.HasModuleInstance(input) {
    72  		t.Errorf("missing %T %s", input, input.String())
    73  	}
    74  	if input := addrs.RootModuleInstance.Child("count", addrs.IntKey(1)); !set.HasModuleInstance(input) {
    75  		t.Errorf("missing %T %s", input, input.String())
    76  	}
    77  	if input := addrs.RootModuleInstance.Child("count", addrs.IntKey(1)).Child("nested_for_each", addrs.StringKey("e")); !set.HasModuleInstance(input) {
    78  		t.Errorf("missing %T %s", input, input.String())
    79  	}
    80  	if input := addrs.RootModuleInstance.Child("for_each", addrs.StringKey("a")); !set.HasModuleInstance(input) {
    81  		t.Errorf("missing %T %s", input, input.String())
    82  	}
    83  	if input := addrs.RootModuleInstance.Child("for_each", addrs.StringKey("b")); !set.HasModuleInstance(input) {
    84  		t.Errorf("missing %T %s", input, input.String())
    85  	}
    86  	if input := addrs.RootModuleInstance.Child("single", addrs.IntKey(0)); set.HasModuleInstance(input) {
    87  		t.Errorf("unexpected %T %s", input, input.String())
    88  	}
    89  	if input := addrs.RootModuleInstance.Child("single", addrs.StringKey("a")); set.HasModuleInstance(input) {
    90  		t.Errorf("unexpected %T %s", input, input.String())
    91  	}
    92  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey).Child("nonexist", addrs.NoKey); set.HasModuleInstance(input) {
    93  		t.Errorf("unexpected %T %s", input, input.String())
    94  	}
    95  	if input := addrs.RootModuleInstance.Child("count", addrs.NoKey); set.HasModuleInstance(input) {
    96  		t.Errorf("unexpected %T %s", input, input.String())
    97  	}
    98  	if input := addrs.RootModuleInstance.Child("count", addrs.IntKey(2)); set.HasModuleInstance(input) {
    99  		t.Errorf("unexpected %T %s", input, input.String())
   100  	}
   101  	if input := addrs.RootModuleInstance.Child("count", addrs.StringKey("a")); set.HasModuleInstance(input) {
   102  		t.Errorf("unexpected %T %s", input, input.String())
   103  	}
   104  	if input := addrs.RootModuleInstance.Child("count", addrs.IntKey(0)).Child("nested_for_each", addrs.StringKey("e")); set.HasModuleInstance(input) {
   105  		t.Errorf("unexpected %T %s", input, input.String())
   106  	}
   107  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey).Child("nested_single", addrs.NoKey).Child("zero_count", addrs.NoKey); set.HasModuleInstance(input) {
   108  		t.Errorf("unexpected %T %s", input, input.String())
   109  	}
   110  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey).Child("nested_single", addrs.NoKey).Child("zero_count", addrs.IntKey(0)); set.HasModuleInstance(input) {
   111  		t.Errorf("unexpected %T %s", input, input.String())
   112  	}
   113  
   114  	// HasModuleCall tests
   115  	if input := addrs.RootModuleInstance.ChildCall("single"); !set.HasModuleCall(input) {
   116  		t.Errorf("missing %T %s", input, input.String())
   117  	}
   118  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey).ChildCall("nested_single"); !set.HasModuleCall(input) {
   119  		t.Errorf("missing %T %s", input, input.String())
   120  	}
   121  	if input := addrs.RootModuleInstance.ChildCall("count"); !set.HasModuleCall(input) {
   122  		t.Errorf("missing %T %s", input, input.String())
   123  	}
   124  	if input := addrs.RootModuleInstance.Child("count", addrs.IntKey(0)).ChildCall("nested_for_each"); !set.HasModuleCall(input) {
   125  		t.Errorf("missing %T %s", input, input.String())
   126  	}
   127  	if input := addrs.RootModuleInstance.Child("count", addrs.IntKey(1)).ChildCall("nested_for_each"); !set.HasModuleCall(input) {
   128  		t.Errorf("missing %T %s", input, input.String())
   129  	}
   130  	if input := addrs.RootModuleInstance.ChildCall("for_each"); !set.HasModuleCall(input) {
   131  		t.Errorf("missing %T %s", input, input.String())
   132  	}
   133  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey).Child("nested_single", addrs.NoKey).ChildCall("zero_count"); !set.HasModuleCall(input) {
   134  		t.Errorf("missing %T %s", input, input.String())
   135  	}
   136  	if input := addrs.RootModuleInstance.ChildCall("nonexist"); set.HasModuleCall(input) {
   137  		t.Errorf("unexpected %T %s", input, input.String())
   138  	}
   139  	if input := addrs.RootModuleInstance.Child("single", addrs.NoKey).ChildCall("nonexist"); set.HasModuleCall(input) {
   140  		t.Errorf("unexpected %T %s", input, input.String())
   141  	}
   142  
   143  	// HasResourceInstance tests
   144  	if input := rAddr("single").Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance); !set.HasResourceInstance(input) {
   145  		t.Errorf("missing %T %s", input, input.String())
   146  	}
   147  	if input := rAddr("count").Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance); !set.HasResourceInstance(input) {
   148  		t.Errorf("missing %T %s", input, input.String())
   149  	}
   150  	if input := rAddr("for_each").Instance(addrs.StringKey("c")).Absolute(addrs.RootModuleInstance); !set.HasResourceInstance(input) {
   151  		t.Errorf("missing %T %s", input, input.String())
   152  	}
   153  	if input := rAddr("single").Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance.Child("single", addrs.NoKey)); !set.HasResourceInstance(input) {
   154  		t.Errorf("missing %T %s", input, input.String())
   155  	}
   156  	if input := rAddr("count").Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance.Child("for_each", addrs.StringKey("b"))); !set.HasResourceInstance(input) {
   157  		t.Errorf("missing %T %s", input, input.String())
   158  	}
   159  	if input := rAddr("single").Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance); set.HasResourceInstance(input) {
   160  		t.Errorf("unexpected %T %s", input, input.String())
   161  	}
   162  	if input := rAddr("single").Instance(addrs.StringKey("")).Absolute(addrs.RootModuleInstance); set.HasResourceInstance(input) {
   163  		t.Errorf("unexpected %T %s", input, input.String())
   164  	}
   165  	if input := rAddr("count").Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance); set.HasResourceInstance(input) {
   166  		t.Errorf("unexpected %T %s", input, input.String())
   167  	}
   168  	if input := rAddr("count").Instance(addrs.StringKey("")).Absolute(addrs.RootModuleInstance); set.HasResourceInstance(input) {
   169  		t.Errorf("unexpected %T %s", input, input.String())
   170  	}
   171  	if input := rAddr("count").Instance(addrs.IntKey(1)).Absolute(addrs.RootModuleInstance); set.HasResourceInstance(input) {
   172  		t.Errorf("unexpected %T %s", input, input.String())
   173  	}
   174  	if input := rAddr("single").Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance.Child("single", addrs.IntKey(0))); set.HasResourceInstance(input) {
   175  		t.Errorf("unexpected %T %s", input, input.String())
   176  	}
   177  	if input := rAddr("count").Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance.Child("for_each", addrs.StringKey("a"))); set.HasResourceInstance(input) {
   178  		t.Errorf("unexpected %T %s", input, input.String())
   179  	}
   180  
   181  	// HasResource tests
   182  	if input := rAddr("single").Absolute(addrs.RootModuleInstance); !set.HasResource(input) {
   183  		t.Errorf("missing %T %s", input, input.String())
   184  	}
   185  	if input := rAddr("count").Absolute(addrs.RootModuleInstance); !set.HasResource(input) {
   186  		t.Errorf("missing %T %s", input, input.String())
   187  	}
   188  	if input := rAddr("for_each").Absolute(addrs.RootModuleInstance); !set.HasResource(input) {
   189  		t.Errorf("missing %T %s", input, input.String())
   190  	}
   191  	if input := rAddr("single").Absolute(addrs.RootModuleInstance.Child("single", addrs.NoKey)); !set.HasResource(input) {
   192  		t.Errorf("missing %T %s", input, input.String())
   193  	}
   194  	if input := rAddr("count").Absolute(addrs.RootModuleInstance.Child("for_each", addrs.StringKey("a"))); !set.HasResource(input) {
   195  		t.Errorf("missing %T %s", input, input.String())
   196  	}
   197  	if input := rAddr("count").Absolute(addrs.RootModuleInstance.Child("for_each", addrs.StringKey("b"))); !set.HasResource(input) {
   198  		t.Errorf("missing %T %s", input, input.String())
   199  	}
   200  	if input := rAddr("nonexist").Absolute(addrs.RootModuleInstance); set.HasResource(input) {
   201  		t.Errorf("unexpected %T %s", input, input.String())
   202  	}
   203  	if input := rAddr("count").Absolute(addrs.RootModuleInstance.Child("for_each", addrs.StringKey("nonexist"))); set.HasResource(input) {
   204  		t.Errorf("unexpected %T %s", input, input.String())
   205  	}
   206  
   207  }