github.phpd.cn/hashicorp/packer@v1.3.2/builder/cloudstack/config_test.go (about) 1 package cloudstack 2 3 import "testing" 4 5 func TestNewConfig(t *testing.T) { 6 cases := map[string]struct { 7 Config map[string]interface{} 8 Nullify string 9 Err bool 10 }{ 11 "no_api_url": { 12 Config: map[string]interface{}{ 13 "disk_size": "20", 14 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 15 }, 16 Nullify: "api_url", 17 Err: true, 18 }, 19 "no_api_key": { 20 Config: map[string]interface{}{ 21 "disk_size": "20", 22 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 23 }, 24 Nullify: "api_key", 25 Err: true, 26 }, 27 "no_secret_key": { 28 Config: map[string]interface{}{ 29 "disk_size": "20", 30 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 31 }, 32 Nullify: "secret_key", 33 Err: true, 34 }, 35 "no_cidr_list": { 36 Config: map[string]interface{}{ 37 "disk_size": "20", 38 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 39 }, 40 Nullify: "cidr_list", 41 Err: false, 42 }, 43 "no_cidr_list_with_use_local_ip_address": { 44 Config: map[string]interface{}{ 45 "disk_size": "20", 46 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 47 "use_local_ip_address": true, 48 }, 49 Nullify: "cidr_list", 50 Err: false, 51 }, 52 "no_network": { 53 Config: map[string]interface{}{ 54 "disk_size": "20", 55 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 56 }, 57 Nullify: "network", 58 Err: true, 59 }, 60 "no_service_offering": { 61 Config: map[string]interface{}{ 62 "disk_size": "20", 63 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 64 }, 65 Nullify: "service_offering", 66 Err: true, 67 }, 68 "no_template_os": { 69 Config: map[string]interface{}{ 70 "disk_size": "20", 71 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 72 }, 73 Nullify: "template_os", 74 Err: true, 75 }, 76 "no_zone": { 77 Config: map[string]interface{}{ 78 "disk_size": "20", 79 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 80 }, 81 Nullify: "zone", 82 Err: true, 83 }, 84 "no_source": { 85 Err: true, 86 }, 87 "both_sources": { 88 Config: map[string]interface{}{ 89 "disk_offering": "f043d193-242f-4941-a847-29408b998711", 90 "disk_size": "20", 91 "hypervisor": "KVM", 92 "source_iso": "fbd904dc-f46c-42e7-a467-f27480c667d5", 93 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 94 }, 95 Err: true, 96 }, 97 "source_iso_good": { 98 Config: map[string]interface{}{ 99 "disk_offering": "f043d193-242f-4941-a847-29408b998711", 100 "hypervisor": "KVM", 101 "source_iso": "fbd904dc-f46c-42e7-a467-f27480c667d5", 102 }, 103 Err: false, 104 }, 105 "source_iso_without_disk_offering": { 106 Config: map[string]interface{}{ 107 "hypervisor": "KVM", 108 "source_iso": "fbd904dc-f46c-42e7-a467-f27480c667d5", 109 }, 110 Err: true, 111 }, 112 "source_iso_without_hypervisor": { 113 Config: map[string]interface{}{ 114 "disk_offering": "f043d193-242f-4941-a847-29408b998711", 115 "source_iso": "fbd904dc-f46c-42e7-a467-f27480c667d5", 116 }, 117 Err: true, 118 }, 119 "source_template_good": { 120 Config: map[string]interface{}{ 121 "disk_size": "20", 122 "source_template": "d31e6af5-94a8-4756-abf3-6493c38db7e5", 123 }, 124 Err: false, 125 }, 126 } 127 128 for desc, tc := range cases { 129 raw := testConfig(tc.Config) 130 131 if tc.Nullify != "" { 132 raw[tc.Nullify] = nil 133 } 134 135 _, errs := NewConfig(raw) 136 137 if tc.Err { 138 if errs == nil { 139 t.Fatalf("%q should error", desc) 140 } 141 } else { 142 if errs != nil { 143 t.Fatalf("%q should not error: %s", desc, errs) 144 } 145 } 146 } 147 } 148 149 func testConfig(config map[string]interface{}) map[string]interface{} { 150 raw := map[string]interface{}{ 151 "api_url": "https://cloudstack.com/client/api", 152 "api_key": "some-api-key", 153 "secret_key": "some-secret-key", 154 "ssh_username": "root", 155 "cidr_list": []interface{}{"0.0.0.0/0"}, 156 "network": "c5ed8a14-3f21-4fa9-bd74-bb887fc0ed0d", 157 "service_offering": "a29c52b1-a83d-4123-a57d-4548befa47a0", 158 "template_os": "52d54d24-cef1-480b-b963-527703aa4ff9", 159 "zone": "a3b594d9-25e9-47c1-9c03-7a5fc61e3f43", 160 } 161 162 for k, v := range config { 163 raw[k] = v 164 } 165 166 return raw 167 }