github.com/amanya/packer@v0.12.1-0.20161117214323-902ac5ab2eb6/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:     true,
    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  }