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  }