blob: 2fc7278bf16fa04d491617091a8a78bc24b0c6ed [file] [log] [blame]
package testing
import (
"fmt"
"net/http"
"testing"
"time"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/baremetal/v1/ports"
th "gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper/client"
)
// PortListBody contains the canned body of a ports.List response, without detail.
const PortListBody = `
{
"ports": [
{
"uuid": "3abe3f36-9708-4e9f-b07e-0f898061d3a7",
"links": [
{
"href": "http://192.168.0.8/baremetal/v1/ports/3abe3f36-9708-4e9f-b07e-0f898061d3a7",
"rel": "self"
},
{
"href": "http://192.168.0.8/baremetal/ports/3abe3f36-9708-4e9f-b07e-0f898061d3a7",
"rel": "bookmark"
}
],
"address": "52:54:00:0a:af:d1"
},
{
"uuid": "f2845e11-dbd4-4728-a8c0-30d19f48924a",
"links": [
{
"href": "http://192.168.0.8/baremetal/v1/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a",
"rel": "self"
},
{
"href": "http://192.168.0.8/baremetal/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a",
"rel": "bookmark"
}
],
"address": "52:54:00:4d:87:e6"
}
]
}
`
// PortListDetailBody contains the canned body of a port.ListDetail response.
const PortListDetailBody = `
{
"ports": [
{
"local_link_connection": {},
"node_uuid": "ddd06a60-b91e-4ab4-a6e7-56c0b25b6086",
"uuid": "3abe3f36-9708-4e9f-b07e-0f898061d3a7",
"links": [
{
"href": "http://192.168.0.8/baremetal/v1/ports/3abe3f36-9708-4e9f-b07e-0f898061d3a7",
"rel": "self"
},
{
"href": "http://192.168.0.8/baremetal/ports/3abe3f36-9708-4e9f-b07e-0f898061d3a7",
"rel": "bookmark"
}
],
"extra": {},
"pxe_enabled": true,
"portgroup_uuid": null,
"updated_at": "2019-02-15T09:55:19+00:00",
"physical_network": null,
"address": "52:54:00:0a:af:d1",
"internal_info": {
},
"created_at": "2019-02-15T09:52:23+00:00"
},
{
"local_link_connection": {},
"node_uuid": "ddd06a60-b91e-4ab4-a6e7-56c0b25b6086",
"uuid": "f2845e11-dbd4-4728-a8c0-30d19f48924a",
"links": [
{
"href": "http://192.168.0.8/baremetal/v1/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a",
"rel": "self"
},
{
"href": "http://192.168.0.8/baremetal/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a",
"rel": "bookmark"
}
],
"extra": {},
"pxe_enabled": true,
"portgroup_uuid": null,
"updated_at": "2019-02-15T09:55:19+00:00",
"physical_network": null,
"address": "52:54:00:4d:87:e6",
"internal_info": {},
"created_at": "2019-02-15T09:52:24+00:00"
}
]
}
`
// SinglePortBody is the canned body of a Get request on an existing port.
const SinglePortBody = `
{
"local_link_connection": {
},
"node_uuid": "ddd06a60-b91e-4ab4-a6e7-56c0b25b6086",
"uuid": "f2845e11-dbd4-4728-a8c0-30d19f48924a",
"links": [
{
"href": "http://192.168.0.8/baremetal/v1/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a",
"rel": "self"
},
{
"href": "http://192.168.0.8/baremetal/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a",
"rel": "bookmark"
}
],
"extra": {
},
"pxe_enabled": true,
"portgroup_uuid": null,
"updated_at": "2019-02-15T09:55:19+00:00",
"physical_network": null,
"address": "52:54:00:4d:87:e6",
"internal_info": {
},
"created_at": "2019-02-15T09:52:24+00:00"
}
`
var (
fooCreated, _ = time.Parse(time.RFC3339, "2019-02-15T09:52:24+00:00")
fooUpdated, _ = time.Parse(time.RFC3339, "2019-02-15T09:55:19+00:00")
BarCreated, _ = time.Parse(time.RFC3339, "2019-02-15T09:52:23+00:00")
BarUpdated, _ = time.Parse(time.RFC3339, "2019-02-15T09:55:19+00:00")
PortFoo = ports.Port{
UUID: "f2845e11-dbd4-4728-a8c0-30d19f48924a",
NodeUUID: "ddd06a60-b91e-4ab4-a6e7-56c0b25b6086",
Address: "52:54:00:4d:87:e6",
PXEEnabled: true,
LocalLinkConnection: map[string]interface{}{},
InternalInfo: map[string]interface{}{},
Extra: map[string]interface{}{},
CreatedAt: fooCreated,
UpdatedAt: fooUpdated,
Links: []interface{}{map[string]interface{}{"href": "http://192.168.0.8/baremetal/v1/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a", "rel": "self"}, map[string]interface{}{"href": "http://192.168.0.8/baremetal/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a", "rel": "bookmark"}},
}
PortBar = ports.Port{
UUID: "3abe3f36-9708-4e9f-b07e-0f898061d3a7",
NodeUUID: "ddd06a60-b91e-4ab4-a6e7-56c0b25b6086",
Address: "52:54:00:0a:af:d1",
PXEEnabled: true,
LocalLinkConnection: map[string]interface{}{},
InternalInfo: map[string]interface{}{},
Extra: map[string]interface{}{},
CreatedAt: BarCreated,
UpdatedAt: BarUpdated,
Links: []interface{}{map[string]interface{}{"href": "http://192.168.0.8/baremetal/v1/ports/3abe3f36-9708-4e9f-b07e-0f898061d3a7", "rel": "self"}, map[string]interface{}{"rel": "bookmark", "href": "http://192.168.0.8/baremetal/ports/3abe3f36-9708-4e9f-b07e-0f898061d3a7"}},
}
)
// HandlePortListSuccessfully sets up the test server to respond to a port List request.
func HandlePortListSuccessfully(t *testing.T) {
th.Mux.HandleFunc("/ports", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
w.Header().Add("Content-Type", "application/json")
r.ParseForm()
marker := r.Form.Get("marker")
switch marker {
case "":
fmt.Fprintf(w, PortListBody)
case "f2845e11-dbd4-4728-a8c0-30d19f48924a":
fmt.Fprintf(w, `{ "ports": [] }`)
default:
t.Fatalf("/ports invoked with unexpected marker=[%s]", marker)
}
})
}
// HandlePortListSuccessfully sets up the test server to respond to a port List request.
func HandlePortListDetailSuccessfully(t *testing.T) {
th.Mux.HandleFunc("/ports/detail", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
w.Header().Add("Content-Type", "application/json")
r.ParseForm()
fmt.Fprintf(w, PortListDetailBody)
})
}
// HandleSPortCreationSuccessfully sets up the test server to respond to a port creation request
// with a given response.
func HandlePortCreationSuccessfully(t *testing.T, response string) {
th.Mux.HandleFunc("/ports", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "POST")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
th.TestJSONRequest(t, r, `{
"node_uuid": "ddd06a60-b91e-4ab4-a6e7-56c0b25b6086",
"address": "52:54:00:4d:87:e6",
"pxe_enabled": true
}`)
w.WriteHeader(http.StatusAccepted)
w.Header().Add("Content-Type", "application/json")
fmt.Fprintf(w, response)
})
}
// HandlePortDeletionSuccessfully sets up the test server to respond to a port deletion request.
func HandlePortDeletionSuccessfully(t *testing.T) {
th.Mux.HandleFunc("/ports/3abe3f36-9708-4e9f-b07e-0f898061d3a7", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "DELETE")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
w.WriteHeader(http.StatusNoContent)
})
}
func HandlePortGetSuccessfully(t *testing.T) {
th.Mux.HandleFunc("/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
th.TestHeader(t, r, "Accept", "application/json")
fmt.Fprintf(w, SinglePortBody)
})
}
func HandlePortUpdateSuccessfully(t *testing.T, response string) {
th.Mux.HandleFunc("/ports/f2845e11-dbd4-4728-a8c0-30d19f48924a", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "PATCH")
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
th.TestHeader(t, r, "Accept", "application/json")
th.TestHeader(t, r, "Content-Type", "application/json")
th.TestJSONRequest(t, r, `[{"op": "replace", "path": "/address", "value": "22:22:22:22:22:22"}]`)
fmt.Fprintf(w, response)
})
}