github.com/gophercloud/gophercloud@v1.11.0/openstack/sharedfilesystems/v2/replicas/testing/fixtures_test.go (about) 1 package testing 2 3 import ( 4 "fmt" 5 "net/http" 6 "testing" 7 8 th "github.com/gophercloud/gophercloud/testhelper" 9 fake "github.com/gophercloud/gophercloud/testhelper/client" 10 ) 11 12 const ( 13 shareEndpoint = "/share-replicas" 14 replicaID = "3b9c33e8-b136-45c6-84a6-019c8db1d550" 15 ) 16 17 var createRequest = `{ 18 "share_replica": { 19 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 20 "availability_zone": "zone-1" 21 } 22 } 23 ` 24 25 var createResponse = `{ 26 "share_replica": { 27 "id": "3b9c33e8-b136-45c6-84a6-019c8db1d550", 28 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 29 "availability_zone": "zone-1", 30 "created_at": "2023-05-26T12:32:56.391337", 31 "status": "creating", 32 "share_network_id": "ca0163c8-3941-4420-8b01-41517e19e366", 33 "share_server_id": null, 34 "replica_state": null, 35 "updated_at": null 36 } 37 } 38 ` 39 40 // MockCreateResponse creates a mock response 41 func MockCreateResponse(t *testing.T) { 42 th.Mux.HandleFunc(shareEndpoint, func(w http.ResponseWriter, r *http.Request) { 43 th.TestMethod(t, r, "POST") 44 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 45 th.TestHeader(t, r, "Content-Type", "application/json") 46 th.TestHeader(t, r, "Accept", "application/json") 47 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 48 th.TestJSONRequest(t, r, createRequest) 49 w.Header().Add("Content-Type", "application/json") 50 w.WriteHeader(http.StatusAccepted) 51 fmt.Fprintf(w, createResponse) 52 }) 53 } 54 55 // MockDeleteResponse creates a mock delete response 56 func MockDeleteResponse(t *testing.T) { 57 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID, func(w http.ResponseWriter, r *http.Request) { 58 th.TestMethod(t, r, "DELETE") 59 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 60 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 61 w.WriteHeader(http.StatusAccepted) 62 }) 63 } 64 65 var promoteRequest = `{ 66 "promote": { 67 "quiesce_wait_time": 30 68 } 69 } 70 ` 71 72 func MockPromoteResponse(t *testing.T) { 73 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID+"/action", func(w http.ResponseWriter, r *http.Request) { 74 th.TestMethod(t, r, "POST") 75 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 76 th.TestHeader(t, r, "Content-Type", "application/json") 77 th.TestHeader(t, r, "Accept", "application/json") 78 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 79 th.TestJSONRequest(t, r, promoteRequest) 80 w.WriteHeader(http.StatusAccepted) 81 }) 82 } 83 84 var resyncRequest = `{ 85 "resync": null 86 } 87 ` 88 89 func MockResyncResponse(t *testing.T) { 90 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID+"/action", func(w http.ResponseWriter, r *http.Request) { 91 th.TestMethod(t, r, "POST") 92 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 93 th.TestHeader(t, r, "Content-Type", "application/json") 94 th.TestHeader(t, r, "Accept", "application/json") 95 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 96 th.TestJSONRequest(t, r, resyncRequest) 97 w.WriteHeader(http.StatusAccepted) 98 }) 99 } 100 101 var resetStatusRequest = `{ 102 "reset_status": { 103 "status": "available" 104 } 105 } 106 ` 107 108 func MockResetStatusResponse(t *testing.T) { 109 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID+"/action", func(w http.ResponseWriter, r *http.Request) { 110 th.TestMethod(t, r, "POST") 111 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 112 th.TestHeader(t, r, "Content-Type", "application/json") 113 th.TestHeader(t, r, "Accept", "application/json") 114 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 115 th.TestJSONRequest(t, r, resetStatusRequest) 116 w.WriteHeader(http.StatusAccepted) 117 }) 118 } 119 120 var resetStateRequest = `{ 121 "reset_replica_state": { 122 "replica_state": "active" 123 } 124 } 125 ` 126 127 func MockResetStateResponse(t *testing.T) { 128 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID+"/action", func(w http.ResponseWriter, r *http.Request) { 129 th.TestMethod(t, r, "POST") 130 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 131 th.TestHeader(t, r, "Content-Type", "application/json") 132 th.TestHeader(t, r, "Accept", "application/json") 133 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 134 th.TestJSONRequest(t, r, resetStateRequest) 135 w.WriteHeader(http.StatusAccepted) 136 }) 137 } 138 139 var deleteRequest = `{ 140 "force_delete": null 141 } 142 ` 143 144 func MockForceDeleteResponse(t *testing.T) { 145 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID+"/action", func(w http.ResponseWriter, r *http.Request) { 146 th.TestMethod(t, r, "POST") 147 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 148 th.TestHeader(t, r, "Content-Type", "application/json") 149 th.TestHeader(t, r, "Accept", "application/json") 150 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 151 th.TestJSONRequest(t, r, deleteRequest) 152 w.WriteHeader(http.StatusAccepted) 153 }) 154 } 155 156 var getResponse = `{ 157 "share_replica": { 158 "id": "3b9c33e8-b136-45c6-84a6-019c8db1d550", 159 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 160 "availability_zone": "zone-1", 161 "created_at": "2023-05-26T12:32:56.391337", 162 "status": "available", 163 "share_network_id": "ca0163c8-3941-4420-8b01-41517e19e366", 164 "share_server_id": "5ccc1b0c-334a-4e46-81e6-b52e03223060", 165 "replica_state": "active", 166 "updated_at": "2023-05-26T12:33:28.265716" 167 } 168 } 169 ` 170 171 // MockGetResponse creates a mock get response 172 func MockGetResponse(t *testing.T) { 173 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID, func(w http.ResponseWriter, r *http.Request) { 174 th.TestMethod(t, r, "GET") 175 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 176 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 177 w.WriteHeader(http.StatusOK) 178 fmt.Fprintf(w, getResponse) 179 }) 180 } 181 182 var listResponse = `{ 183 "share_replicas": [ 184 { 185 "id": "3b9c33e8-b136-45c6-84a6-019c8db1d550", 186 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 187 "status": "available", 188 "replica_state": "active" 189 }, 190 { 191 "id": "4b70c2e2-eec7-4699-880d-4da9051ca162", 192 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 193 "status": "available", 194 "replica_state": "out_of_sync" 195 }, 196 { 197 "id": "920bb037-bdd7-48a1-98f0-1aa1787ca3eb", 198 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 199 "status": "available", 200 "replica_state": "in_sync" 201 } 202 ] 203 } 204 ` 205 206 var listEmptyResponse = `{"share_replicas": []}` 207 208 // MockListResponse creates a mock detailed-list response 209 func MockListResponse(t *testing.T) { 210 th.Mux.HandleFunc(shareEndpoint, func(w http.ResponseWriter, r *http.Request) { 211 th.TestMethod(t, r, "GET") 212 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 213 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 214 215 w.Header().Add("Content-Type", "application/json") 216 w.WriteHeader(http.StatusOK) 217 218 r.ParseForm() 219 marker := r.Form.Get("offset") 220 shareID := r.Form.Get("share_id") 221 if shareID != "65a34695-f9e5-4eea-b48d-a0b261d82943" { 222 th.AssertNoErr(t, fmt.Errorf("unexpected share_id")) 223 } 224 225 switch marker { 226 case "": 227 fmt.Fprint(w, listResponse) 228 default: 229 fmt.Fprint(w, listEmptyResponse) 230 } 231 }) 232 } 233 234 var listDetailResponse = `{ 235 "share_replicas": [ 236 { 237 "id": "3b9c33e8-b136-45c6-84a6-019c8db1d550", 238 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 239 "availability_zone": "zone-1", 240 "created_at": "2023-05-26T12:32:56.391337", 241 "status": "available", 242 "share_network_id": "ca0163c8-3941-4420-8b01-41517e19e366", 243 "share_server_id": "5ccc1b0c-334a-4e46-81e6-b52e03223060", 244 "replica_state": "active", 245 "updated_at": "2023-05-26T12:33:28.265716" 246 }, 247 { 248 "id": "4b70c2e2-eec7-4699-880d-4da9051ca162", 249 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 250 "availability_zone": "zone-2", 251 "created_at": "2023-05-26T11:59:38.313089", 252 "status": "available", 253 "share_network_id": "ca0163c8-3941-4420-8b01-41517e19e366", 254 "share_server_id": "81aa586e-3a03-4f92-98bd-807d87a61c1a", 255 "replica_state": "out_of_sync", 256 "updated_at": "2023-05-26T12:00:04.321081" 257 }, 258 { 259 "id": "920bb037-bdd7-48a1-98f0-1aa1787ca3eb", 260 "share_id": "65a34695-f9e5-4eea-b48d-a0b261d82943", 261 "availability_zone": "zone-1", 262 "created_at": "2023-05-26T12:32:45.751834", 263 "status": "available", 264 "share_network_id": "ca0163c8-3941-4420-8b01-41517e19e366", 265 "share_server_id": "b87ea601-7d4c-47f3-8956-6876b7a6b6db", 266 "replica_state": "in_sync", 267 "updated_at": "2023-05-26T12:36:04.110328" 268 } 269 ] 270 } 271 ` 272 273 var listDetailEmptyResponse = `{"share_replicas": []}` 274 275 // MockListDetailResponse creates a mock detailed-list response 276 func MockListDetailResponse(t *testing.T) { 277 th.Mux.HandleFunc(shareEndpoint+"/detail", func(w http.ResponseWriter, r *http.Request) { 278 th.TestMethod(t, r, "GET") 279 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 280 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.11") 281 282 w.Header().Add("Content-Type", "application/json") 283 w.WriteHeader(http.StatusOK) 284 285 r.ParseForm() 286 marker := r.Form.Get("offset") 287 shareID := r.Form.Get("share_id") 288 if shareID != "65a34695-f9e5-4eea-b48d-a0b261d82943" { 289 th.AssertNoErr(t, fmt.Errorf("unexpected share_id")) 290 } 291 292 switch marker { 293 case "": 294 fmt.Fprint(w, listDetailResponse) 295 default: 296 fmt.Fprint(w, listDetailEmptyResponse) 297 } 298 }) 299 } 300 301 var listExportLocationsResponse = `{ 302 "export_locations": [ 303 { 304 "id": "3fc02d3c-da47-42a2-88b8-2d48f8c276bd", 305 "path": "192.168.1.123:/var/lib/manila/mnt/share-3b9c33e8-b136-45c6-84a6-019c8db1d550", 306 "preferred": true, 307 "replica_state": "active", 308 "availability_zone": "zone-1" 309 }, 310 { 311 "id": "ae73e762-e8b9-4aad-aad3-23afb7cd6825", 312 "path": "192.168.1.124:/var/lib/manila/mnt/share-3b9c33e8-b136-45c6-84a6-019c8db1d550", 313 "preferred": false, 314 "replica_state": "active", 315 "availability_zone": "zone-1" 316 } 317 ] 318 } 319 ` 320 321 // MockListExportLocationsResponse creates a mock get export locations response 322 func MockListExportLocationsResponse(t *testing.T) { 323 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID+"/export-locations", func(w http.ResponseWriter, r *http.Request) { 324 th.TestMethod(t, r, "GET") 325 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 326 w.Header().Add("Content-Type", "application/json") 327 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.47") 328 w.WriteHeader(http.StatusOK) 329 fmt.Fprintf(w, listExportLocationsResponse) 330 }) 331 } 332 333 var getExportLocationResponse = `{ 334 "export_location": { 335 "id": "ae73e762-e8b9-4aad-aad3-23afb7cd6825", 336 "path": "192.168.1.124:/var/lib/manila/mnt/share-3b9c33e8-b136-45c6-84a6-019c8db1d550", 337 "preferred": false, 338 "created_at": "2023-05-26T12:44:33.987960", 339 "updated_at": "2023-05-26T12:44:33.958363", 340 "replica_state": "active", 341 "availability_zone": "zone-1" 342 } 343 } 344 ` 345 346 // MockGetExportLocationResponse creates a mock get export location response 347 func MockGetExportLocationResponse(t *testing.T) { 348 th.Mux.HandleFunc(shareEndpoint+"/"+replicaID+"/export-locations/ae73e762-e8b9-4aad-aad3-23afb7cd6825", func(w http.ResponseWriter, r *http.Request) { 349 th.TestMethod(t, r, "GET") 350 th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) 351 w.Header().Add("Content-Type", "application/json") 352 th.TestHeader(t, r, "X-OpenStack-Manila-API-Version", "2.47") 353 w.WriteHeader(http.StatusOK) 354 fmt.Fprintf(w, getExportLocationResponse) 355 }) 356 }