github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/privatenetworks_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_pn  sync.Once
    13  	pn_name string
    14  	pn_desc string
    15  	test_pn *PrivateNetwork
    16  )
    17  
    18  const (
    19  	network_add = "192.168.46.0"
    20  	sub_mask    = "255.255.255.0"
    21  )
    22  
    23  // Helper functions
    24  
    25  func create_private_netwok() *PrivateNetwork {
    26  	rand.Seed(time.Now().UnixNano())
    27  	rint := rand.Intn(999)
    28  	pn_name = fmt.Sprintf("PrivateNet_%d", rint)
    29  	pn_desc = fmt.Sprintf("PrivateNet_%d description", rint)
    30  	req := PrivateNetworkRequest{
    31  		Name:           pn_name,
    32  		Description:    pn_desc,
    33  		NetworkAddress: network_add,
    34  		SubnetMask:     sub_mask,
    35  	}
    36  	fmt.Printf("Creating new private network '%s'...\n", pn_name)
    37  	prn_id, prn, err := api.CreatePrivateNetwork(&req)
    38  	if err != nil {
    39  		fmt.Printf("Unable to create a private network. Error: %s", err.Error())
    40  		return nil
    41  	}
    42  	if prn_id == "" || prn.Id == "" {
    43  		fmt.Printf("Unable to create private network '%s'.", pn_name)
    44  		return nil
    45  	}
    46  
    47  	//prn = wait_for_state(prn, 5, 30, "ACTIVE")
    48  	api.WaitForState(prn, "ACTIVE", 5, 60)
    49  
    50  	return prn
    51  }
    52  
    53  func set_private_network() {
    54  	test_pn = create_private_netwok()
    55  }
    56  
    57  // /private_networks tests
    58  
    59  func TestCreatePrivateNetwork(t *testing.T) {
    60  	set_pn.Do(set_private_network)
    61  
    62  	if test_pn == nil {
    63  		t.Errorf("CreatePrivateNetwork failed.")
    64  	} else {
    65  		if test_pn.Name != pn_name {
    66  			t.Errorf("Wrong name of the private network.")
    67  		}
    68  		if test_pn.Description != pn_desc {
    69  			t.Errorf("Wrong private network description.")
    70  		}
    71  		if test_pn.NetworkAddress != network_add {
    72  			t.Errorf("Wrong private network address.")
    73  		}
    74  		if test_pn.SubnetMask != sub_mask {
    75  			t.Errorf("Wrong private network subnet mask.")
    76  		}
    77  	}
    78  }
    79  
    80  func TestGetPrivateNetwork(t *testing.T) {
    81  	set_pn.Do(set_private_network)
    82  
    83  	fmt.Printf("Getting private network '%s'...\n", test_pn.Name)
    84  	prn, err := api.GetPrivateNetwork(test_pn.Id)
    85  
    86  	if err != nil {
    87  		t.Errorf("GetPrivateNetwork failed. Error: " + err.Error())
    88  	} else if prn.Id != test_pn.Id {
    89  		t.Errorf("Wrong private network ID.")
    90  	}
    91  }
    92  
    93  func TestListPrivateNetworks(t *testing.T) {
    94  	set_pn.Do(set_private_network)
    95  	fmt.Println("Listing all private networks...")
    96  
    97  	res, err := api.ListPrivateNetworks()
    98  	if err != nil {
    99  		t.Errorf("ListPrivateNetworks failed. Error: " + err.Error())
   100  	}
   101  	if len(res) == 0 {
   102  		t.Errorf("No private network found.")
   103  	}
   104  
   105  	res, err = api.ListPrivateNetworks(1, 1, "", "", "id,name")
   106  
   107  	if err != nil {
   108  		t.Errorf("ListPrivateNetworks with parameter options failed. Error: " + err.Error())
   109  		return
   110  	}
   111  	if len(res) == 0 {
   112  		t.Errorf("No private network found.")
   113  	}
   114  	if len(res) > 1 {
   115  		t.Errorf("Wrong number of objects per page.")
   116  	}
   117  	if res[0].Id == "" {
   118  		t.Errorf("Filtering parameters failed.")
   119  	}
   120  	if res[0].Name == "" {
   121  		t.Errorf("Filtering parameters failed.")
   122  	}
   123  	if res[0].State != "" {
   124  		t.Errorf("Filtering parameters failed.")
   125  	}
   126  	// Test for error response
   127  	res, err = api.ListPrivateNetworks(0, 0, "", 7, "")
   128  	if res != nil || err == nil {
   129  		t.Errorf("ListPrivateNetworks failed to handle incorrect argument type.")
   130  	}
   131  
   132  	res, err = api.ListPrivateNetworks(0, 0, "", test_pn.Name, "")
   133  
   134  	if err != nil {
   135  		t.Errorf("ListPrivateNetworks with parameter options failed. Error: " + err.Error())
   136  		return
   137  	}
   138  	if len(res) != 1 {
   139  		t.Errorf("Search parameter failed.")
   140  	}
   141  	if res[0].Name != test_pn.Name {
   142  		t.Errorf("Search parameter failed.")
   143  	}
   144  }
   145  
   146  func TestAttachPrivateNetworkServers(t *testing.T) {
   147  	set_pn.Do(set_private_network)
   148  	sync_server.Do(func() { deploy_test_server(false) })
   149  
   150  	fmt.Printf("Attaching servers to private network '%s'...\n", test_pn.Name)
   151  
   152  	servers := make([]string, 1)
   153  	servers[0] = test_server.Id
   154  
   155  	time.Sleep(time.Second)
   156  	prn, err := api.AttachPrivateNetworkServers(test_pn.Id, servers)
   157  
   158  	if err != nil {
   159  		t.Errorf("AttachPrivateNetworkServers failed. Error: " + err.Error())
   160  		return
   161  	}
   162  
   163  	//	prn = wait_for_state(prn, 10, 60, "ACTIVE")
   164  	api.WaitForState(prn, "ACTIVE", 10, 60)
   165  	prn, err = api.GetPrivateNetwork(prn.Id)
   166  	if prn == nil || err != nil {
   167  		t.Errorf("Attaching servers to the private network failed.")
   168  		return
   169  	}
   170  	if len(prn.Servers) != 1 {
   171  		t.Errorf("No servers attached to the private network were found.")
   172  	}
   173  	if prn.Servers[0].Id != test_server.Id {
   174  		t.Errorf("Wrong servers attached to the private network.")
   175  	}
   176  	test_pn = prn
   177  }
   178  
   179  func TestGetPrivateNetworkServer(t *testing.T) {
   180  	set_pn.Do(set_private_network)
   181  	sync_server.Do(func() { deploy_test_server(false) })
   182  
   183  	fmt.Printf("Getting '%s' server attached to private network '%s'...\n", test_server.Name, test_pn.Name)
   184  	pns, err := api.GetPrivateNetworkServer(test_pn.Id, test_server.Id)
   185  
   186  	if err != nil {
   187  		t.Errorf("GetPrivateNetworkServer failed. Error: " + err.Error())
   188  		return
   189  	}
   190  	if pns.Id != test_server.Id {
   191  		t.Errorf("Wrong server attached to the private network was found.")
   192  	}
   193  }
   194  
   195  func TestListPrivateNetworkServers(t *testing.T) {
   196  	set_pn.Do(set_private_network)
   197  
   198  	fmt.Printf("Listing servers attached to private network '%s'...\n", test_pn.Name)
   199  	pnss, err := api.ListPrivateNetworkServers(test_pn.Id)
   200  
   201  	if err != nil {
   202  		t.Errorf("ListPrivateNetworkServers failed. Error: " + err.Error())
   203  	}
   204  	if len(pnss) != 1 {
   205  		t.Errorf("Wrong number of servers attached to the private network.")
   206  	}
   207  }
   208  
   209  func TestDetachPrivateNetworkServer(t *testing.T) {
   210  	set_pn.Do(set_private_network)
   211  	sync_server.Do(func() { deploy_test_server(false) })
   212  
   213  	fmt.Printf("Detaching servers from private network '%s'...\n", test_pn.Name)
   214  	prn, err := api.DetachPrivateNetworkServer(test_pn.Id, test_server.Id)
   215  
   216  	if err != nil {
   217  		t.Errorf("DetachPrivateNetworkServer failed. Error: " + err.Error())
   218  		return
   219  	}
   220  
   221  	//	prn = wait_for_state(prn, 10, 60, "ACTIVE")
   222  	api.WaitForState(prn, "ACTIVE", 10, 60)
   223  	prn, err = api.GetPrivateNetwork(prn.Id)
   224  	if prn == nil || err != nil {
   225  		t.Errorf("Detaching servers from the private network failed.")
   226  		return
   227  	}
   228  	if len(prn.Servers) > 0 {
   229  		t.Errorf("No all servers detached from the private network.")
   230  	}
   231  }
   232  
   233  func TestUpdatePrivateNetwork(t *testing.T) {
   234  	set_pn.Do(set_private_network)
   235  
   236  	fmt.Printf("Updating private network '%s'...\n", test_pn.Id)
   237  	new_name := test_pn.Name + "_updated"
   238  	new_desc := test_pn.Description + "_updated"
   239  	pnset := PrivateNetworkRequest{
   240  		Name:           new_name,
   241  		Description:    new_desc,
   242  		NetworkAddress: "192.168.7.0",
   243  		SubnetMask:     "255.255.255.0",
   244  	}
   245  	prn, err := api.UpdatePrivateNetwork(test_pn.Id, &pnset)
   246  
   247  	if err != nil {
   248  		t.Errorf("UpdatePrivateNetwork failed. Error: " + err.Error())
   249  		return
   250  	}
   251  	//	prn = wait_for_state(prn, 5, 60, "ACTIVE")
   252  	api.WaitForState(prn, "ACTIVE", 5, 60)
   253  	prn, err = api.GetPrivateNetwork(prn.Id)
   254  	if prn == nil || err != nil {
   255  		t.Errorf("GetPrivateNetwork failed. Error: " + err.Error())
   256  		return
   257  	}
   258  	if prn.Id != test_pn.Id {
   259  		t.Errorf("Wrong private network ID.")
   260  	}
   261  	if prn.Name != new_name {
   262  		t.Errorf("Wrong private network name.")
   263  	}
   264  	if prn.Description != new_desc {
   265  		t.Errorf("Wrong private network description.")
   266  	}
   267  	if prn.NetworkAddress != "192.168.7.0" {
   268  		t.Errorf("Wrong private network address.")
   269  	}
   270  	if prn.SubnetMask != "255.255.255.0" {
   271  		t.Errorf("Wrong private network subnet mask.")
   272  	}
   273  	test_pn = prn
   274  }
   275  
   276  func TestDeletePrivateNetwork(t *testing.T) {
   277  	set_pn.Do(set_private_network)
   278  
   279  	fmt.Printf("Deleting private network '%s'...\n", test_pn.Name)
   280  	prn, err := api.DeletePrivateNetwork(test_pn.Id)
   281  
   282  	if err != nil {
   283  		t.Errorf("DeletePrivateNetwork failed. Error: " + err.Error())
   284  		return
   285  	}
   286  
   287  	api.WaitUntilDeleted(prn)
   288  	prn, err = api.GetPrivateNetwork(prn.Id)
   289  
   290  	if prn != nil {
   291  		t.Errorf("Unable to delete the private network.")
   292  	} else {
   293  		test_pn = nil
   294  	}
   295  }