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  }