github.com/lamielle/terraform@v0.3.2-0.20141121070651-81f008ba53d5/config/raw_config_test.go (about) 1 package config 2 3 import ( 4 "encoding/gob" 5 "reflect" 6 "testing" 7 ) 8 9 func TestNewRawConfig(t *testing.T) { 10 raw := map[string]interface{}{ 11 "foo": "${var.bar}", 12 "bar": `${file("boom.txt")}`, 13 } 14 15 rc, err := NewRawConfig(raw) 16 if err != nil { 17 t.Fatalf("err: %s", err) 18 } 19 20 if len(rc.Interpolations) != 2 { 21 t.Fatalf("bad: %#v", rc.Interpolations) 22 } 23 if len(rc.Variables) != 1 { 24 t.Fatalf("bad: %#v", rc.Variables) 25 } 26 } 27 28 func TestRawConfig(t *testing.T) { 29 raw := map[string]interface{}{ 30 "foo": "${var.bar}", 31 } 32 33 rc, err := NewRawConfig(raw) 34 if err != nil { 35 t.Fatalf("err: %s", err) 36 } 37 38 // Before interpolate, Config() should be the raw 39 if !reflect.DeepEqual(rc.Config(), raw) { 40 t.Fatalf("bad: %#v", rc.Config()) 41 } 42 43 vars := map[string]string{"var.bar": "baz"} 44 if err := rc.Interpolate(vars); err != nil { 45 t.Fatalf("err: %s", err) 46 } 47 48 actual := rc.Config() 49 expected := map[string]interface{}{ 50 "foo": "baz", 51 } 52 53 if !reflect.DeepEqual(actual, expected) { 54 t.Fatalf("bad: %#v", actual) 55 } 56 if len(rc.UnknownKeys()) != 0 { 57 t.Fatalf("bad: %#v", rc.UnknownKeys()) 58 } 59 } 60 61 func TestRawConfig_double(t *testing.T) { 62 raw := map[string]interface{}{ 63 "foo": "${var.bar}", 64 } 65 66 rc, err := NewRawConfig(raw) 67 if err != nil { 68 t.Fatalf("err: %s", err) 69 } 70 71 vars := map[string]string{"var.bar": "baz"} 72 if err := rc.Interpolate(vars); err != nil { 73 t.Fatalf("err: %s", err) 74 } 75 76 actual := rc.Config() 77 expected := map[string]interface{}{ 78 "foo": "baz", 79 } 80 81 if !reflect.DeepEqual(actual, expected) { 82 t.Fatalf("bad: %#v", actual) 83 } 84 85 vars = map[string]string{"var.bar": "what"} 86 if err := rc.Interpolate(vars); err != nil { 87 t.Fatalf("err: %s", err) 88 } 89 90 actual = rc.Config() 91 expected = map[string]interface{}{ 92 "foo": "what", 93 } 94 95 if !reflect.DeepEqual(actual, expected) { 96 t.Fatalf("bad: %#v", actual) 97 } 98 } 99 100 func TestRawConfig_unknown(t *testing.T) { 101 raw := map[string]interface{}{ 102 "foo": "${var.bar}", 103 } 104 105 rc, err := NewRawConfig(raw) 106 if err != nil { 107 t.Fatalf("err: %s", err) 108 } 109 110 vars := map[string]string{"var.bar": UnknownVariableValue} 111 if err := rc.Interpolate(vars); err != nil { 112 t.Fatalf("err: %s", err) 113 } 114 115 actual := rc.Config() 116 expected := map[string]interface{}{} 117 118 if !reflect.DeepEqual(actual, expected) { 119 t.Fatalf("bad: %#v", actual) 120 } 121 122 expectedKeys := []string{"foo"} 123 if !reflect.DeepEqual(rc.UnknownKeys(), expectedKeys) { 124 t.Fatalf("bad: %#v", rc.UnknownKeys()) 125 } 126 } 127 128 func TestRawConfigValue(t *testing.T) { 129 raw := map[string]interface{}{ 130 "foo": "${var.bar}", 131 } 132 133 rc, err := NewRawConfig(raw) 134 if err != nil { 135 t.Fatalf("err: %s", err) 136 } 137 138 rc.Key = "" 139 if rc.Value() != nil { 140 t.Fatalf("bad: %#v", rc.Value()) 141 } 142 143 rc.Key = "foo" 144 if rc.Value() != "${var.bar}" { 145 t.Fatalf("err: %#v", rc.Value()) 146 } 147 148 vars := map[string]string{"var.bar": "baz"} 149 if err := rc.Interpolate(vars); err != nil { 150 t.Fatalf("err: %s", err) 151 } 152 153 if rc.Value() != "baz" { 154 t.Fatalf("bad: %#v", rc.Value()) 155 } 156 } 157 158 func TestRawConfig_implGob(t *testing.T) { 159 var _ gob.GobDecoder = new(RawConfig) 160 var _ gob.GobEncoder = new(RawConfig) 161 }