blob: cc7573af646f9f8476008c3ad6d0b234bdbc9e0d [file] [log] [blame]
Michal Kobusf6113582019-09-09 15:58:21 +02001package testing
2
3import (
4 "fmt"
5 "net/http"
6 "testing"
7 "time"
8
9 "gerrit.mcp.mirantis.net/debian/gophercloud.git/openstack/baremetal/v1/allocations"
10 th "gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper"
11 "gerrit.mcp.mirantis.net/debian/gophercloud.git/testhelper/client"
12)
13
14const AllocationListBody = `
15{
16 "allocations": [
17 {
18 "candidate_nodes": [],
19 "created_at": "2019-02-20T09:43:58+00:00",
20 "extra": {},
21 "last_error": null,
22 "links": [
23 {
24 "href": "http://127.0.0.1:6385/v1/allocations/5344a3e2-978a-444e-990a-cbf47c62ef88",
25 "rel": "self"
26 },
27 {
28 "href": "http://127.0.0.1:6385/allocations/5344a3e2-978a-444e-990a-cbf47c62ef88",
29 "rel": "bookmark"
30 }
31 ],
32 "name": "allocation-1",
33 "node_uuid": "6d85703a-565d-469a-96ce-30b6de53079d",
34 "resource_class": "bm-large",
35 "state": "active",
36 "traits": [],
37 "updated_at": "2019-02-20T09:43:58+00:00",
38 "uuid": "5344a3e2-978a-444e-990a-cbf47c62ef88"
39 },
40 {
41 "candidate_nodes": [],
42 "created_at": "2019-02-20T09:43:58+00:00",
43 "extra": {},
44 "last_error": "Failed to process allocation eff80f47-75f0-4d41-b1aa-cf07c201adac: no available nodes match the resource class bm-large.",
45 "links": [
46 {
47 "href": "http://127.0.0.1:6385/v1/allocations/eff80f47-75f0-4d41-b1aa-cf07c201adac",
48 "rel": "self"
49 },
50 {
51 "href": "http://127.0.0.1:6385/allocations/eff80f47-75f0-4d41-b1aa-cf07c201adac",
52 "rel": "bookmark"
53 }
54 ],
55 "name": "allocation-2",
56 "node_uuid": null,
57 "resource_class": "bm-large",
58 "state": "error",
59 "traits": [
60 "CUSTOM_GOLD"
61 ],
62 "updated_at": "2019-02-20T09:43:58+00:00",
63 "uuid": "eff80f47-75f0-4d41-b1aa-cf07c201adac"
64 }
65 ]
66}
67`
68
69const SingleAllocationBody = `
70{
71 "candidate_nodes": ["344a3e2-978a-444e-990a-cbf47c62ef88"],
72 "created_at": "2019-02-20T09:43:58+00:00",
73 "extra": {},
74 "last_error": null,
75 "links": [
76 {
77 "href": "http://127.0.0.1:6385/v1/allocations/5344a3e2-978a-444e-990a-cbf47c62ef88",
78 "rel": "self"
79 },
80 {
81 "href": "http://127.0.0.1:6385/allocations/5344a3e2-978a-444e-990a-cbf47c62ef88",
82 "rel": "bookmark"
83 }
84 ],
85 "name": "allocation-1",
86 "node_uuid": null,
87 "resource_class": "baremetal",
88 "state": "allocating",
89 "traits": ["foo"],
90 "updated_at": null,
91 "uuid": "5344a3e2-978a-444e-990a-cbf47c62ef88"
92}`
93
94var (
95 createdAt, _ = time.Parse(time.RFC3339, "2019-02-20T09:43:58+00:00")
96
97 Allocation1 = allocations.Allocation{
98 UUID: "5344a3e2-978a-444e-990a-cbf47c62ef88",
99 CandidateNodes: []string{"344a3e2-978a-444e-990a-cbf47c62ef88"},
100 Name: "allocation-1",
101 State: "allocating",
102 ResourceClass: "baremetal",
103 Traits: []string{"foo"},
104 Extra: map[string]string{},
105 CreatedAt: createdAt,
106 Links: []interface{}{map[string]interface{}{"href": "http://127.0.0.1:6385/v1/allocations/5344a3e2-978a-444e-990a-cbf47c62ef88", "rel": "self"}, map[string]interface{}{"href": "http://127.0.0.1:6385/allocations/5344a3e2-978a-444e-990a-cbf47c62ef88", "rel": "bookmark"}},
107 }
108)
109
110// HandleAllocationListSuccessfully sets up the test server to respond to a allocation List request.
111func HandleAllocationListSuccessfully(t *testing.T) {
112 th.Mux.HandleFunc("/allocations", func(w http.ResponseWriter, r *http.Request) {
113 th.TestMethod(t, r, "GET")
114 th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
115 w.Header().Add("Content-Type", "application/json")
116 r.ParseForm()
117
118 marker := r.Form.Get("marker")
119 switch marker {
120 case "":
121 fmt.Fprintf(w, AllocationListBody)
122
123 case "eff80f47-75f0-4d41-b1aa-cf07c201adac":
124 fmt.Fprintf(w, `{ "allocations": [] }`)
125 default:
126 t.Fatalf("/allocations invoked with unexpected marker=[%s]", marker)
127 }
128 })
129}
130
131// HandleAllocationCreationSuccessfully sets up the test server to respond to a allocation creation request
132// with a given response.
133func HandleAllocationCreationSuccessfully(t *testing.T, response string) {
134 th.Mux.HandleFunc("/allocations", func(w http.ResponseWriter, r *http.Request) {
135 th.TestMethod(t, r, "POST")
136 th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
137 th.TestJSONRequest(t, r, `{
138 "name": "allocation-1",
139 "resource_class": "baremetal",
140 "candidate_nodes": ["344a3e2-978a-444e-990a-cbf47c62ef88"],
141 "traits": ["foo"]
142 }`)
143
144 w.WriteHeader(http.StatusAccepted)
145 w.Header().Add("Content-Type", "application/json")
146 fmt.Fprintf(w, response)
147 })
148}
149
150// HandleAllocationDeletionSuccessfully sets up the test server to respond to a allocation deletion request.
151func HandleAllocationDeletionSuccessfully(t *testing.T) {
152 th.Mux.HandleFunc("/allocations/344a3e2-978a-444e-990a-cbf47c62ef88", func(w http.ResponseWriter, r *http.Request) {
153 th.TestMethod(t, r, "DELETE")
154 th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
155
156 w.WriteHeader(http.StatusNoContent)
157 })
158}
159
160func HandleAllocationGetSuccessfully(t *testing.T) {
161 th.Mux.HandleFunc("/allocations/344a3e2-978a-444e-990a-cbf47c62ef88", func(w http.ResponseWriter, r *http.Request) {
162 th.TestMethod(t, r, "GET")
163 th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
164 th.TestHeader(t, r, "Accept", "application/json")
165
166 fmt.Fprintf(w, SingleAllocationBody)
167 })
168}