github.com/kikitux/packer@v0.10.1-0.20160322154024-6237df566f9f/builder/azure/arm/template_parameters_test.go (about) 1 // Copyright (c) Microsoft Corporation. All rights reserved. 2 // Licensed under the MIT License. See the LICENSE file in builder/azure for license information. 3 4 package arm 5 6 import ( 7 "encoding/json" 8 "fmt" 9 "strings" 10 "testing" 11 ) 12 13 func TestTemplateParametersShouldHaveExpectedKeys(t *testing.T) { 14 params := TemplateParameters{ 15 AdminUsername: &TemplateParameter{"sentinel"}, 16 AdminPassword: &TemplateParameter{"sentinel"}, 17 DnsNameForPublicIP: &TemplateParameter{"sentinel"}, 18 ImageOffer: &TemplateParameter{"sentinel"}, 19 ImagePublisher: &TemplateParameter{"sentinel"}, 20 ImageSku: &TemplateParameter{"sentinel"}, 21 OSDiskName: &TemplateParameter{"sentinel"}, 22 SshAuthorizedKey: &TemplateParameter{"sentinel"}, 23 StorageAccountName: &TemplateParameter{"sentinel"}, 24 VMName: &TemplateParameter{"sentinel"}, 25 VMSize: &TemplateParameter{"sentinel"}, 26 } 27 28 bs, err := json.Marshal(params) 29 if err != nil { 30 t.Fail() 31 } 32 33 var doc map[string]*json.RawMessage 34 err = json.Unmarshal(bs, &doc) 35 36 if err != nil { 37 t.Fail() 38 } 39 40 expectedKeys := []string{ 41 "adminUsername", 42 "adminPassword", 43 "dnsNameForPublicIP", 44 "imageOffer", 45 "imagePublisher", 46 "imageSku", 47 "osDiskName", 48 "sshAuthorizedKey", 49 "storageAccountName", 50 "vmSize", 51 "vmName", 52 } 53 54 for _, expectedKey := range expectedKeys { 55 _, containsKey := doc[expectedKey] 56 if containsKey == false { 57 t.Fatalf("Expected template parameters to contain the key value '%s', but it did not!", expectedKey) 58 } 59 } 60 } 61 62 func TestParameterValuesShouldBeSet(t *testing.T) { 63 params := TemplateParameters{ 64 AdminUsername: &TemplateParameter{"adminusername00"}, 65 AdminPassword: &TemplateParameter{"adminpassword00"}, 66 DnsNameForPublicIP: &TemplateParameter{"dnsnameforpublicip00"}, 67 ImageOffer: &TemplateParameter{"imageoffer00"}, 68 ImagePublisher: &TemplateParameter{"imagepublisher00"}, 69 ImageSku: &TemplateParameter{"imagesku00"}, 70 OSDiskName: &TemplateParameter{"osdiskname00"}, 71 SshAuthorizedKey: &TemplateParameter{"sshauthorizedkey00"}, 72 StorageAccountName: &TemplateParameter{"storageaccountname00"}, 73 VMName: &TemplateParameter{"vmname00"}, 74 VMSize: &TemplateParameter{"vmsize00"}, 75 } 76 77 bs, err := json.Marshal(params) 78 if err != nil { 79 t.Fail() 80 } 81 82 var doc map[string]map[string]interface{} 83 err = json.Unmarshal(bs, &doc) 84 85 if err != nil { 86 t.Fail() 87 } 88 89 for k, v := range doc { 90 var expectedValue = fmt.Sprintf("%s00", strings.ToLower(k)) 91 var actualValue, exists = v["value"] 92 if exists != true { 93 t.Errorf("Expected to find a 'value' key under '%s', but it was missing!", k) 94 } 95 96 if expectedValue != actualValue { 97 t.Errorf("Expected '%s', but actual was '%s'!", expectedValue, actualValue) 98 } 99 } 100 } 101 102 func TestEmptyValuesShouldBeOmitted(t *testing.T) { 103 params := TemplateParameters{ 104 AdminUsername: &TemplateParameter{"adminusername00"}, 105 } 106 107 bs, err := json.Marshal(params) 108 if err != nil { 109 t.Fail() 110 } 111 112 var doc map[string]map[string]interface{} 113 err = json.Unmarshal(bs, &doc) 114 115 if err != nil { 116 t.Fail() 117 } 118 119 if len(doc) != 1 { 120 t.Errorf("Failed to omit empty template parameters from the JSON document!") 121 t.Errorf("doc=%+v", doc) 122 t.Fail() 123 } 124 }