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 }