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 }