github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/networking/v2/extensions/subnetpools/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 "testing" 8 "time" 9 10 fake "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/common" 11 "github.com/vnpaycloud-console/gophercloud/v2/openstack/networking/v2/extensions/subnetpools" 12 "github.com/vnpaycloud-console/gophercloud/v2/pagination" 13 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 14 ) 15 16 func TestList(t *testing.T) { 17 th.SetupHTTP() 18 defer th.TeardownHTTP() 19 20 th.Mux.HandleFunc("/v2.0/subnetpools", 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 27 fmt.Fprint(w, SubnetPoolsListResult) 28 }) 29 30 count := 0 31 32 err := subnetpools.List(fake.ServiceClient(), subnetpools.ListOpts{}).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 33 count++ 34 actual, err := subnetpools.ExtractSubnetPools(page) 35 if err != nil { 36 t.Errorf("Failed to extract subnetpools: %v", err) 37 return false, nil 38 } 39 40 expected := []subnetpools.SubnetPool{ 41 SubnetPool1, 42 SubnetPool2, 43 SubnetPool3, 44 } 45 46 th.CheckDeepEquals(t, expected, actual) 47 48 return true, nil 49 }) 50 51 th.AssertNoErr(t, err) 52 53 if count != 1 { 54 t.Errorf("Expected 1 page, got %d", count) 55 } 56 } 57 58 func TestGet(t *testing.T) { 59 th.SetupHTTP() 60 defer th.TeardownHTTP() 61 62 th.Mux.HandleFunc("/v2.0/subnetpools/0a738452-8057-4ad3-89c2-92f6a74afa76", func(w http.ResponseWriter, r *http.Request) { 63 th.TestMethod(t, r, "GET") 64 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 65 66 w.Header().Add("Content-Type", "application/json") 67 w.WriteHeader(http.StatusOK) 68 69 fmt.Fprint(w, SubnetPoolGetResult) 70 }) 71 72 s, err := subnetpools.Get(context.TODO(), fake.ServiceClient(), "0a738452-8057-4ad3-89c2-92f6a74afa76").Extract() 73 th.AssertNoErr(t, err) 74 75 th.AssertEquals(t, s.ID, "0a738452-8057-4ad3-89c2-92f6a74afa76") 76 th.AssertEquals(t, s.Name, "my-ipv6-pool") 77 th.AssertEquals(t, s.DefaultQuota, 2) 78 th.AssertEquals(t, s.TenantID, "1e2b9857295a4a3e841809ef492812c5") 79 th.AssertEquals(t, s.ProjectID, "1e2b9857295a4a3e841809ef492812c5") 80 th.AssertEquals(t, s.CreatedAt, time.Date(2018, 1, 1, 0, 0, 1, 0, time.UTC)) 81 th.AssertEquals(t, s.UpdatedAt, time.Date(2018, 1, 1, 0, 10, 10, 0, time.UTC)) 82 th.AssertDeepEquals(t, s.Prefixes, []string{ 83 "2001:db8::a3/64", 84 }) 85 th.AssertEquals(t, s.DefaultPrefixLen, 64) 86 th.AssertEquals(t, s.MinPrefixLen, 64) 87 th.AssertEquals(t, s.MaxPrefixLen, 128) 88 th.AssertEquals(t, s.AddressScopeID, "") 89 th.AssertEquals(t, s.IPversion, 6) 90 th.AssertEquals(t, s.Shared, false) 91 th.AssertEquals(t, s.Description, "ipv6 prefixes") 92 th.AssertEquals(t, s.IsDefault, true) 93 th.AssertEquals(t, s.RevisionNumber, 2) 94 } 95 func TestCreate(t *testing.T) { 96 th.SetupHTTP() 97 defer th.TeardownHTTP() 98 99 th.Mux.HandleFunc("/v2.0/subnetpools", func(w http.ResponseWriter, r *http.Request) { 100 th.TestMethod(t, r, "POST") 101 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 102 th.TestHeader(t, r, "Content-Type", "application/json") 103 th.TestHeader(t, r, "Accept", "application/json") 104 th.TestJSONRequest(t, r, SubnetPoolCreateRequest) 105 106 w.Header().Add("Content-Type", "application/json") 107 w.WriteHeader(http.StatusCreated) 108 109 fmt.Fprint(w, SubnetPoolCreateResult) 110 }) 111 112 opts := subnetpools.CreateOpts{ 113 Name: "my_ipv4_pool", 114 Prefixes: []string{ 115 "10.10.0.0/16", 116 "10.11.11.0/24", 117 }, 118 MinPrefixLen: 25, 119 MaxPrefixLen: 30, 120 AddressScopeID: "3d4e2e2a-552b-42ad-a16d-820bbf3edaf3", 121 Description: "ipv4 prefixes", 122 } 123 s, err := subnetpools.Create(context.TODO(), fake.ServiceClient(), opts).Extract() 124 th.AssertNoErr(t, err) 125 126 th.AssertEquals(t, s.Name, "my_ipv4_pool") 127 th.AssertDeepEquals(t, s.Prefixes, []string{ 128 "10.10.0.0/16", 129 "10.11.11.0/24", 130 }) 131 th.AssertEquals(t, s.MinPrefixLen, 25) 132 th.AssertEquals(t, s.MaxPrefixLen, 30) 133 th.AssertEquals(t, s.AddressScopeID, "3d4e2e2a-552b-42ad-a16d-820bbf3edaf3") 134 th.AssertEquals(t, s.Description, "ipv4 prefixes") 135 } 136 137 func TestUpdate(t *testing.T) { 138 th.SetupHTTP() 139 defer th.TeardownHTTP() 140 141 th.Mux.HandleFunc("/v2.0/subnetpools/099546ca-788d-41e5-a76d-17d8cd282d3e", func(w http.ResponseWriter, r *http.Request) { 142 th.TestMethod(t, r, "PUT") 143 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 144 th.TestHeader(t, r, "Content-Type", "application/json") 145 th.TestHeader(t, r, "Accept", "application/json") 146 th.TestJSONRequest(t, r, SubnetPoolUpdateRequest) 147 148 w.Header().Add("Content-Type", "application/json") 149 w.WriteHeader(http.StatusOK) 150 151 fmt.Fprint(w, SubnetPoolUpdateResponse) 152 }) 153 154 nullString := "" 155 nullInt := 0 156 updateOpts := subnetpools.UpdateOpts{ 157 Name: "new_subnetpool_name", 158 Prefixes: []string{ 159 "10.11.12.0/24", 160 "10.24.0.0/16", 161 }, 162 MaxPrefixLen: 16, 163 AddressScopeID: &nullString, 164 DefaultQuota: &nullInt, 165 Description: &nullString, 166 } 167 n, err := subnetpools.Update(context.TODO(), fake.ServiceClient(), "099546ca-788d-41e5-a76d-17d8cd282d3e", updateOpts).Extract() 168 th.AssertNoErr(t, err) 169 170 th.AssertEquals(t, n.Name, "new_subnetpool_name") 171 th.AssertDeepEquals(t, n.Prefixes, []string{ 172 "10.8.0.0/16", 173 "10.11.12.0/24", 174 "10.24.0.0/16", 175 }) 176 th.AssertEquals(t, n.MaxPrefixLen, 16) 177 th.AssertEquals(t, n.ID, "099546ca-788d-41e5-a76d-17d8cd282d3e") 178 th.AssertEquals(t, n.AddressScopeID, "") 179 th.AssertEquals(t, n.DefaultQuota, 0) 180 th.AssertEquals(t, n.Description, "") 181 } 182 183 func TestDelete(t *testing.T) { 184 th.SetupHTTP() 185 defer th.TeardownHTTP() 186 187 th.Mux.HandleFunc("/v2.0/subnetpools/099546ca-788d-41e5-a76d-17d8cd282d3e", func(w http.ResponseWriter, r *http.Request) { 188 th.TestMethod(t, r, "DELETE") 189 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 190 w.WriteHeader(http.StatusNoContent) 191 }) 192 193 res := subnetpools.Delete(context.TODO(), fake.ServiceClient(), "099546ca-788d-41e5-a76d-17d8cd282d3e") 194 th.AssertNoErr(t, res.Err) 195 }