github.com/gophercloud/gophercloud@v1.11.0/openstack/networking/v2/extensions/bgp/speakers/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 "testing" 8 9 fake "github.com/gophercloud/gophercloud/openstack/networking/v2/common" 10 "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/bgp/speakers" 11 "github.com/gophercloud/gophercloud/pagination" 12 th "github.com/gophercloud/gophercloud/testhelper" 13 ) 14 15 func TestList(t *testing.T) { 16 th.SetupHTTP() 17 defer th.TeardownHTTP() 18 19 th.Mux.HandleFunc("/v2.0/bgp-speakers", 20 func(w http.ResponseWriter, r *http.Request) { 21 th.TestMethod(t, r, "GET") 22 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 23 24 w.Header().Add("Content-Type", "application/json") 25 w.WriteHeader(http.StatusOK) 26 fmt.Fprintf(w, ListBGPSpeakerResult) 27 }) 28 count := 0 29 30 speakers.List(fake.ServiceClient()).EachPage( 31 func(page pagination.Page) (bool, error) { 32 count++ 33 actual, err := speakers.ExtractBGPSpeakers(page) 34 35 if err != nil { 36 t.Errorf("Failed to extract BGP speakers: %v", err) 37 return false, nil 38 } 39 expected := []speakers.BGPSpeaker{BGPSpeaker1} 40 th.CheckDeepEquals(t, expected, actual) 41 return true, nil 42 }) 43 } 44 45 func TestGet(t *testing.T) { 46 th.SetupHTTP() 47 defer th.TeardownHTTP() 48 49 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 50 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID, func(w http.ResponseWriter, r *http.Request) { 51 th.TestMethod(t, r, "GET") 52 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 53 w.Header().Add("Content-Type", "application/json") 54 w.WriteHeader(http.StatusOK) 55 fmt.Fprintf(w, GetBGPSpeakerResult) 56 }) 57 58 s, err := speakers.Get(fake.ServiceClient(), bgpSpeakerID).Extract() 59 th.AssertNoErr(t, err) 60 th.CheckDeepEquals(t, *s, BGPSpeaker1) 61 } 62 63 func TestCreate(t *testing.T) { 64 th.SetupHTTP() 65 defer th.TeardownHTTP() 66 67 th.Mux.HandleFunc("/v2.0/bgp-speakers", func(w http.ResponseWriter, r *http.Request) { 68 th.TestMethod(t, r, "POST") 69 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 70 th.TestHeader(t, r, "Content-Type", "application/json") 71 th.TestHeader(t, r, "Accept", "application/json") 72 th.TestJSONRequest(t, r, CreateRequest) 73 w.Header().Add("Content-Type", "application/json") 74 w.WriteHeader(http.StatusCreated) 75 fmt.Fprintf(w, CreateResponse) 76 }) 77 78 opts := speakers.CreateOpts{ 79 IPVersion: 6, 80 AdvertiseFloatingIPHostRoutes: false, 81 AdvertiseTenantNetworks: true, 82 Name: "gophercloud-testing-bgp-speaker", 83 LocalAS: "2000", 84 Networks: []string{}, 85 } 86 r, err := speakers.Create(fake.ServiceClient(), opts).Extract() 87 th.AssertNoErr(t, err) 88 th.AssertEquals(t, r.Name, opts.Name) 89 th.AssertEquals(t, r.LocalAS, 2000) 90 th.AssertEquals(t, len(r.Networks), 0) 91 th.AssertEquals(t, r.IPVersion, opts.IPVersion) 92 th.AssertEquals(t, r.AdvertiseFloatingIPHostRoutes, opts.AdvertiseFloatingIPHostRoutes) 93 th.AssertEquals(t, r.AdvertiseTenantNetworks, opts.AdvertiseTenantNetworks) 94 } 95 96 func TestDelete(t *testing.T) { 97 th.SetupHTTP() 98 defer th.TeardownHTTP() 99 100 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 101 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID, func(w http.ResponseWriter, r *http.Request) { 102 th.TestMethod(t, r, "DELETE") 103 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 104 th.TestHeader(t, r, "Accept", "application/json") 105 106 w.Header().Add("Content-Type", "application/json") 107 w.WriteHeader(http.StatusNoContent) 108 }) 109 110 err := speakers.Delete(fake.ServiceClient(), bgpSpeakerID).ExtractErr() 111 th.AssertNoErr(t, err) 112 } 113 114 func TestUpdate(t *testing.T) { 115 th.SetupHTTP() 116 defer th.TeardownHTTP() 117 118 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 119 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID, func(w http.ResponseWriter, r *http.Request) { 120 if r.Method == "GET" { 121 th.TestMethod(t, r, "GET") 122 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 123 w.Header().Add("Content-Type", "application/json") 124 w.WriteHeader(http.StatusOK) 125 fmt.Fprintf(w, GetBGPSpeakerResult) 126 } else if r.Method == "PUT" { 127 th.TestMethod(t, r, "PUT") 128 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 129 th.TestHeader(t, r, "Content-Type", "application/json") 130 th.TestHeader(t, r, "Accept", "application/json") 131 th.TestJSONRequest(t, r, UpdateBGPSpeakerRequest) 132 133 w.Header().Add("Content-Type", "application/json") 134 w.WriteHeader(http.StatusOK) 135 fmt.Fprintf(w, UpdateBGPSpeakerResponse) 136 } else { 137 panic("Unexpected Request") 138 } 139 }) 140 141 opts := speakers.UpdateOpts{ 142 Name: "testing-bgp-speaker", 143 AdvertiseTenantNetworks: false, 144 AdvertiseFloatingIPHostRoutes: true, 145 } 146 147 r, err := speakers.Update(fake.ServiceClient(), bgpSpeakerID, opts).Extract() 148 th.AssertNoErr(t, err) 149 th.AssertEquals(t, r.Name, opts.Name) 150 th.AssertEquals(t, r.AdvertiseTenantNetworks, opts.AdvertiseTenantNetworks) 151 th.AssertEquals(t, r.AdvertiseFloatingIPHostRoutes, opts.AdvertiseFloatingIPHostRoutes) 152 } 153 154 func TestAddBGPPeer(t *testing.T) { 155 th.SetupHTTP() 156 defer th.TeardownHTTP() 157 158 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 159 bgpPeerID := "f5884c7c-71d5-43a3-88b4-1742e97674aa" 160 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID+"/add_bgp_peer", func(w http.ResponseWriter, r *http.Request) { 161 th.TestMethod(t, r, "PUT") 162 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 163 th.TestHeader(t, r, "Content-Type", "application/json") 164 th.TestHeader(t, r, "Accept", "application/json") 165 th.TestJSONRequest(t, r, AddRemoveBGPPeerJSON) 166 167 w.Header().Add("Content-Type", "application/json") 168 w.WriteHeader(http.StatusOK) 169 fmt.Fprintf(w, AddRemoveBGPPeerJSON) 170 }) 171 172 opts := speakers.AddBGPPeerOpts{BGPPeerID: bgpPeerID} 173 r, err := speakers.AddBGPPeer(fake.ServiceClient(), bgpSpeakerID, opts).Extract() 174 th.AssertNoErr(t, err) 175 th.AssertEquals(t, bgpPeerID, r.BGPPeerID) 176 } 177 178 func TestRemoveBGPPeer(t *testing.T) { 179 th.SetupHTTP() 180 defer th.TeardownHTTP() 181 182 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 183 bgpPeerID := "f5884c7c-71d5-43a3-88b4-1742e97674aa" 184 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID+"/remove_bgp_peer", func(w http.ResponseWriter, r *http.Request) { 185 th.TestMethod(t, r, "PUT") 186 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 187 th.TestHeader(t, r, "Content-Type", "application/json") 188 th.TestHeader(t, r, "Accept", "application/json") 189 th.TestJSONRequest(t, r, AddRemoveBGPPeerJSON) 190 w.WriteHeader(http.StatusOK) 191 }) 192 193 opts := speakers.RemoveBGPPeerOpts{BGPPeerID: bgpPeerID} 194 err := speakers.RemoveBGPPeer(fake.ServiceClient(), bgpSpeakerID, opts).ExtractErr() 195 th.AssertEquals(t, err, io.EOF) 196 } 197 198 func TestGetAdvertisedRoutes(t *testing.T) { 199 th.SetupHTTP() 200 defer th.TeardownHTTP() 201 202 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 203 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID+"/get_advertised_routes", func(w http.ResponseWriter, r *http.Request) { 204 th.TestMethod(t, r, "GET") 205 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 206 w.Header().Add("Content-Type", "application/json") 207 w.WriteHeader(http.StatusOK) 208 fmt.Fprintf(w, GetAdvertisedRoutesResult) 209 }) 210 211 count := 0 212 speakers.GetAdvertisedRoutes(fake.ServiceClient(), bgpSpeakerID).EachPage( 213 func(page pagination.Page) (bool, error) { 214 count++ 215 actual, err := speakers.ExtractAdvertisedRoutes(page) 216 217 if err != nil { 218 t.Errorf("Failed to extract Advertised route: %v", err) 219 return false, nil 220 } 221 222 expected := []speakers.AdvertisedRoute{ 223 speakers.AdvertisedRoute{NextHop: "172.17.128.212", Destination: "172.17.129.192/27"}, 224 speakers.AdvertisedRoute{NextHop: "172.17.128.218", Destination: "172.17.129.0/27"}, 225 speakers.AdvertisedRoute{NextHop: "172.17.128.231", Destination: "172.17.129.160/27"}, 226 } 227 th.CheckDeepEquals(t, count, 1) 228 th.CheckDeepEquals(t, expected, actual) 229 return true, nil 230 }) 231 } 232 233 func TestAddGatewayNetwork(t *testing.T) { 234 th.SetupHTTP() 235 defer th.TeardownHTTP() 236 237 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 238 networkID := "ac13bb26-6219-49c3-a880-08847f6830b7" 239 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID+"/add_gateway_network", func(w http.ResponseWriter, r *http.Request) { 240 th.TestMethod(t, r, "PUT") 241 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 242 th.TestHeader(t, r, "Content-Type", "application/json") 243 th.TestHeader(t, r, "Accept", "application/json") 244 th.TestJSONRequest(t, r, AddRemoveGatewayNetworkJSON) 245 246 w.Header().Add("Content-Type", "application/json") 247 w.WriteHeader(http.StatusOK) 248 fmt.Fprintf(w, AddRemoveGatewayNetworkJSON) 249 }) 250 251 opts := speakers.AddGatewayNetworkOpts{NetworkID: networkID} 252 r, err := speakers.AddGatewayNetwork(fake.ServiceClient(), bgpSpeakerID, opts).Extract() 253 th.AssertNoErr(t, err) 254 th.AssertEquals(t, r.NetworkID, networkID) 255 } 256 257 func TestRemoveGatewayNetwork(t *testing.T) { 258 th.SetupHTTP() 259 defer th.TeardownHTTP() 260 261 bgpSpeakerID := "ab01ade1-ae62-43c9-8a1f-3c24225b96d8" 262 networkID := "ac13bb26-6219-49c3-a880-08847f6830b7" 263 th.Mux.HandleFunc("/v2.0/bgp-speakers/"+bgpSpeakerID+"/remove_gateway_network", func(w http.ResponseWriter, r *http.Request) { 264 th.TestMethod(t, r, "PUT") 265 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 266 th.TestHeader(t, r, "Content-Type", "application/json") 267 th.TestHeader(t, r, "Accept", "application/json") 268 th.TestJSONRequest(t, r, AddRemoveGatewayNetworkJSON) 269 270 w.Header().Add("Content-Type", "application/json") 271 w.WriteHeader(http.StatusOK) 272 fmt.Fprintf(w, "") 273 }) 274 275 opts := speakers.RemoveGatewayNetworkOpts{NetworkID: networkID} 276 err := speakers.RemoveGatewayNetwork(fake.ServiceClient(), bgpSpeakerID, opts).ExtractErr() 277 th.AssertEquals(t, err, io.EOF) 278 }