github.com/bigkraig/terraform@v0.6.4-0.20151219155159-c90d1b074e31/helper/schema/serialize_test.go (about) 1 package schema 2 3 import ( 4 "bytes" 5 "testing" 6 ) 7 8 func TestSerializeForHash(t *testing.T) { 9 type testCase struct { 10 Schema interface{} 11 Value interface{} 12 Expected string 13 } 14 15 tests := []testCase{ 16 17 testCase{ 18 Schema: &Schema{ 19 Type: TypeInt, 20 }, 21 Value: 0, 22 Expected: "0;", 23 }, 24 25 testCase{ 26 Schema: &Schema{ 27 Type: TypeInt, 28 }, 29 Value: 200, 30 Expected: "200;", 31 }, 32 33 testCase{ 34 Schema: &Schema{ 35 Type: TypeBool, 36 }, 37 Value: true, 38 Expected: "1;", 39 }, 40 41 testCase{ 42 Schema: &Schema{ 43 Type: TypeBool, 44 }, 45 Value: false, 46 Expected: "0;", 47 }, 48 49 testCase{ 50 Schema: &Schema{ 51 Type: TypeFloat, 52 }, 53 Value: 1.0, 54 Expected: "1;", 55 }, 56 57 testCase{ 58 Schema: &Schema{ 59 Type: TypeFloat, 60 }, 61 Value: 1.54, 62 Expected: "1.54;", 63 }, 64 65 testCase{ 66 Schema: &Schema{ 67 Type: TypeFloat, 68 }, 69 Value: 0.1, 70 Expected: "0.1;", 71 }, 72 73 testCase{ 74 Schema: &Schema{ 75 Type: TypeString, 76 }, 77 Value: "hello", 78 Expected: "hello;", 79 }, 80 81 testCase{ 82 Schema: &Schema{ 83 Type: TypeString, 84 }, 85 Value: "1", 86 Expected: "1;", 87 }, 88 89 testCase{ 90 Schema: &Schema{ 91 Type: TypeList, 92 Elem: &Schema{ 93 Type: TypeString, 94 }, 95 }, 96 Value: []interface{}{}, 97 Expected: "();", 98 }, 99 100 testCase{ 101 Schema: &Schema{ 102 Type: TypeList, 103 Elem: &Schema{ 104 Type: TypeString, 105 }, 106 }, 107 Value: []interface{}{"hello", "world"}, 108 Expected: "(hello;world;);", 109 }, 110 111 testCase{ 112 Schema: &Schema{ 113 Type: TypeList, 114 Elem: &Resource{ 115 Schema: map[string]*Schema{ 116 "fo": &Schema{ 117 Type: TypeString, 118 Required: true, 119 }, 120 "fum": &Schema{ 121 Type: TypeString, 122 Required: true, 123 }, 124 }, 125 }, 126 }, 127 Value: []interface{}{ 128 map[string]interface{}{ 129 "fo": "bar", 130 }, 131 map[string]interface{}{ 132 "fo": "baz", 133 "fum": "boz", 134 }, 135 }, 136 Expected: "(<fo:bar;fum:;>;<fo:baz;fum:boz;>;);", 137 }, 138 139 testCase{ 140 Schema: &Schema{ 141 Type: TypeSet, 142 Elem: &Schema{ 143 Type: TypeString, 144 }, 145 }, 146 Value: NewSet(func(i interface{}) int { return len(i.(string)) }, []interface{}{ 147 "hello", 148 "woo", 149 }), 150 Expected: "{woo;hello;};", 151 }, 152 153 testCase{ 154 Schema: &Schema{ 155 Type: TypeMap, 156 Elem: &Schema{ 157 Type: TypeString, 158 }, 159 }, 160 Value: map[string]interface{}{ 161 "foo": "bar", 162 "baz": "foo", 163 }, 164 Expected: "[baz:foo;foo:bar;];", 165 }, 166 167 testCase{ 168 Schema: &Resource{ 169 Schema: map[string]*Schema{ 170 "name": &Schema{ 171 Type: TypeString, 172 Required: true, 173 }, 174 "size": &Schema{ 175 Type: TypeInt, 176 Optional: true, 177 }, 178 "green": &Schema{ 179 Type: TypeBool, 180 Optional: true, 181 Computed: true, 182 }, 183 "upside_down": &Schema{ 184 Type: TypeBool, 185 Computed: true, 186 }, 187 }, 188 }, 189 Value: map[string]interface{}{ 190 "name": "my-fun-database", 191 "size": 12, 192 "green": true, 193 }, 194 Expected: "green:1;name:my-fun-database;size:12;", 195 }, 196 } 197 198 for _, test := range tests { 199 var gotBuf bytes.Buffer 200 schema := test.Schema 201 202 switch s := schema.(type) { 203 case *Schema: 204 SerializeValueForHash(&gotBuf, test.Value, s) 205 case *Resource: 206 SerializeResourceForHash(&gotBuf, test.Value, s) 207 } 208 209 got := gotBuf.String() 210 if got != test.Expected { 211 t.Errorf("hash(%#v) got %#v, but want %#v", test.Value, got, test.Expected) 212 } 213 } 214 }