github.com/shvar/terraform@v0.6.9-0.20151215234924-3365cd2231df/config/merge_test.go (about) 1 package config 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestMerge(t *testing.T) { 9 cases := []struct { 10 c1, c2, result *Config 11 err bool 12 }{ 13 // Normal good case. 14 { 15 &Config{ 16 Atlas: &AtlasConfig{ 17 Name: "foo", 18 }, 19 Modules: []*Module{ 20 &Module{Name: "foo"}, 21 }, 22 Outputs: []*Output{ 23 &Output{Name: "foo"}, 24 }, 25 ProviderConfigs: []*ProviderConfig{ 26 &ProviderConfig{Name: "foo"}, 27 }, 28 Resources: []*Resource{ 29 &Resource{Name: "foo"}, 30 }, 31 Variables: []*Variable{ 32 &Variable{Name: "foo"}, 33 }, 34 35 unknownKeys: []string{"foo"}, 36 }, 37 38 &Config{ 39 Atlas: &AtlasConfig{ 40 Name: "bar", 41 }, 42 Modules: []*Module{ 43 &Module{Name: "bar"}, 44 }, 45 Outputs: []*Output{ 46 &Output{Name: "bar"}, 47 }, 48 ProviderConfigs: []*ProviderConfig{ 49 &ProviderConfig{Name: "bar"}, 50 }, 51 Resources: []*Resource{ 52 &Resource{Name: "bar"}, 53 }, 54 Variables: []*Variable{ 55 &Variable{Name: "bar"}, 56 }, 57 58 unknownKeys: []string{"bar"}, 59 }, 60 61 &Config{ 62 Atlas: &AtlasConfig{ 63 Name: "bar", 64 }, 65 Modules: []*Module{ 66 &Module{Name: "foo"}, 67 &Module{Name: "bar"}, 68 }, 69 Outputs: []*Output{ 70 &Output{Name: "foo"}, 71 &Output{Name: "bar"}, 72 }, 73 ProviderConfigs: []*ProviderConfig{ 74 &ProviderConfig{Name: "foo"}, 75 &ProviderConfig{Name: "bar"}, 76 }, 77 Resources: []*Resource{ 78 &Resource{Name: "foo"}, 79 &Resource{Name: "bar"}, 80 }, 81 Variables: []*Variable{ 82 &Variable{Name: "foo"}, 83 &Variable{Name: "bar"}, 84 }, 85 86 unknownKeys: []string{"foo", "bar"}, 87 }, 88 89 false, 90 }, 91 92 // Test that when merging duplicates, it merges into the 93 // first, but keeps the duplicates so that errors still 94 // happen. 95 { 96 &Config{ 97 Outputs: []*Output{ 98 &Output{Name: "foo"}, 99 }, 100 ProviderConfigs: []*ProviderConfig{ 101 &ProviderConfig{Name: "foo"}, 102 }, 103 Resources: []*Resource{ 104 &Resource{Name: "foo"}, 105 }, 106 Variables: []*Variable{ 107 &Variable{Name: "foo", Default: "foo"}, 108 &Variable{Name: "foo"}, 109 }, 110 111 unknownKeys: []string{"foo"}, 112 }, 113 114 &Config{ 115 Outputs: []*Output{ 116 &Output{Name: "bar"}, 117 }, 118 ProviderConfigs: []*ProviderConfig{ 119 &ProviderConfig{Name: "bar"}, 120 }, 121 Resources: []*Resource{ 122 &Resource{Name: "bar"}, 123 }, 124 Variables: []*Variable{ 125 &Variable{Name: "foo", Default: "bar"}, 126 &Variable{Name: "bar"}, 127 }, 128 129 unknownKeys: []string{"bar"}, 130 }, 131 132 &Config{ 133 Outputs: []*Output{ 134 &Output{Name: "foo"}, 135 &Output{Name: "bar"}, 136 }, 137 ProviderConfigs: []*ProviderConfig{ 138 &ProviderConfig{Name: "foo"}, 139 &ProviderConfig{Name: "bar"}, 140 }, 141 Resources: []*Resource{ 142 &Resource{Name: "foo"}, 143 &Resource{Name: "bar"}, 144 }, 145 Variables: []*Variable{ 146 &Variable{Name: "foo", Default: "bar"}, 147 &Variable{Name: "foo"}, 148 &Variable{Name: "bar"}, 149 }, 150 151 unknownKeys: []string{"foo", "bar"}, 152 }, 153 154 false, 155 }, 156 } 157 158 for i, tc := range cases { 159 actual, err := Merge(tc.c1, tc.c2) 160 if err != nil != tc.err { 161 t.Fatalf("%d: error fail", i) 162 } 163 164 if !reflect.DeepEqual(actual, tc.result) { 165 t.Fatalf("%d: bad:\n\n%#v", i, actual) 166 } 167 } 168 }