github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/apiversions/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/networking/v2/apiversions"
    10  	"github.com/vnpaycloud-console/gophercloud/v2/pagination"
    11  	th "github.com/vnpaycloud-console/gophercloud/v2/testhelper"
    12  	fake "github.com/vnpaycloud-console/gophercloud/v2/testhelper/client"
    13  )
    14  
    15  func TestListVersions(t *testing.T) {
    16  	th.SetupHTTP()
    17  	defer th.TeardownHTTP()
    18  
    19  	th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    20  		th.TestMethod(t, r, "GET")
    21  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    22  
    23  		w.Header().Add("Content-Type", "application/json")
    24  		w.WriteHeader(http.StatusOK)
    25  
    26  		fmt.Fprint(w, `
    27  {
    28      "versions": [
    29          {
    30              "status": "CURRENT",
    31              "id": "v2.0",
    32              "links": [
    33                  {
    34                      "href": "http://23.253.228.211:9696/v2.0",
    35                      "rel": "self"
    36                  }
    37              ]
    38          }
    39      ]
    40  }`)
    41  	})
    42  
    43  	count := 0
    44  
    45  	err := apiversions.ListVersions(fake.ServiceClient()).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    46  		count++
    47  		actual, err := apiversions.ExtractAPIVersions(page)
    48  		if err != nil {
    49  			t.Errorf("Failed to extract API versions: %v", err)
    50  			return false, err
    51  		}
    52  
    53  		expected := []apiversions.APIVersion{
    54  			{
    55  				Status: "CURRENT",
    56  				ID:     "v2.0",
    57  			},
    58  		}
    59  
    60  		th.AssertDeepEquals(t, expected, actual)
    61  
    62  		return true, nil
    63  	})
    64  	th.AssertNoErr(t, err)
    65  
    66  	if count != 1 {
    67  		t.Errorf("Expected 1 page, got %d", count)
    68  	}
    69  }
    70  
    71  func TestNonJSONCannotBeExtractedIntoAPIVersions(t *testing.T) {
    72  	th.SetupHTTP()
    73  	defer th.TeardownHTTP()
    74  
    75  	th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    76  		w.WriteHeader(http.StatusOK)
    77  	})
    78  
    79  	err := apiversions.ListVersions(fake.ServiceClient()).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
    80  		if _, err := apiversions.ExtractAPIVersions(page); err == nil {
    81  			t.Fatalf("Expected error, got nil")
    82  		}
    83  		return true, nil
    84  	})
    85  	th.AssertErr(t, err)
    86  }
    87  
    88  func TestAPIInfo(t *testing.T) {
    89  	th.SetupHTTP()
    90  	defer th.TeardownHTTP()
    91  
    92  	th.Mux.HandleFunc("/v2.0/", func(w http.ResponseWriter, r *http.Request) {
    93  		th.TestMethod(t, r, "GET")
    94  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    95  
    96  		w.Header().Add("Content-Type", "application/json")
    97  		w.WriteHeader(http.StatusOK)
    98  
    99  		fmt.Fprint(w, `
   100  {
   101      "resources": [
   102          {
   103              "links": [
   104                  {
   105                      "href": "http://23.253.228.211:9696/v2.0/subnets",
   106                      "rel": "self"
   107                  }
   108              ],
   109              "name": "subnet",
   110              "collection": "subnets"
   111          },
   112          {
   113              "links": [
   114                  {
   115                      "href": "http://23.253.228.211:9696/v2.0/networks",
   116                      "rel": "self"
   117                  }
   118              ],
   119              "name": "network",
   120              "collection": "networks"
   121          },
   122          {
   123              "links": [
   124                  {
   125                      "href": "http://23.253.228.211:9696/v2.0/ports",
   126                      "rel": "self"
   127                  }
   128              ],
   129              "name": "port",
   130              "collection": "ports"
   131          }
   132      ]
   133  }
   134  			`)
   135  	})
   136  
   137  	count := 0
   138  
   139  	err := apiversions.ListVersionResources(fake.ServiceClient(), "v2.0").EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
   140  		count++
   141  		actual, err := apiversions.ExtractVersionResources(page)
   142  		if err != nil {
   143  			t.Errorf("Failed to extract version resources: %v", err)
   144  			return false, err
   145  		}
   146  
   147  		expected := []apiversions.APIVersionResource{
   148  			{
   149  				Name:       "subnet",
   150  				Collection: "subnets",
   151  			},
   152  			{
   153  				Name:       "network",
   154  				Collection: "networks",
   155  			},
   156  			{
   157  				Name:       "port",
   158  				Collection: "ports",
   159  			},
   160  		}
   161  
   162  		th.AssertDeepEquals(t, expected, actual)
   163  
   164  		return true, nil
   165  	})
   166  	th.AssertNoErr(t, err)
   167  
   168  	if count != 1 {
   169  		t.Errorf("Expected 1 page, got %d", count)
   170  	}
   171  }
   172  
   173  func TestNonJSONCannotBeExtractedIntoAPIVersionResources(t *testing.T) {
   174  	th.SetupHTTP()
   175  	defer th.TeardownHTTP()
   176  
   177  	th.Mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
   178  		w.WriteHeader(http.StatusOK)
   179  	})
   180  
   181  	err := apiversions.ListVersionResources(fake.ServiceClient(), "v2.0").EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) {
   182  		if _, err := apiversions.ExtractVersionResources(page); err == nil {
   183  			t.Fatalf("Expected error, got nil")
   184  		}
   185  		return true, nil
   186  	})
   187  	th.AssertErr(t, err)
   188  }