github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/loadbalancer/v2/pools/testing/requests_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/pools"
     8  	fake "github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/testhelper"
     9  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
    10  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    11  )
    12  
    13  func TestListPools(t *testing.T) {
    14  	th.SetupHTTP()
    15  	defer th.TeardownHTTP()
    16  	HandlePoolListSuccessfully(t)
    17  
    18  	pages := 0
    19  	err := pools.List(fake.ServiceClient(), pools.ListOpts{}).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    20  		pages++
    21  
    22  		actual, err := pools.ExtractPools(page)
    23  		if err != nil {
    24  			return false, err
    25  		}
    26  
    27  		if len(actual) != 2 {
    28  			t.Fatalf("Expected 2 pools, got %d", len(actual))
    29  		}
    30  		th.CheckDeepEquals(t, PoolWeb, actual[0])
    31  		th.CheckDeepEquals(t, PoolDb, actual[1])
    32  
    33  		return true, nil
    34  	})
    35  
    36  	th.AssertNoErr(t, err)
    37  
    38  	if pages != 1 {
    39  		t.Errorf("Expected 1 page, saw %d", pages)
    40  	}
    41  }
    42  
    43  func TestListAllPools(t *testing.T) {
    44  	th.SetupHTTP()
    45  	defer th.TeardownHTTP()
    46  	HandlePoolListSuccessfully(t)
    47  
    48  	allPages, err := pools.List(fake.ServiceClient(), pools.ListOpts{}).AllPages(context.TODO())
    49  	th.AssertNoErr(t, err)
    50  	actual, err := pools.ExtractPools(allPages)
    51  	th.AssertNoErr(t, err)
    52  	th.CheckDeepEquals(t, PoolWeb, actual[0])
    53  	th.CheckDeepEquals(t, PoolDb, actual[1])
    54  }
    55  
    56  func TestCreatePool(t *testing.T) {
    57  	th.SetupHTTP()
    58  	defer th.TeardownHTTP()
    59  	HandlePoolCreationSuccessfully(t, SinglePoolBody)
    60  
    61  	actual, err := pools.Create(context.TODO(), fake.ServiceClient(), pools.CreateOpts{
    62  		LBMethod:       pools.LBMethodRoundRobin,
    63  		Protocol:       "HTTP",
    64  		Name:           "Example pool",
    65  		ProjectID:      "2ffc6e22aae24e4795f87155d24c896f",
    66  		LoadbalancerID: "79e05663-7f03-45d2-a092-8b94062f22ab",
    67  	}).Extract()
    68  	th.AssertNoErr(t, err)
    69  
    70  	th.CheckDeepEquals(t, PoolDb, *actual)
    71  }
    72  
    73  func TestGetPool(t *testing.T) {
    74  	th.SetupHTTP()
    75  	defer th.TeardownHTTP()
    76  	HandlePoolGetSuccessfully(t)
    77  
    78  	client := fake.ServiceClient()
    79  	actual, err := pools.Get(context.TODO(), client, "c3741b06-df4d-4715-b142-276b6bce75ab").Extract()
    80  	if err != nil {
    81  		t.Fatalf("Unexpected Get error: %v", err)
    82  	}
    83  
    84  	th.CheckDeepEquals(t, PoolDb, *actual)
    85  }
    86  
    87  func TestDeletePool(t *testing.T) {
    88  	th.SetupHTTP()
    89  	defer th.TeardownHTTP()
    90  	HandlePoolDeletionSuccessfully(t)
    91  
    92  	res := pools.Delete(context.TODO(), fake.ServiceClient(), "c3741b06-df4d-4715-b142-276b6bce75ab")
    93  	th.AssertNoErr(t, res.Err)
    94  }
    95  
    96  func TestUpdatePool(t *testing.T) {
    97  	th.SetupHTTP()
    98  	defer th.TeardownHTTP()
    99  	HandlePoolUpdateSuccessfully(t)
   100  
   101  	client := fake.ServiceClient()
   102  	name := "NewPoolName"
   103  	actual, err := pools.Update(context.TODO(), client, "c3741b06-df4d-4715-b142-276b6bce75ab", pools.UpdateOpts{
   104  		Name:     &name,
   105  		LBMethod: pools.LBMethodLeastConnections,
   106  	}).Extract()
   107  	if err != nil {
   108  		t.Fatalf("Unexpected Update error: %v", err)
   109  	}
   110  
   111  	th.CheckDeepEquals(t, PoolUpdated, *actual)
   112  }
   113  
   114  func TestRequiredPoolCreateOpts(t *testing.T) {
   115  	res := pools.Create(context.TODO(), fake.ServiceClient(), pools.CreateOpts{})
   116  	if res.Err == nil {
   117  		t.Fatalf("Expected error, got none")
   118  	}
   119  	res = pools.Create(context.TODO(), fake.ServiceClient(), pools.CreateOpts{
   120  		LBMethod:       pools.LBMethod("invalid"),
   121  		Protocol:       pools.ProtocolHTTPS,
   122  		LoadbalancerID: "69055154-f603-4a28-8951-7cc2d9e54a9a",
   123  	})
   124  	if res.Err == nil {
   125  		t.Fatalf("Expected error, but got none")
   126  	}
   127  
   128  	res = pools.Create(context.TODO(), fake.ServiceClient(), pools.CreateOpts{
   129  		LBMethod:       pools.LBMethodRoundRobin,
   130  		Protocol:       pools.Protocol("invalid"),
   131  		LoadbalancerID: "69055154-f603-4a28-8951-7cc2d9e54a9a",
   132  	})
   133  	if res.Err == nil {
   134  		t.Fatalf("Expected error, but got none")
   135  	}
   136  
   137  	res = pools.Create(context.TODO(), fake.ServiceClient(), pools.CreateOpts{
   138  		LBMethod: pools.LBMethodRoundRobin,
   139  		Protocol: pools.ProtocolHTTPS,
   140  	})
   141  	if res.Err == nil {
   142  		t.Fatalf("Expected error, but got none")
   143  	}
   144  }
   145  
   146  func TestListMembers(t *testing.T) {
   147  	th.SetupHTTP()
   148  	defer th.TeardownHTTP()
   149  	HandleMemberListSuccessfully(t)
   150  
   151  	pages := 0
   152  	err := pools.ListMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.ListMembersOpts{}).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
   153  		pages++
   154  
   155  		actual, err := pools.ExtractMembers(page)
   156  		if err != nil {
   157  			return false, err
   158  		}
   159  
   160  		if len(actual) != 2 {
   161  			t.Fatalf("Expected 2 members, got %d", len(actual))
   162  		}
   163  		th.CheckDeepEquals(t, MemberWeb, actual[0])
   164  		th.CheckDeepEquals(t, MemberDb, actual[1])
   165  
   166  		return true, nil
   167  	})
   168  
   169  	th.AssertNoErr(t, err)
   170  
   171  	if pages != 1 {
   172  		t.Errorf("Expected 1 page, saw %d", pages)
   173  	}
   174  }
   175  
   176  func TestListAllMembers(t *testing.T) {
   177  	th.SetupHTTP()
   178  	defer th.TeardownHTTP()
   179  	HandleMemberListSuccessfully(t)
   180  
   181  	allPages, err := pools.ListMembers(fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.ListMembersOpts{}).AllPages(context.TODO())
   182  	th.AssertNoErr(t, err)
   183  	actual, err := pools.ExtractMembers(allPages)
   184  	th.AssertNoErr(t, err)
   185  	th.CheckDeepEquals(t, MemberWeb, actual[0])
   186  	th.CheckDeepEquals(t, MemberDb, actual[1])
   187  }
   188  
   189  func TestCreateMember(t *testing.T) {
   190  	th.SetupHTTP()
   191  	defer th.TeardownHTTP()
   192  	HandleMemberCreationSuccessfully(t, SingleMemberBody)
   193  
   194  	weight := 10
   195  	actual, err := pools.CreateMember(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.CreateMemberOpts{
   196  		Name:         "db",
   197  		SubnetID:     "1981f108-3c48-48d2-b908-30f7d28532c9",
   198  		ProjectID:    "2ffc6e22aae24e4795f87155d24c896f",
   199  		Address:      "10.0.2.11",
   200  		ProtocolPort: 80,
   201  		Weight:       &weight,
   202  	}).Extract()
   203  	th.AssertNoErr(t, err)
   204  
   205  	th.CheckDeepEquals(t, MemberDb, *actual)
   206  }
   207  
   208  func TestRequiredMemberCreateOpts(t *testing.T) {
   209  	res := pools.CreateMember(context.TODO(), fake.ServiceClient(), "", pools.CreateMemberOpts{})
   210  	if res.Err == nil {
   211  		t.Fatalf("Expected error, got none")
   212  	}
   213  	res = pools.CreateMember(context.TODO(), fake.ServiceClient(), "", pools.CreateMemberOpts{Address: "1.2.3.4", ProtocolPort: 80})
   214  	if res.Err == nil {
   215  		t.Fatalf("Expected error, but got none")
   216  	}
   217  	res = pools.CreateMember(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.CreateMemberOpts{ProtocolPort: 80})
   218  	if res.Err == nil {
   219  		t.Fatalf("Expected error, but got none")
   220  	}
   221  	res = pools.CreateMember(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", pools.CreateMemberOpts{Address: "1.2.3.4"})
   222  	if res.Err == nil {
   223  		t.Fatalf("Expected error, but got none")
   224  	}
   225  }
   226  
   227  func TestGetMember(t *testing.T) {
   228  	th.SetupHTTP()
   229  	defer th.TeardownHTTP()
   230  	HandleMemberGetSuccessfully(t)
   231  
   232  	client := fake.ServiceClient()
   233  	actual, err := pools.GetMember(context.TODO(), client, "332abe93-f488-41ba-870b-2ac66be7f853", "2a280670-c202-4b0b-a562-34077415aabf").Extract()
   234  	if err != nil {
   235  		t.Fatalf("Unexpected Get error: %v", err)
   236  	}
   237  
   238  	th.CheckDeepEquals(t, MemberDb, *actual)
   239  }
   240  
   241  func TestDeleteMember(t *testing.T) {
   242  	th.SetupHTTP()
   243  	defer th.TeardownHTTP()
   244  	HandleMemberDeletionSuccessfully(t)
   245  
   246  	res := pools.DeleteMember(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", "2a280670-c202-4b0b-a562-34077415aabf")
   247  	th.AssertNoErr(t, res.Err)
   248  }
   249  
   250  func TestUpdateMember(t *testing.T) {
   251  	th.SetupHTTP()
   252  	defer th.TeardownHTTP()
   253  	HandleMemberUpdateSuccessfully(t)
   254  
   255  	weight := 4
   256  	client := fake.ServiceClient()
   257  	name := "newMemberName"
   258  	actual, err := pools.UpdateMember(context.TODO(), client, "332abe93-f488-41ba-870b-2ac66be7f853", "2a280670-c202-4b0b-a562-34077415aabf", pools.UpdateMemberOpts{
   259  		Name:   &name,
   260  		Weight: &weight,
   261  	}).Extract()
   262  	if err != nil {
   263  		t.Fatalf("Unexpected Update error: %v", err)
   264  	}
   265  
   266  	th.CheckDeepEquals(t, MemberUpdated, *actual)
   267  }
   268  
   269  func TestBatchUpdateMembers(t *testing.T) {
   270  	th.SetupHTTP()
   271  	defer th.TeardownHTTP()
   272  	HandleMembersUpdateSuccessfully(t)
   273  
   274  	name_1 := "web-server-1"
   275  	weight_1 := 20
   276  	subnetID := "bbb35f84-35cc-4b2f-84c2-a6a29bba68aa"
   277  	member1 := pools.BatchUpdateMemberOpts{
   278  		Address:      "192.0.2.16",
   279  		ProtocolPort: 80,
   280  		Name:         &name_1,
   281  		SubnetID:     &subnetID,
   282  		Weight:       &weight_1,
   283  	}
   284  
   285  	name_2 := "web-server-2"
   286  	weight_2 := 10
   287  	member2 := pools.BatchUpdateMemberOpts{
   288  		Address:      "192.0.2.17",
   289  		ProtocolPort: 80,
   290  		Name:         &name_2,
   291  		Weight:       &weight_2,
   292  		SubnetID:     &subnetID,
   293  	}
   294  	members := []pools.BatchUpdateMemberOpts{member1, member2}
   295  
   296  	res := pools.BatchUpdateMembers(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", members)
   297  	th.AssertNoErr(t, res.Err)
   298  }
   299  
   300  func TestEmptyBatchUpdateMembers(t *testing.T) {
   301  	th.SetupHTTP()
   302  	defer th.TeardownHTTP()
   303  	HandleEmptyMembersUpdateSuccessfully(t)
   304  
   305  	res := pools.BatchUpdateMembers(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{})
   306  	th.AssertNoErr(t, res.Err)
   307  }
   308  
   309  func TestRequiredBatchUpdateMemberOpts(t *testing.T) {
   310  	th.SetupHTTP()
   311  	defer th.TeardownHTTP()
   312  
   313  	name := "web-server-1"
   314  	res := pools.BatchUpdateMembers(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{
   315  		{
   316  			Name: &name,
   317  		},
   318  	})
   319  	if res.Err == nil {
   320  		t.Fatalf("Expected error, but got none")
   321  	}
   322  
   323  	res = pools.BatchUpdateMembers(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{
   324  		{
   325  			Address: "192.0.2.17",
   326  			Name:    &name,
   327  		},
   328  	})
   329  	if res.Err == nil {
   330  		t.Fatalf("Expected error, but got none")
   331  	}
   332  
   333  	res = pools.BatchUpdateMembers(context.TODO(), fake.ServiceClient(), "332abe93-f488-41ba-870b-2ac66be7f853", []pools.BatchUpdateMemberOpts{
   334  		{
   335  			ProtocolPort: 80,
   336  			Name:         &name,
   337  		},
   338  	})
   339  	if res.Err == nil {
   340  		t.Fatalf("Expected error, but got none")
   341  	}
   342  }