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

     1  package testing
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  	"testing"
     8  
     9  	"github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/flavors"
    10  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
    11  
    12  	fake "github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/testhelper"
    13  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    14  	"github.com/vnpaycloud-console/gophercloud/v2/testhelper/client"
    15  )
    16  
    17  func TestListFlavors(t *testing.T) {
    18  	th.SetupHTTP()
    19  	defer th.TeardownHTTP()
    20  	HandleFlavorListSuccessfully(t)
    21  
    22  	pages := 0
    23  	err := flavors.List(fake.ServiceClient(), flavors.ListOpts{}).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    24  		pages++
    25  
    26  		actual, err := flavors.ExtractFlavors(page)
    27  		if err != nil {
    28  			return false, err
    29  		}
    30  
    31  		if len(actual) != 2 {
    32  			t.Fatalf("Expected 2 flavors, got %d", len(actual))
    33  		}
    34  		th.CheckDeepEquals(t, FlavorBasic, actual[0])
    35  		th.CheckDeepEquals(t, FlavorAdvance, actual[1])
    36  
    37  		return true, nil
    38  	})
    39  
    40  	th.AssertNoErr(t, err)
    41  
    42  	if pages != 1 {
    43  		t.Errorf("Expected 1 page, saw %d", pages)
    44  	}
    45  }
    46  
    47  func TestListFlavorsEnabled(t *testing.T) {
    48  	th.SetupHTTP()
    49  	defer th.TeardownHTTP()
    50  
    51  	func() {
    52  		testCases := []string{
    53  			"true",
    54  			"false",
    55  			"",
    56  		}
    57  
    58  		cases := 0
    59  		th.Mux.HandleFunc("/v2.0/lbaas/flavors", func(w http.ResponseWriter, r *http.Request) {
    60  			th.TestMethod(t, r, "GET")
    61  			th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
    62  
    63  			w.Header().Add("Content-Type", "application/json")
    64  			if err := r.ParseForm(); err != nil {
    65  				t.Errorf("Failed to parse request form %v", err)
    66  			}
    67  			enabled := r.Form.Get("enabled")
    68  			if enabled != testCases[cases] {
    69  				t.Errorf("Expected enabled=%s got %q", testCases[cases], enabled)
    70  			}
    71  			cases++
    72  			fmt.Fprint(w, `{"flavorprofiles":[]}`)
    73  		})
    74  	}()
    75  
    76  	var nilBool *bool
    77  	enabled := true
    78  	filters := []*bool{
    79  		&enabled,
    80  		new(bool),
    81  		nilBool,
    82  	}
    83  	for _, filter := range filters {
    84  		allPages, err := flavors.List(fake.ServiceClient(), flavors.ListOpts{Enabled: filter}).AllPages(context.TODO())
    85  		th.AssertNoErr(t, err)
    86  		_, err = flavors.ExtractFlavors(allPages)
    87  		th.AssertNoErr(t, err)
    88  	}
    89  }
    90  
    91  func TestListAllFlavors(t *testing.T) {
    92  	th.SetupHTTP()
    93  	defer th.TeardownHTTP()
    94  	HandleFlavorListSuccessfully(t)
    95  
    96  	allPages, err := flavors.List(fake.ServiceClient(), flavors.ListOpts{}).AllPages(context.TODO())
    97  	th.AssertNoErr(t, err)
    98  	actual, err := flavors.ExtractFlavors(allPages)
    99  	th.AssertNoErr(t, err)
   100  	th.CheckDeepEquals(t, FlavorBasic, actual[0])
   101  	th.CheckDeepEquals(t, FlavorAdvance, actual[1])
   102  }
   103  
   104  func TestCreateFlavor(t *testing.T) {
   105  	th.SetupHTTP()
   106  	defer th.TeardownHTTP()
   107  	HandleFlavorCreationSuccessfully(t, SingleFlavorBody)
   108  
   109  	actual, err := flavors.Create(context.TODO(), fake.ServiceClient(), flavors.CreateOpts{
   110  		Name:            "Basic",
   111  		Description:     "A basic standalone Octavia load balancer.",
   112  		Enabled:         true,
   113  		FlavorProfileId: "9daa2768-74e7-4d13-bf5d-1b8e0dc239e1",
   114  	}).Extract()
   115  	th.AssertNoErr(t, err)
   116  
   117  	th.CheckDeepEquals(t, FlavorDb, *actual)
   118  }
   119  
   120  func TestRequiredCreateOpts(t *testing.T) {
   121  	res := flavors.Create(context.TODO(), fake.ServiceClient(), flavors.CreateOpts{})
   122  	if res.Err == nil {
   123  		t.Fatalf("Expected error, got none")
   124  	}
   125  }
   126  
   127  func TestGetFlavor(t *testing.T) {
   128  	th.SetupHTTP()
   129  	defer th.TeardownHTTP()
   130  	HandleFlavorGetSuccessfully(t)
   131  
   132  	client := fake.ServiceClient()
   133  	actual, err := flavors.Get(context.TODO(), client, "5548c807-e6e8-43d7-9ea4-b38d34dd74a0").Extract()
   134  	if err != nil {
   135  		t.Fatalf("Unexpected Get error: %v", err)
   136  	}
   137  
   138  	th.CheckDeepEquals(t, FlavorDb, *actual)
   139  }
   140  
   141  func TestDeleteFlavor(t *testing.T) {
   142  	th.SetupHTTP()
   143  	defer th.TeardownHTTP()
   144  	HandleFlavorDeletionSuccessfully(t)
   145  
   146  	res := flavors.Delete(context.TODO(), fake.ServiceClient(), "5548c807-e6e8-43d7-9ea4-b38d34dd74a0")
   147  	th.AssertNoErr(t, res.Err)
   148  }
   149  
   150  func TestUpdateFlavor(t *testing.T) {
   151  	th.SetupHTTP()
   152  	defer th.TeardownHTTP()
   153  	HandleFlavorUpdateSuccessfully(t)
   154  
   155  	client := fake.ServiceClient()
   156  	actual, err := flavors.Update(context.TODO(), client, "5548c807-e6e8-43d7-9ea4-b38d34dd74a0", flavors.UpdateOpts{
   157  		Name:        "Basic v2",
   158  		Description: "Rename flavor",
   159  		Enabled:     true,
   160  	}).Extract()
   161  	if err != nil {
   162  		t.Fatalf("Unexpected Update error: %v", err)
   163  	}
   164  
   165  	th.CheckDeepEquals(t, FlavorUpdated, *actual)
   166  }