github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/blockstorages_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_bs         sync.Once
    13  	set_bs_server  sync.Once
    14  	test_bs_name   string
    15  	test_bs_desc   string
    16  	test_bs        *BlockStorage
    17  	test_bs_server *Server
    18  )
    19  
    20  func setup_bs_server() {
    21  	rand.Seed(time.Now().UnixNano())
    22  	server_name = fmt.Sprintf("TestServer_%d", rand.Intn(1000000))
    23  	fmt.Printf("Creating test server '%s'...\n", server_name)
    24  
    25  	sap := get_random_appliance(hdd_size)
    26  	ser_app_id = sap.Id
    27  	mp := get_default_mon_policy()
    28  
    29  	req := ServerRequest{
    30  		Name:               server_name,
    31  		Description:        server_name + " description",
    32  		ApplianceId:        ser_app_id,
    33  		MonitoringPolicyId: mp.Id,
    34  		PowerOn:            true,
    35  		DatacenterId:       "908DC2072407C94C8054610AD5A53B8C",
    36  		Hardware: Hardware{
    37  			Vcores:            v_cores,
    38  			CoresPerProcessor: c_per_pr,
    39  			Ram:               ram,
    40  			Hdds: []Hdd{
    41  				Hdd{
    42  					Size:   hdd_size,
    43  					IsMain: true,
    44  				},
    45  			},
    46  		},
    47  	}
    48  	_, srv, err := api.CreateServer(&req)
    49  
    50  	err = api.WaitForState(srv, "POWERED_ON", 10, 90)
    51  
    52  	if err != nil {
    53  		fmt.Printf("Error: %s", err.Error())
    54  	}
    55  
    56  	test_bs_server = srv
    57  }
    58  
    59  func create_block_storage() *BlockStorage {
    60  	rand.Seed(time.Now().UnixNano())
    61  	rint := rand.Intn(999)
    62  	test_bs_name = fmt.Sprintf("BlockStorage_%d", rint)
    63  	test_bs_desc = fmt.Sprintf("BlockStorage_%d description", rint)
    64  	req := BlockStorageRequest{
    65  		Name:         test_bs_name,
    66  		Description:  test_bs_desc,
    67  		Size:         Int2Pointer(20),
    68  		DatacenterId: "908DC2072407C94C8054610AD5A53B8C",
    69  	}
    70  	fmt.Printf("Creating new block storage '%s'...\n", test_bs_name)
    71  	bs_id, bs, err := api.CreateBlockStorage(&req)
    72  
    73  	if err != nil {
    74  		fmt.Printf("Unable to create a block storage. Error: %s", err.Error())
    75  		return nil
    76  	}
    77  
    78  	if bs_id == "" || bs.Id == "" {
    79  		fmt.Printf("Unable to create block storage '%s'.", test_bs_name)
    80  		return nil
    81  	}
    82  
    83  	api.WaitForState(bs, "POWERED_ON", 10, 30)
    84  	return bs
    85  }
    86  
    87  func set_block_storage() {
    88  	test_bs = create_block_storage()
    89  }
    90  
    91  func TestCreateBlockStorage(t *testing.T) {
    92  	set_bs_server.Do(setup_bs_server)
    93  	rand.Seed(time.Now().UnixNano())
    94  	rint := rand.Intn(999)
    95  	test_bs_name = fmt.Sprintf("BlockStorage_%d", rint)
    96  	test_bs_desc = fmt.Sprintf("BlockStorage_%d description", rint)
    97  	req := BlockStorageRequest{
    98  		Name:         test_bs_name,
    99  		Description:  test_bs_desc,
   100  		Size:         Int2Pointer(20),
   101  		DatacenterId: "908DC2072407C94C8054610AD5A53B8C",
   102  		ServerId:     test_bs_server.Id,
   103  	}
   104  
   105  	fmt.Printf("Creating new block storage '%s'...\n", test_bs_name)
   106  	bs_id, bs, err := api.CreateBlockStorage(&req)
   107  	if err != nil {
   108  		t.Errorf("Unable to create a block storage. Error: %s", err.Error())
   109  		t.Fail()
   110  	}
   111  
   112  	api.WaitForState(bs, "POWERED_ON", 10, 30)
   113  
   114  	bs, _ = api.GetBlockStorage(bs_id)
   115  
   116  	if bs.Server.Id != test_bs_server.Id {
   117  		t.Errorf("Error while attaching a server to the block storage")
   118  	}
   119  
   120  }
   121  
   122  func TestListBlockStorages(t *testing.T) {
   123  	set_bs.Do(set_block_storage)
   124  
   125  	res, err := api.ListBlockStorages()
   126  	if err != nil {
   127  		t.Errorf("ListBlockStorages failed. Error: " + err.Error())
   128  	}
   129  
   130  	if len(res) == 0 {
   131  		t.Errorf("No block storage found.")
   132  	}
   133  }
   134  
   135  func TestGetBlockStorage(t *testing.T) {
   136  	// set_bs_server.Do(setup_bs_server)
   137  	set_bs.Do(set_block_storage)
   138  
   139  	bs, err := api.GetBlockStorage(test_bs.Id)
   140  
   141  	if err != nil {
   142  		t.Errorf(err.Error())
   143  	}
   144  
   145  	test_bs = bs
   146  }
   147  
   148  func TestAddBlockStorageServer(t *testing.T) {
   149  	set_bs.Do(set_block_storage)
   150  	set_bs_server.Do(setup_bs_server)
   151  	fmt.Printf("Adding block storage '%s' to server ...\n", test_bs.Name)
   152  
   153  	bs, err := api.AddBlockStorageServer(test_bs.Id, test_bs_server.Id)
   154  
   155  	if err != nil {
   156  		t.Errorf("AddBlockStorageServer failed. Error: " + err.Error())
   157  		return
   158  	}
   159  	api.WaitForState(bs, "POWERED_ON", 10, 30)
   160  
   161  	bs, _ = api.GetBlockStorage(bs.Id)
   162  
   163  	if bs.Server == nil {
   164  		t.Errorf("Found no server to which the block storage is added to.")
   165  	}
   166  
   167  	bs, err = api.RemoveBlockStorageServer(bs.Id, test_bs_server.Id)
   168  
   169  	if err != nil {
   170  		t.Errorf(err.Error())
   171  	}
   172  
   173  	if bs.Server != nil {
   174  		t.Errorf("Server not removed from the block storage.")
   175  	}
   176  	api.WaitForState(bs, "POWERED_ON", 10, 30)
   177  
   178  	test_bs = bs
   179  }
   180  
   181  func TestDeleteBlockStorage(t *testing.T) {
   182  	set_bs.Do(set_block_storage)
   183  
   184  	bs, err := api.DeleteBlockStorage(test_bs.Id)
   185  	if err != nil {
   186  		t.Errorf("DeleteBlockStorage failed. Error: " + err.Error())
   187  		return
   188  	} else {
   189  		api.WaitUntilDeleted(bs)
   190  	}
   191  
   192  	bs, err = api.GetBlockStorage(bs.Id)
   193  
   194  	if bs != nil {
   195  		t.Errorf("Unable to delete the block storage.")
   196  	} else {
   197  		test_bs = nil
   198  	}
   199  
   200  	if test_bs_server != nil {
   201  		api.WaitForState(test_bs_server, "POWERED_ON", 10, 90)
   202  		_, err := api.DeleteServer(test_bs_server.Id, false)
   203  		if err != nil {
   204  			t.Errorf("DeleteServer failed. Error: " + err.Error())
   205  			return
   206  		}
   207  	}
   208  }
   209  
   210  func TestUpdateBlockStorage(t *testing.T) {
   211  	set_bs.Do(set_block_storage)
   212  	if test_bs == nil {
   213  		test_bs = create_block_storage()
   214  	}
   215  
   216  	fmt.Printf("Updating block storage '%s'...\n", test_bs.Name)
   217  	new_name := fmt.Sprintf("updated_%s", test_bs.Name)
   218  	new_desc := fmt.Sprintf("updated_%s", test_bs.Description)
   219  	bsu := UpdateBlockStorageRequest{
   220  		Name:        new_name,
   221  		Description: new_desc,
   222  	}
   223  	blk_storage, err := api.UpdateBlockStorage(test_bs.Id, &bsu)
   224  
   225  	if err != nil {
   226  		t.Errorf("UpdateBlockStorage failed. Error: " + err.Error())
   227  	} else {
   228  		api.WaitForState(blk_storage, "POWERED_ON", 10, 30)
   229  	}
   230  	blk_storage, _ = api.GetBlockStorage(blk_storage.Id)
   231  	if blk_storage.Name != new_name {
   232  		t.Errorf("Failed to update block storage name.")
   233  	}
   234  	if blk_storage.Description != new_desc {
   235  		t.Errorf("Failed to update block storage description.")
   236  	}
   237  }