github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/vpns_test.go (about) 1 package oneandone 2 3 import ( 4 "fmt" 5 "math/rand" 6 "sync" 7 "testing" 8 "time" 9 ) 10 11 var ( 12 set_vpn sync.Once 13 vpn_name string 14 vpn_desc string 15 test_vpn *VPN 16 ) 17 18 const vpn_dc_code = "US" 19 20 // Helper functions 21 22 func create_vpn() *VPN { 23 rand.Seed(time.Now().UnixNano()) 24 rint := rand.Intn(9999) 25 vpn_name = fmt.Sprintf("Test_VPN_%d", rint) 26 vpn_desc = fmt.Sprintf("Test_VPN_%d description", rint) 27 var datacenter Datacenter 28 29 dcs, err := api.ListDatacenters() 30 if len(dcs) > 0 { 31 for _, dc := range dcs { 32 if dc.CountryCode == vpn_dc_code { 33 datacenter = dc 34 } 35 } 36 } 37 38 fmt.Printf("Creating VPN '%s'...\n", vpn_name) 39 vpn_id, vpn, err := api.CreateVPN(vpn_name, vpn_desc, datacenter.Id) 40 if err != nil { 41 fmt.Printf("Unable to create a VPN. Error: %s", err.Error()) 42 return nil 43 } 44 if vpn_id == "" || vpn.Id == "" { 45 fmt.Printf("Unable to create VPN '%s'.", vpn_name) 46 return nil 47 } 48 49 api.WaitForState(vpn, "ACTIVE", 10, 60) 50 51 return vpn 52 } 53 54 func set_vpn_once() { 55 test_vpn = create_vpn() 56 } 57 58 // /vpns tests 59 60 func TestCreateVPN(t *testing.T) { 61 set_vpn.Do(set_vpn_once) 62 63 if test_vpn == nil { 64 t.Errorf("CreateVPN failed.") 65 } else { 66 if test_vpn.Name != vpn_name { 67 t.Errorf("Wrong name of the VPN.") 68 } 69 if test_vpn.Description != vpn_desc { 70 t.Errorf("Wrong VPN description.") 71 } 72 if test_vpn.Datacenter == nil { 73 t.Errorf("Missing VPN Data Center.") 74 } else if test_vpn.Datacenter.CountryCode != vpn_dc_code { 75 t.Errorf("Wrong VPN Data Center.") 76 } 77 } 78 } 79 80 func TestGetVPN(t *testing.T) { 81 set_vpn.Do(set_vpn_once) 82 83 fmt.Printf("Getting VPN '%s'...\n", vpn_name) 84 vpn, err := api.GetVPN(test_vpn.Id) 85 86 if err != nil { 87 t.Errorf("GetVPN failed. Error: " + err.Error()) 88 return 89 } 90 if vpn.Id != test_vpn.Id { 91 t.Errorf("Wrong VPN ID.") 92 } 93 if len(test_vpn.IPs) == 0 { 94 t.Errorf("Missing VPN IPs.") 95 } 96 } 97 98 func TestListVPNs(t *testing.T) { 99 set_vpn.Do(set_vpn_once) 100 fmt.Println("Listing all VPNs...") 101 102 res, err := api.ListVPNs() 103 if err != nil { 104 t.Errorf("ListVPNs failed. Error: " + err.Error()) 105 } 106 if len(res) == 0 { 107 t.Errorf("No VPN found.") 108 } 109 110 res, err = api.ListVPNs(1, 1, "", "", "id,name") 111 112 if err != nil { 113 t.Errorf("ListVPNs with parameter options failed. Error: " + err.Error()) 114 return 115 } 116 if len(res) == 0 { 117 t.Errorf("No VPN found.") 118 } 119 if len(res) > 1 { 120 t.Errorf("Wrong number of objects per page.") 121 } 122 if res[0].Id == "" { 123 t.Errorf("Filtering parameters failed.") 124 } 125 if res[0].Name == "" { 126 t.Errorf("Filtering parameters failed.") 127 } 128 if res[0].State != "" { 129 t.Errorf("Filtering parameters failed.") 130 } 131 // Test for error response 132 res, err = api.ListVPNs(0, 0, "", 1, "") 133 if res != nil || err == nil { 134 t.Errorf("ListVPNs failed to handle incorrect argument type.") 135 } 136 137 res, err = api.ListVPNs(0, 0, "", test_vpn.Name, "") 138 139 if err != nil { 140 t.Errorf("ListVPNs with parameter options failed. Error: " + err.Error()) 141 return 142 } 143 if len(res) != 1 { 144 t.Errorf("Search parameter failed.") 145 } 146 if res[0].Name != test_vpn.Name { 147 t.Errorf("Search parameter failed.") 148 } 149 } 150 151 func TestGetVPNConfigFile(t *testing.T) { 152 //set_vpn.Do(set_vpn_once) 153 154 fmt.Printf("Getting VPN's configuration...\n") 155 _, err := api.GetVPNConfigFile("C:\\"+test_vpn.Name, "6EDFEFFDB31745780E4D132C7E6ABFF1") 156 157 if err != nil { 158 t.Errorf("GetVPNConfigFile failed. Error: " + err.Error()) 159 return 160 } 161 162 } 163 164 func TestModifyVPN(t *testing.T) { 165 set_vpn.Do(set_vpn_once) 166 167 fmt.Printf("Modifying VPN '%s'...\n", test_vpn.Id) 168 new_name := test_vpn.Name + "_updated" 169 new_desc := test_vpn.Description + " updated" 170 171 vpn, err := api.ModifyVPN(test_vpn.Id, new_name, new_desc) 172 173 if err != nil { 174 t.Errorf("ModifyVPN failed. Error: " + err.Error()) 175 return 176 } 177 if vpn.Id != test_vpn.Id { 178 t.Errorf("Wrong VPN ID.") 179 } 180 if vpn.Name != new_name { 181 t.Errorf("Wrong VPN name.") 182 } 183 if vpn.Description != new_desc { 184 t.Errorf("Wrong VPN description.") 185 } 186 187 test_vpn = vpn 188 } 189 190 func TestDeleteVPN(t *testing.T) { 191 set_vpn.Do(set_vpn_once) 192 193 fmt.Printf("Deleting VPN '%s'...\n", test_vpn.Name) 194 vpn, err := api.DeleteVPN(test_vpn.Id) 195 196 if err != nil { 197 t.Errorf("DeleteVPN failed. Error: " + err.Error()) 198 return 199 } 200 201 api.WaitUntilDeleted(vpn) 202 vpn, err = api.GetVPN(vpn.Id) 203 204 if vpn != nil { 205 t.Errorf("Unable to delete the VPN.") 206 } else { 207 test_vpn = nil 208 } 209 }