github.com/emate/packer@v0.8.1-0.20150625195101-fe0fde195dc6/helper/config/decode_test.go (about) 1 package config 2 3 import ( 4 "reflect" 5 "testing" 6 "time" 7 8 "github.com/mitchellh/packer/template/interpolate" 9 ) 10 11 func TestDecode(t *testing.T) { 12 type Target struct { 13 Name string 14 Address string 15 Time time.Duration 16 } 17 18 cases := map[string]struct { 19 Input []interface{} 20 Output *Target 21 Opts *DecodeOpts 22 }{ 23 "basic": { 24 []interface{}{ 25 map[string]interface{}{ 26 "name": "bar", 27 "time": "5s", 28 }, 29 }, 30 &Target{ 31 Name: "bar", 32 Time: 5 * time.Second, 33 }, 34 nil, 35 }, 36 37 "variables": { 38 []interface{}{ 39 map[string]interface{}{ 40 "name": "{{user `name`}}", 41 }, 42 map[string]interface{}{ 43 "packer_user_variables": map[string]string{ 44 "name": "bar", 45 }, 46 }, 47 }, 48 &Target{ 49 Name: "bar", 50 }, 51 nil, 52 }, 53 54 "filter": { 55 []interface{}{ 56 map[string]interface{}{ 57 "name": "{{user `name`}}", 58 "address": "{{user `name`}}", 59 }, 60 map[string]interface{}{ 61 "packer_user_variables": map[string]string{ 62 "name": "bar", 63 }, 64 }, 65 }, 66 &Target{ 67 Name: "bar", 68 Address: "{{user `name`}}", 69 }, 70 &DecodeOpts{ 71 Interpolate: true, 72 InterpolateFilter: &interpolate.RenderFilter{ 73 Include: []string{"name"}, 74 }, 75 }, 76 }, 77 } 78 79 for k, tc := range cases { 80 var result Target 81 err := Decode(&result, tc.Opts, tc.Input...) 82 if err != nil { 83 t.Fatalf("err: %s\n\n%s", k, err) 84 } 85 86 if !reflect.DeepEqual(&result, tc.Output) { 87 t.Fatalf("bad:\n\n%#v\n\n%#v", &result, tc.Output) 88 } 89 } 90 }