github.phpd.cn/hashicorp/packer@v1.3.2/builder/azure/common/template/template_parameters_test.go (about) 1 package template 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "strings" 7 "testing" 8 ) 9 10 func TestTemplateParametersShouldHaveExpectedKeys(t *testing.T) { 11 params := TemplateParameters{ 12 AdminUsername: &TemplateParameter{Value: "sentinel"}, 13 AdminPassword: &TemplateParameter{Value: "sentinel"}, 14 DnsNameForPublicIP: &TemplateParameter{Value: "sentinel"}, 15 OSDiskName: &TemplateParameter{Value: "sentinel"}, 16 StorageAccountBlobEndpoint: &TemplateParameter{Value: "sentinel"}, 17 VMName: &TemplateParameter{Value: "sentinel"}, 18 VMSize: &TemplateParameter{Value: "sentinel"}, 19 } 20 21 bs, err := json.Marshal(params) 22 if err != nil { 23 t.Fail() 24 } 25 26 var doc map[string]*json.RawMessage 27 err = json.Unmarshal(bs, &doc) 28 29 if err != nil { 30 t.Fail() 31 } 32 33 expectedKeys := []string{ 34 "adminUsername", 35 "adminPassword", 36 "dnsNameForPublicIP", 37 "osDiskName", 38 "storageAccountBlobEndpoint", 39 "vmSize", 40 "vmName", 41 } 42 43 for _, expectedKey := range expectedKeys { 44 _, containsKey := doc[expectedKey] 45 if containsKey == false { 46 t.Fatalf("Expected template parameters to contain the key value '%s', but it did not!", expectedKey) 47 } 48 } 49 } 50 51 func TestParameterValuesShouldBeSet(t *testing.T) { 52 params := TemplateParameters{ 53 AdminUsername: &TemplateParameter{Value: "adminusername00"}, 54 AdminPassword: &TemplateParameter{Value: "adminpassword00"}, 55 DnsNameForPublicIP: &TemplateParameter{Value: "dnsnameforpublicip00"}, 56 OSDiskName: &TemplateParameter{Value: "osdiskname00"}, 57 StorageAccountBlobEndpoint: &TemplateParameter{Value: "storageaccountblobendpoint00"}, 58 VMName: &TemplateParameter{Value: "vmname00"}, 59 VMSize: &TemplateParameter{Value: "vmsize00"}, 60 } 61 62 bs, err := json.Marshal(params) 63 if err != nil { 64 t.Fail() 65 } 66 67 var doc map[string]map[string]interface{} 68 err = json.Unmarshal(bs, &doc) 69 70 if err != nil { 71 t.Fail() 72 } 73 74 for k, v := range doc { 75 var expectedValue = fmt.Sprintf("%s00", strings.ToLower(k)) 76 var actualValue, exists = v["value"] 77 if exists != true { 78 t.Errorf("Expected to find a 'value' key under '%s', but it was missing!", k) 79 } 80 81 if expectedValue != actualValue { 82 t.Errorf("Expected '%s', but actual was '%s'!", expectedValue, actualValue) 83 } 84 } 85 } 86 87 func TestEmptyValuesShouldBeOmitted(t *testing.T) { 88 params := TemplateParameters{ 89 AdminUsername: &TemplateParameter{Value: "adminusername00"}, 90 } 91 92 bs, err := json.Marshal(params) 93 if err != nil { 94 t.Fail() 95 } 96 97 var doc map[string]map[string]interface{} 98 err = json.Unmarshal(bs, &doc) 99 100 if err != nil { 101 t.Fail() 102 } 103 104 if len(doc) != 1 { 105 t.Errorf("Failed to omit empty template parameters from the JSON document!") 106 t.Errorf("doc=%+v", doc) 107 t.Fail() 108 } 109 }