github.com/1and1/oneandone-cloudserver-sdk-go@v1.4.1/sharedstorages_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_ss       sync.Once
    13  	test_ss_name string
    14  	test_ss_desc string
    15  	test_ss      *SharedStorage
    16  )
    17  
    18  // Helper functions
    19  
    20  func create_shared_storage() *SharedStorage {
    21  	rand.Seed(time.Now().UnixNano())
    22  	rint := rand.Intn(999)
    23  	test_ss_name = fmt.Sprintf("SharedStorage_%d", rint)
    24  	test_ss_desc = fmt.Sprintf("SharedStorage_%d description", rint)
    25  	req := SharedStorageRequest{
    26  		Name:        test_ss_name,
    27  		Description: test_ss_desc,
    28  		Size:        Int2Pointer(50),
    29  	}
    30  	fmt.Printf("Creating new shared storage '%s'...\n", test_ss_name)
    31  	ss_id, ss, err := api.CreateSharedStorage(&req)
    32  	if err != nil {
    33  		fmt.Printf("Unable to create a shared storage. Error: %s", err.Error())
    34  		return nil
    35  	}
    36  	if ss_id == "" || ss.Id == "" {
    37  		fmt.Printf("Unable to create shared storage '%s'.", test_ss_name)
    38  		return nil
    39  	}
    40  
    41  	api.WaitForState(ss, "ACTIVE", 10, 30)
    42  	return ss
    43  }
    44  
    45  func set_shared_storage() {
    46  	test_ss = create_shared_storage()
    47  }
    48  
    49  // /shared_storages tests
    50  
    51  func TestCreateSharedStorage(t *testing.T) {
    52  	set_ss.Do(set_shared_storage)
    53  
    54  	if test_ss == nil {
    55  		t.Errorf("CreateSharedStorage failed.")
    56  		return
    57  	}
    58  	if test_ss.Id == "" {
    59  		t.Errorf("Missing shared storage ID.")
    60  	}
    61  	if test_ss.Name != test_ss_name {
    62  		t.Errorf("Wrong name of the shared storage.")
    63  	}
    64  	if test_ss.Description != test_ss_desc {
    65  		t.Errorf("Wrong shared storage description.")
    66  	}
    67  	if test_ss.Size != 50 {
    68  		t.Errorf("Wrong size of shared storage '%s'.", test_ss.Name)
    69  	}
    70  }
    71  
    72  func TestGetSharedStorage(t *testing.T) {
    73  	set_ss.Do(set_shared_storage)
    74  
    75  	fmt.Printf("Getting shared storage '%s'...\n", test_ss.Name)
    76  	ss, err := api.GetSharedStorage(test_ss.Id)
    77  
    78  	if err != nil {
    79  		t.Errorf("GetSharedStorage failed. Error: " + err.Error())
    80  	} else {
    81  		if ss.Id != test_ss.Id {
    82  			t.Errorf("Wrong shared storage ID.")
    83  		}
    84  	}
    85  }
    86  
    87  func TestListSharedStorages(t *testing.T) {
    88  	set_ss.Do(set_shared_storage)
    89  	fmt.Println("Listing all shared storages...")
    90  
    91  	res, err := api.ListSharedStorages()
    92  	if err != nil {
    93  		t.Errorf("ListSharedStorages failed. Error: " + err.Error())
    94  	}
    95  	if len(res) == 0 {
    96  		t.Errorf("No shared storage found.")
    97  	}
    98  
    99  	res, err = api.ListSharedStorages(1, 1, "", "", "id,name")
   100  
   101  	if err != nil {
   102  		t.Errorf("ListSharedStorages with parameter options failed. Error: " + err.Error())
   103  		return
   104  	}
   105  	if len(res) == 0 {
   106  		t.Errorf("No shared storage found.")
   107  	}
   108  	if len(res) > 1 {
   109  		t.Errorf("Wrong number of objects per page.")
   110  	}
   111  	if res[0].Id == "" {
   112  		t.Errorf("Filtering parameters failed.")
   113  	}
   114  	if res[0].Name == "" {
   115  		t.Errorf("Filtering parameters failed.")
   116  	}
   117  	if res[0].State != "" {
   118  		t.Errorf("Filtering parameters failed.")
   119  	}
   120  	if res[0].CifsPath != "" {
   121  		t.Errorf("Filtering parameters failed.")
   122  	}
   123  	if res[0].NfsPath != "" {
   124  		t.Errorf("Filtering parameters failed.")
   125  	}
   126  	// Test for error response
   127  	res, err = api.ListSharedStorages(true, false, "id", "name", "")
   128  	if res != nil || err == nil {
   129  		t.Errorf("ListSharedStorages failed to handle incorrect argument type.")
   130  	}
   131  
   132  	res, err = api.ListSharedStorages(0, 0, "", test_ss.Name, "")
   133  
   134  	if err != nil {
   135  		t.Errorf("ListSharedStorages 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_ss.Name {
   142  		t.Errorf("Search parameter failed.")
   143  	}
   144  }
   145  
   146  func TestGetSharedStorageCredentials(t *testing.T) {
   147  	fmt.Printf("Getting access credentials for shared storage '%s'...\n", test_ss.Name)
   148  	ssc, err := api.GetSharedStorageCredentials()
   149  
   150  	if err != nil {
   151  		t.Errorf("GetSharedStorageCredentials failed. Error: " + err.Error())
   152  	} else {
   153  		if ssc[0].KerberosContentFile == "" {
   154  			t.Errorf("Missing Kerberos key.")
   155  		}
   156  		if ssc[0].UserDomain == "" {
   157  			t.Errorf("Missing user domain.")
   158  		}
   159  	}
   160  }
   161  
   162  func TestUpdateSharedStorageCredentials(t *testing.T) {
   163  	fmt.Printf("Updating credentials of shared storage '%s'...\n", test_ss.Name)
   164  	rand.Seed(time.Now().UnixNano())
   165  	rint := rand.Intn(999999)
   166  	new_pass := fmt.Sprintf("N.u&A@V^d_g!b;e%d", rint)
   167  	ssc, err := api.UpdateSharedStorageCredentials(new_pass)
   168  
   169  	if err != nil {
   170  		t.Errorf("UpdateSharedStorageCredentials failed. Error: " + err.Error())
   171  		return
   172  	}
   173  
   174  	cr, _ := api.GetSharedStorageCredentials()
   175  
   176  	if ssc[0].KerberosContentFile != cr[0].KerberosContentFile {
   177  		t.Errorf("Credentials for shared storage not updated.")
   178  	}
   179  }
   180  
   181  func TestAddSharedStorageServers(t *testing.T) {
   182  	set_ss.Do(set_shared_storage)
   183  	sync_server.Do(func() { deploy_test_server(false) })
   184  
   185  	fmt.Printf("Adding server to shared storage '%s'...\n", test_ss.Name)
   186  
   187  	servers := []SharedStorageServer{
   188  		{
   189  			Id:     test_server.Id,
   190  			Rights: "RW",
   191  		},
   192  	}
   193  	ss, err := api.AddSharedStorageServers(test_ss.Id, servers)
   194  
   195  	if err != nil {
   196  		t.Errorf("AddSharedStorageServers failed. Error: " + err.Error())
   197  		return
   198  	}
   199  
   200  	api.WaitForState(ss, "ACTIVE", 10, 30)
   201  	ss, _ = api.GetSharedStorage(ss.Id)
   202  
   203  	if len(ss.Servers) != 1 {
   204  		t.Errorf("Found no server added to the shared storage.")
   205  	}
   206  	if ss.Servers[0].Id != test_server.Id {
   207  		t.Errorf("Wrong server added to the shared storage.")
   208  	}
   209  	test_ss = ss
   210  }
   211  
   212  func TestGetSharedStorageServer(t *testing.T) {
   213  	set_ss.Do(set_shared_storage)
   214  
   215  	fmt.Printf("Getting server added to shared storage '%s'...\n", test_ss.Name)
   216  	ss_ser, err := api.GetSharedStorageServer(test_ss.Id, test_ss.Servers[0].Id)
   217  
   218  	if err != nil {
   219  		t.Errorf("GetSharedStorageServer failed. Error: " + err.Error())
   220  		return
   221  	}
   222  	if ss_ser.Id != test_ss.Servers[0].Id {
   223  		t.Errorf("Wrong ID of the server added to shared storage '%s'.", test_ss.Name)
   224  	}
   225  	if ss_ser.Name != test_ss.Servers[0].Name {
   226  		t.Errorf("Wrong name of the server added to shared storage '%s'.", test_ss.Name)
   227  	}
   228  	if ss_ser.Rights != test_ss.Servers[0].Rights {
   229  		t.Errorf("Wrong access rights of the server added to shared storage '%s'.", test_ss.Name)
   230  	}
   231  }
   232  
   233  func TestListSharedStorageServers(t *testing.T) {
   234  	set_ss.Do(set_shared_storage)
   235  	sync_server.Do(func() { deploy_test_server(false) })
   236  
   237  	fmt.Printf("Listing servers added to shared storage '%s'...\n", test_ss.Name)
   238  	ss_srvs, err := api.ListSharedStorageServers(test_ss.Id)
   239  
   240  	if err != nil {
   241  		t.Errorf("ListSharedStorageServers failed. Error: " + err.Error())
   242  		return
   243  	}
   244  	if len(ss_srvs) != 1 {
   245  		t.Errorf("Wrong number of servers added to shared storage '%s'.", test_ss.Name)
   246  	}
   247  	if ss_srvs[0].Id != test_server.Id {
   248  		t.Errorf("Wrong server added to shared storage '%s'.", test_ss.Name)
   249  	}
   250  }
   251  
   252  func TestDeleteSharedStorageServer(t *testing.T) {
   253  	set_ss.Do(set_shared_storage)
   254  	sync_server.Do(func() { deploy_test_server(false) })
   255  
   256  	fmt.Printf("Deleting server attached to shared storage '%s'...\n", test_ss.Name)
   257  	ss, err := api.DeleteSharedStorageServer(test_ss.Id, test_server.Id)
   258  
   259  	if err != nil {
   260  		t.Errorf("DeleteSharedStorageServer failed. Error: " + err.Error())
   261  		return
   262  	}
   263  
   264  	api.WaitForState(ss, "ACTIVE", 10, 30)
   265  	ss, err = api.GetSharedStorage(ss.Id)
   266  
   267  	if err != nil {
   268  		t.Errorf("Deleting server attached to the shared storage failed.")
   269  	} else {
   270  		if len(ss.Servers) > 0 {
   271  			t.Errorf("Server not deleted from the shared storage.")
   272  		}
   273  	}
   274  }
   275  
   276  func TestUpdateSharedStorage(t *testing.T) {
   277  	set_ss.Do(set_shared_storage)
   278  
   279  	fmt.Printf("Updating shared storage '%s'...\n", test_ss.Name)
   280  	new_name := test_ss.Name + "_updated"
   281  	new_desc := test_ss.Description + "_updated"
   282  	new_size := 100
   283  	ssu := SharedStorageRequest{
   284  		Name:        new_name,
   285  		Description: new_desc,
   286  		Size:        &new_size,
   287  	}
   288  	ss, err := api.UpdateSharedStorage(test_ss.Id, &ssu)
   289  
   290  	if err != nil {
   291  		t.Errorf("UpdateSharedStorage failed. Error: " + err.Error())
   292  	} else {
   293  		api.WaitForState(ss, "ACTIVE", 10, 30)
   294  	}
   295  	ss, _ = api.GetSharedStorage(ss.Id)
   296  	if ss.Name != new_name {
   297  		t.Errorf("Failed to update shared storage name.")
   298  	}
   299  	if ss.Description != new_desc {
   300  		t.Errorf("Failed to update shared storage description.")
   301  	}
   302  	if ss.Size != new_size {
   303  		t.Errorf("Failed to update shared storage size.")
   304  	}
   305  }
   306  
   307  func TestDeleteSharedStorage(t *testing.T) {
   308  	set_ss.Do(set_shared_storage)
   309  
   310  	fmt.Printf("Deleting shared storage '%s'...\n", test_ss.Name)
   311  	ss, err := api.DeleteSharedStorage(test_ss.Id)
   312  
   313  	if err != nil {
   314  		t.Errorf("DeleteSharedStorage failed. Error: " + err.Error())
   315  		return
   316  	} else {
   317  		api.WaitUntilDeleted(ss)
   318  	}
   319  
   320  	ss, err = api.GetSharedStorage(ss.Id)
   321  
   322  	if ss != nil {
   323  		t.Errorf("Unable to delete the shared storage.")
   324  	} else {
   325  		test_ss = nil
   326  	}
   327  }