github.com/gophercloud/gophercloud@v1.11.0/openstack/loadbalancer/v2/pools/testing/requests_test.go (about)

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