CSIT for NST selection enhancements
[integration/csit.git] / tests / optf-has / has / optf_has_test.robot
1 *** Settings ***
2 Library       OperatingSystem
3 Library       RequestsLibrary
4 Library       json
5
6 *** Variables ***
7 ${MESSAGE}    {"ping": "ok"}
8 ${BASIC}    Basic
9 ${Music_AUTHVALUE}    Y29uZHVjdG9yOmMwbmR1Y3Qwcg==
10 ${HAS_AUTHVALUE}    YWRtaW4xOnBsYW4uMTU=
11 ${Music_Auth}    ${BASIC} ${Music_AUTHVALUE}
12 ${HAS_Auth}    ${BASIC} ${HAS_AUTHVALUE}
13 ${RESP_STATUS}     "error"
14 ${RESP_MESSAGE_WRONG_VERSION}    "conductor_template_version must be one of: 2016-11-01"
15 ${RESP_MESSAGE_WITHOUT_DEMANDS}    Undefined Demand
16
17 #global variables
18 ${generatedPlanId}
19 ${generatedAID}
20 ${resultStatus}
21
22 *** Test Cases ***
23 Check Cassandra Docker Container
24     [Documentation]    It checks cassandra docker container is running
25     ${rc}    ${output}=    Run and Return RC and Output    docker ps
26     Log To Console              *********************
27     Log To Console              retrurn_code = ${rc}
28     Log To Console              output = ${output}
29     Should Be Equal As Integers    ${rc}    0
30     Should Contain    ${output}    music-db
31
32 Check Zookeeper Docker Container
33     [Documentation]    It checks zookeeper docker container is running
34     ${rc}    ${output}=    Run and Return RC and Output    docker ps
35     Log To Console              *********************
36     Log To Console              retrurn_code = ${rc}
37     Log To Console              output = ${output}
38     Should Be Equal As Integers    ${rc}    0
39     Should Contain    ${output}    music-zk
40
41 Check Tomcat Docker Container
42     [Documentation]    It checks tomcat docker container is running
43     ${rc}    ${output}=    Run and Return RC and Output    docker ps
44     Log To Console              *********************
45     Log To Console              retrurn_code = ${rc}
46     Log To Console              output = ${output}
47     Should Be Equal As Integers    ${rc}    0
48     Should Contain    ${output}    music-tomcat
49
50 Check Music War Docker Container
51     [Documentation]    It checks music.war docker container is running
52     ${rc}    ${output}=    Run and Return RC and Output    docker ps
53     Log To Console              *********************
54     Log To Console              retrurn_code = ${rc}
55     Log To Console              output = ${output}
56     Should Be Equal As Integers    ${rc}    0
57     Should Contain    ${output}    music-war
58
59 Get Music Version
60     [Documentation]    It sends a REST GET request to retrieve the Music.war version
61     Create Session   musicaas            ${MUSIC_HOSTNAME}:${MUSIC_PORT}
62     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
63     ${resp}=         Get Request        musicaas   /MUSIC/rest/v2/version     headers=${headers}
64     Log To Console              *********************
65     Log To Console              response = ${resp}
66     Log To Console              body = ${resp.text}
67     Should Be Equal As Integers    ${resp.status_code}    200
68
69 Check ConductorApi Docker Container
70     [Documentation]    It checks conductor-api docker container is running
71     ${rc}    ${output}=    Run and Return RC and Output    docker ps
72     Log To Console              *********************
73     Log To Console              retrurn_code = ${rc}
74     Log To Console              output = ${output}
75     Should Be Equal As Integers    ${rc}    0
76     Should Contain    ${output}    cond-api
77
78 Check ConductorController Docker Container
79     [Documentation]    It checks conductor-controller docker container is running
80     ${rc}    ${output}=    Run and Return RC and Output    docker ps
81     Log To Console              *********************
82     Log To Console              retrurn_code = ${rc}
83     Log To Console              output = ${output}
84     Should Be Equal As Integers    ${rc}    0
85     Should Contain    ${output}    cond-cont
86
87 Check ConductorSolver Docker Container
88     [Documentation]    It checks conductor-solver docker container is running
89     ${rc}    ${output}=    Run and Return RC and Output    docker ps
90     Log To Console              *********************
91     Log To Console              retrurn_code = ${rc}
92     Log To Console              output = ${output}
93     Should Be Equal As Integers    ${rc}    0
94     Should Contain    ${output}    cond-solv
95
96 Check ConductorReservation Docker Container
97     [Documentation]    It checks conductor-reservation docker container is running
98     ${rc}    ${output}=    Run and Return RC and Output    docker ps
99     Log To Console              *********************
100     Log To Console              retrurn_code = ${rc}
101     Log To Console              output = ${output}
102     Should Be Equal As Integers    ${rc}    0
103     Should Contain    ${output}    cond-resv
104
105 Check ConductorData Docker Container
106     [Documentation]    It checks conductor-data docker container is running
107     ${rc}    ${output}=    Run and Return RC and Output    docker ps
108     Log To Console              *********************
109     Log To Console              retrurn_code = ${rc}
110     Log To Console              output = ${output}
111     Should Be Equal As Integers    ${rc}    0
112     Should Contain    ${output}    cond-data
113
114 Get Root Url
115     [Documentation]    It sends a REST GET request to root url
116     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
117     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
118     ${resp}=         Get Request        optf-cond   /     headers=${headers}
119     Log To Console              *********************
120     Log To Console              response = ${resp}
121     Log To Console              body = ${resp.text}
122     Should Be Equal As Integers    ${resp.status_code}    200
123     Sleep    10s    Wait For 10 seconds
124
125 Conductor AddHealthcheck Row Into Music
126     [Documentation]    It sends a REST PUT request to Music to inject healthcheck plan
127     Create Session   musicaas            ${MUSIC_HOSTNAME}:${MUSIC_PORT}
128     ${data}=         Get Binary File     ${CURDIR}${/}data${/}healthcheck.json
129     &{headers}=      Create Dictionary    ns=conductor    Authorization=${Music_Auth}    userId=conductor    password=c0nduct0r   Content-Type=application/json  Accept=application/json
130     ${resp}=         Put Request        musicaas   /MUSIC/rest/v2/keyspaces/conductor/tables/plans/rows?id=healthcheck    data=${data}    headers=${headers}
131     Log To Console              *********************
132     Log To Console              response = ${resp}
133     Log To Console              body = ${resp.text}
134     ${response_json}    json.loads    ${resp.content}
135     Should Be Equal As Integers    ${resp.status_code}    200
136     Sleep    5s    Wait Injection effectiveness
137
138 Healthcheck
139     [Documentation]    It sends a REST GET request to healthcheck url
140     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
141     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
142     ${resp}=         Get Request        optf-cond   /v1/plans/healthcheck     headers=${headers}
143     Log To Console              *********************
144     Log To Console              response = ${resp}
145     Log To Console              body = ${resp.text}
146     Should Be Equal As Integers    ${resp.status_code}    200
147
148 SendPlanWithWrongVersion
149     [Documentation]    It sends a POST request to conductor
150     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
151     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_wrong_version.json
152     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
153     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
154     Log To Console              *********************
155     Log To Console              response = ${resp}
156     Log To Console              body = ${resp.text}
157     ${response_json}    json.loads    ${resp.content}
158     ${generatedPlanId}=    Convert To String      ${response_json['id']}
159     Set Global Variable     ${generatedPlanId}
160     Log To Console              generatedPlanId = ${generatedPlanId}
161     Should Be Equal As Integers    ${resp.status_code}    201
162     Sleep    10s    Wait Plan Resolution
163
164 GetPlanWithWrongVersion
165     [Documentation]    It sends a REST GET request to capture error
166     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
167     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
168     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
169     Log To Console              *********************
170     Log To Console              response = ${resp}
171     ${response_json}    json.loads    ${resp.content}
172     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
173     Set Global Variable     ${resultStatus}
174     Log To Console              resultStatus = ${resultStatus}
175     Log To Console              body = ${resp.text}
176     Should Be Equal As Integers    ${resp.status_code}    200
177     Should Be Equal    error    ${resultStatus}
178
179 SendPlanWithoutDemandSection
180     [Documentation]    It sends a POST request to conductor
181     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
182     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_without_demand_section.json
183     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
184     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
185     Log To Console              *********************
186     Log To Console              response = ${resp}
187     Log To Console              body = ${resp.text}
188     ${response_json}    json.loads    ${resp.content}
189     ${generatedPlanId}=    Convert To String      ${response_json['id']}
190     Set Global Variable     ${generatedPlanId}
191     Log To Console              generatedPlanId = ${generatedPlanId}
192     Should Be Equal As Integers    ${resp.status_code}    201
193     Sleep    10s    Wait Plan Resolution
194
195 GetPlanWithoutDemandSection
196     [Documentation]    It sends a REST GET request to capture error
197     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
198     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
199     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
200     Log To Console              *********************
201     Log To Console              response = ${resp}
202     ${response_json}    json.loads    ${resp.content}
203     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
204     Set Global Variable     ${resultStatus}
205     Log To Console              resultStatus = ${resultStatus}
206     Log To Console              body = ${resp.text}
207     Should Be Equal As Integers    ${resp.status_code}    200
208     Should Be Equal    error    ${resultStatus}
209
210 SendPlanWithWrongConstraint
211     [Documentation]    It sends a POST request to conductor
212     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
213     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_wrong_distance_constraint.json
214     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
215     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
216     Log To Console              *********************
217     Log To Console              response = ${resp}
218     Log To Console              body = ${resp.text}
219     ${response_json}    json.loads    ${resp.content}
220     ${generatedPlanId}=    Convert To String      ${response_json['id']}
221     Set Global Variable     ${generatedPlanId}
222     Log To Console              generatedPlanId = ${generatedPlanId}
223     Should Be Equal As Integers    ${resp.status_code}    201
224     Sleep    10s    Wait Plan Resolution
225
226 GetPlanWithWrongConstraint
227     [Documentation]    It sends a REST GET request to capture error
228     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
229     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
230     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
231     Log To Console              *********************
232     Log To Console              response = ${resp}
233     ${response_json}    json.loads    ${resp.content}
234     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
235     Set Global Variable     ${resultStatus}
236     Log To Console              resultStatus = ${resultStatus}
237     Log To Console              body = ${resp.text}
238     Should Be Equal As Integers    ${resp.status_code}    200
239     Should Be Equal    error    ${resultStatus}
240
241
242 SendPlanWithLatiAndLongi
243     [Documentation]    It sends a POST request to conductor
244     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
245     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_lati_and_longi.json
246     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
247     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
248     Log To Console              *********************
249     Log To Console              response = ${resp}
250     Log To Console              body = ${resp.text}
251     ${response_json}    json.loads    ${resp.content}
252     ${generatedPlanId}=    Convert To String      ${response_json['id']}
253     Set Global Variable     ${generatedPlanId}
254     Log To Console              generatedPlanId = ${generatedPlanId}
255     Should Be Equal As Integers    ${resp.status_code}    201
256     Sleep    60s    Wait Plan Resolution
257
258 GetPlanWithLatiAndLongi
259     [Documentation]    It sends a REST GET request to capture recommendations
260     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
261     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
262     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
263     Log To Console              *********************
264     Log To Console              response = ${resp}
265     ${response_json}    json.loads    ${resp.content}
266     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
267     Set Global Variable     ${resultStatus}
268     Log To Console              resultStatus = ${resultStatus}
269     Log To Console              body = ${resp.text}
270     Should Be Equal As Integers    ${resp.status_code}    200
271     Should Be Equal    done    ${resultStatus}
272
273 SendPlanWithShortDistanceConstraint
274     [Documentation]    It sends a POST request to conductor
275     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
276     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_short_distance_constraint.json
277     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
278     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
279     Log To Console              *********************
280     Log To Console              response = ${resp}
281     Log To Console              body = ${resp.text}
282     ${response_json}    json.loads    ${resp.content}
283     ${generatedPlanId}=    Convert To String      ${response_json['id']}
284     Set Global Variable     ${generatedPlanId}
285     Log To Console              generatedPlanId = ${generatedPlanId}
286     Should Be Equal As Integers    ${resp.status_code}    201
287     Sleep    60s    Wait Plan Resolution
288
289 GetPlanWithShortDistanceConstraint
290     [Documentation]    It sends a REST GET request to capture recommendations
291     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
292     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
293     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
294     Log To Console              *********************
295     Log To Console              response = ${resp}
296     ${response_json}    json.loads    ${resp.content}
297     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
298     Set Global Variable     ${resultStatus}
299     Log To Console              resultStatus = ${resultStatus}
300     Log To Console              body = ${resp.text}
301     Should Be Equal As Integers    ${resp.status_code}    200
302     Should Be Equal    not found    ${resultStatus}
303
304 SendPlanWithVimFit
305     [Documentation]    It sends a POST request to conductor
306     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
307     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_vim_fit.json
308     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
309     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
310     Log To Console              *********************
311     Log To Console              response = ${resp}
312     Log To Console              body = ${resp.text}
313     ${response_json}    json.loads    ${resp.content}
314     ${generatedPlanId}=    Convert To String      ${response_json['id']}
315     Set Global Variable     ${generatedPlanId}
316     Log To Console              generatedPlanId = ${generatedPlanId}
317     Should Be Equal As Integers    ${resp.status_code}    201
318     Sleep    60s    Wait Plan Resolution
319
320 GetPlanWithVimFit
321     [Documentation]    It sends a REST GET request to capture recommendations
322     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
323     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
324     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
325     Log To Console              *********************
326     Log To Console              response = ${resp}
327     ${response_json}    json.loads    ${resp.content}
328     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
329     Set Global Variable     ${resultStatus}
330     Log To Console              resultStatus = ${resultStatus}
331     Log To Console              body = ${resp.text}
332     Should Be Equal As Integers    ${resp.status_code}    200
333     Should Be Equal    done    ${resultStatus}
334
335 SendPlanWithHpa
336     [Documentation]    It sends a POST request to conductor
337     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
338     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa.json
339     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
340     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
341     Log To Console              *********************
342     Log To Console              response = ${resp}
343     Log To Console              body = ${resp.text}
344     ${response_json}    json.loads    ${resp.content}
345     ${generatedPlanId}=    Convert To String      ${response_json['id']}
346     Set Global Variable     ${generatedPlanId}
347     Log To Console              generatedPlanId = ${generatedPlanId}
348     Should Be Equal As Integers    ${resp.status_code}    201
349     Sleep    60s    Wait Plan Resolution
350
351 GetPlanWithHpa
352     [Documentation]    It sends a REST GET request to capture recommendations
353     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
354     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
355     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
356     Log To Console              *********************
357     Log To Console              response = ${resp}
358     ${response_json}    json.loads    ${resp.content}
359     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
360     Set Global Variable     ${resultStatus}
361     Log To Console              resultStatus = ${resultStatus}
362     Log To Console              body = ${resp.text}
363     Should Be Equal As Integers    ${resp.status_code}    200
364     Should Be Equal    done    ${resultStatus}
365
366 SendPlanWithHpaSimple
367     [Documentation]    It sends a POST request to conductor
368     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
369     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_simple.json
370     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
371     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
372     Log To Console              *********************
373     Log To Console              response = ${resp}
374     Log To Console              body = ${resp.text}
375     ${response_json}    json.loads    ${resp.content}
376     ${generatedPlanId}=    Convert To String      ${response_json['id']}
377     Set Global Variable     ${generatedPlanId}
378     Log To Console              generatedPlanId = ${generatedPlanId}
379     Should Be Equal As Integers    ${resp.status_code}    201
380     Sleep    60s    Wait Plan Resolution
381
382 GetPlanWithHpaSimple
383     [Documentation]    It sends a REST GET request to capture recommendations
384     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
385     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
386     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
387     Log To Console              *********************
388     Log To Console              response = ${resp}
389     ${response_json}    json.loads    ${resp.content}
390     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
391     Set Global Variable     ${resultStatus}
392     Log To Console              resultStatus = ${resultStatus}
393     Log To Console              body = ${resp.text}
394     Should Be Equal As Integers    ${resp.status_code}    200
395     Should Be Equal    done    ${resultStatus}
396
397 SendPlanWithHpaMandatory
398     [Documentation]    It sends a POST request to conductor
399     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
400     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_requirements_mandatory.json
401     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
402     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
403     Log To Console              *********************
404     Log To Console              response = ${resp}
405     Log To Console              body = ${resp.text}
406     ${response_json}    json.loads    ${resp.content}
407     ${generatedPlanId}=    Convert To String      ${response_json['id']}
408     Set Global Variable     ${generatedPlanId}
409     Log To Console              generatedPlanId = ${generatedPlanId}
410     Should Be Equal As Integers    ${resp.status_code}    201
411     Sleep    60s    Wait Plan Resolution
412
413 GetPlanWithHpaMandatory
414     [Documentation]    It sends a REST GET request to capture recommendations
415     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
416     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
417     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
418     Log To Console              *********************
419     Log To Console              response = ${resp}
420     ${response_json}    json.loads    ${resp.content}
421     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
422     Set Global Variable     ${resultStatus}
423     Log To Console              resultStatus = ${resultStatus}
424     Log To Console              body = ${resp.text}
425     Should Be Equal As Integers    ${resp.status_code}    200
426     Should Be Equal    done    ${resultStatus}
427
428 SendPlanWithHpaOptionals
429     [Documentation]    It sends a POST request to conductor
430     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
431     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_requirements_optionals.json
432     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
433     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
434     Log To Console              *********************
435     Log To Console              response = ${resp}
436     Log To Console              body = ${resp.text}
437     ${response_json}    json.loads    ${resp.content}
438     ${generatedPlanId}=    Convert To String      ${response_json['id']}
439     Set Global Variable     ${generatedPlanId}
440     Log To Console              generatedPlanId = ${generatedPlanId}
441     Should Be Equal As Integers    ${resp.status_code}    201
442     Sleep    60s    Wait Plan Resolution
443
444 GetPlanWithHpaOptionals
445     [Documentation]    It sends a REST GET request to capture recommendations
446     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
447     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
448     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
449     Log To Console              *********************
450     Log To Console              response = ${resp}
451     ${response_json}    json.loads    ${resp.content}
452     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
453     Set Global Variable     ${resultStatus}
454     Log To Console              resultStatus = ${resultStatus}
455     Log To Console              body = ${resp.text}
456     Should Be Equal As Integers    ${resp.status_code}    200
457     Should Be Equal    done    ${resultStatus}
458
459 SendPlanWithHpaUnmatched
460     [Documentation]    It sends a POST request to conductor
461     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
462     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_unmatched.json
463     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
464     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
465     Log To Console              *********************
466     Log To Console              response = ${resp}
467     Log To Console              body = ${resp.text}
468     ${response_json}    json.loads    ${resp.content}
469     ${generatedPlanId}=    Convert To String      ${response_json['id']}
470     Set Global Variable     ${generatedPlanId}
471     Log To Console              generatedPlanId = ${generatedPlanId}
472     Should Be Equal As Integers    ${resp.status_code}    201
473     Sleep    60s    Wait Plan Resolution
474
475 GetPlanWithHpaUnmatched
476     [Documentation]    It sends a REST GET request to capture recommendations
477     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
478     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
479     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
480     Log To Console              *********************
481     Log To Console              response = ${resp}
482     ${response_json}    json.loads    ${resp.content}
483     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
484     Set Global Variable     ${resultStatus}
485     Log To Console              resultStatus = ${resultStatus}
486     Log To Console              body = ${resp.text}
487     Should Be Equal As Integers    ${resp.status_code}    200
488     Should Be Equal    not found    ${resultStatus}
489
490 # HPA Score Multi objective Optimization
491 SendPlanWithHpaScoreMultiObj
492     [Documentation]    It sends a POST request to conductor
493     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
494     ${data}=         Get Binary File     ${CURDIR}${/}data${/}plan_with_hpa_score_multi_objective.json
495     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
496     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
497     Log To Console              *********************
498     Log To Console              response = ${resp}
499     Log To Console              body = ${resp.text}
500     ${response_json}    json.loads    ${resp.content}
501     ${generatedPlanId}=    Convert To String      ${response_json['id']}
502     Set Global Variable     ${generatedPlanId}
503     Log To Console              generatedPlanId = ${generatedPlanId}
504     Should Be Equal As Integers    ${resp.status_code}    201
505     Sleep    60s    Wait Plan Resolution
506
507 GetPlanWithHpaScoreMultiObj
508     [Documentation]    It sends a REST GET request to capture recommendations
509     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
510     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
511     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
512     Log To Console              *********************
513     Log To Console              response = ${resp}
514     ${response_json}    json.loads    ${resp.content}
515     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
516     ${vim-id}=    Convert To String      ${response_json['plans'][0]['recommendations'][0]['vG']['candidate']['vim-id']}
517     # ${hpa_score}=    Convert To String      ${response_json['plans'][0]['recommendations']['vG']['hpa_score']}
518     Set Global Variable     ${resultStatus}
519     Log To Console              resultStatus = ${resultStatus}
520     Log To Console              body = ${resp.text}
521     Should Be Equal As Integers    ${resp.status_code}    200
522     Should Be Equal    done    ${resultStatus}
523     Should Be Equal    HPA-cloud_cloud-region-1    ${vim-id}
524
525 # NSI selection template
526 SendPlanWithNsiSelection
527     [Documentation]    It sends a POST request to conductor
528     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
529     ${data}=         Get Binary File     ${CURDIR}${/}data${/}nsi_selection_template_with_reuse.json
530     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
531     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
532     Log To Console              *********************
533     Log To Console              response = ${resp}
534     Log To Console              body = ${resp.text}
535     ${response_json}    json.loads    ${resp.content}
536     ${generatedPlanId}=    Convert To String      ${response_json['id']}
537     Set Global Variable     ${generatedPlanId}
538     Log To Console              generatedPlanId = ${generatedPlanId}
539     Should Be Equal As Integers    ${resp.status_code}    201
540     Sleep    60s    Wait Plan Resolution
541
542 GetPlanWithNsiSelection
543     [Documentation]    It sends a REST GET request to capture recommendations
544     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
545     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
546     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
547     Log To Console              *********************
548     Log To Console              response = ${resp}
549     ${response_json}    json.loads    ${resp.content}
550     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
551     ${instance_name}=    Convert To String      ${response_json['plans'][0]['recommendations'][0]['URLLC']['candidate']['instance_name']}
552     Set Global Variable     ${resultStatus}
553     Log To Console              resultStatus = ${resultStatus}
554     Log To Console              body = ${resp.text}
555     Should Be Equal As Integers    ${resp.status_code}    200
556     Should Be Equal    done    ${resultStatus}
557     Should Be Equal    nsi_test_0211    ${instance_name}
558
559 SendPlanWithNsiSelectionSliceProfile
560     [Documentation]    It sends a POST request to conductor
561     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
562     ${data}=         Get Binary File     ${CURDIR}${/}data${/}nsi_selection_template_with_create.json
563     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
564     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
565     Log To Console              *********************
566     Log To Console              response = ${resp}
567     Log To Console              body = ${resp.text}
568     ${response_json}    json.loads    ${resp.content}
569     ${generatedPlanId}=    Convert To String      ${response_json['id']}
570     Set Global Variable     ${generatedPlanId}
571     Log To Console              generatedPlanId = ${generatedPlanId}
572     Should Be Equal As Integers    ${resp.status_code}    201
573     Sleep    60s    Wait Plan Resolution
574
575 GetPlanWithNsiSelectionSliceProfile
576     [Documentation]    It sends a REST GET request to capture recommendations
577     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
578     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
579     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
580     Log To Console              *********************
581     Log To Console              response = ${resp}
582     ${response_json}    json.loads    ${resp.content}
583     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
584     ${candidate_type}=    Convert To String      ${response_json['plans'][0]['recommendations'][0]['URLLC']['candidate']['inventory_type']}
585     Set Global Variable     ${resultStatus}
586     Log To Console              resultStatus = ${resultStatus}
587     Log To Console              body = ${resp.text}
588     Should Be Equal As Integers    ${resp.status_code}    200
589     Should Be Equal    done    ${resultStatus}
590     Should Be Equal    slice_profiles    ${candidate_type}
591
592 SendPlanWithNoNsi
593     [Documentation]    It sends a POST request to conductor
594     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
595     ${data}=         Get Binary File     ${CURDIR}${/}data${/}nsi_selection_template_with_nonsi.json
596     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
597     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
598     Log To Console              *********************
599     Log To Console              response = ${resp}
600     Log To Console              body = ${resp.text}
601     ${response_json}    json.loads    ${resp.content}
602     ${generatedPlanId}=    Convert To String      ${response_json['id']}
603     Set Global Variable     ${generatedPlanId}
604     Log To Console              generatedPlanId = ${generatedPlanId}
605     Should Be Equal As Integers    ${resp.status_code}    201
606     Sleep    60s    Wait Plan Resolution
607
608 GetPlanWithNoNsi
609     [Documentation]    It sends a REST GET request to capture recommendations
610     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
611     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
612     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
613     Log To Console              *********************
614     Log To Console              response = ${resp}
615     ${response_json}    json.loads    ${resp.content}
616     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
617     ${candidate_type}=    Convert To String      ${response_json['plans'][0]['recommendations'][0]['URLLC']['candidate']['inventory_type']}
618     Set Global Variable     ${resultStatus}
619     Log To Console              resultStatus = ${resultStatus}
620     Log To Console              body = ${resp.text}
621     Should Be Equal As Integers    ${resp.status_code}    200
622     Should Be Equal    done    ${resultStatus}
623     Should Be Equal    slice_profiles    ${candidate_type}
624
625 SendPlanWithNssiSelection
626     [Documentation]    It sends a POST request to conductor
627     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
628     ${data}=         Get Binary File     ${CURDIR}${/}data${/}nssi_selection_template.json
629     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
630     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
631     Log To Console              *********************
632     Log To Console              response = ${resp}
633     Log To Console              body = ${resp.text}
634     ${response_json}    json.loads    ${resp.content}
635     ${generatedPlanId}=    Convert To String      ${response_json['id']}
636     Set Global Variable     ${generatedPlanId}
637     Log To Console              generatedPlanId = ${generatedPlanId}
638     Should Be Equal As Integers    ${resp.status_code}    201
639     Sleep    60s    Wait Plan Resolution
640
641 GetPlanWithNssiSelection
642     [Documentation]    It sends a REST GET request to capture recommendations
643     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
644     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
645     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
646     Log To Console              *********************
647     Log To Console              response = ${resp}
648     ${response_json}    json.loads    ${resp.content}
649     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
650     ${instance_name}=    Convert To String      ${response_json['plans'][0]['recommendations'][0]['URLLC_core']['candidate']['instance_name']}
651     Set Global Variable     ${resultStatus}
652     Log To Console              resultStatus = ${resultStatus}
653     Log To Console              body = ${resp.text}
654     Should Be Equal As Integers    ${resp.status_code}    200
655     Should Be Equal    done    ${resultStatus}
656     Should Be Equal    nssi_test_0211    ${instance_name}
657
658 SendPlanWithNssiSelectionUnmatched
659     [Documentation]    It sends a POST request to conductor
660     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
661     ${data}=         Get Binary File     ${CURDIR}${/}data${/}nssi_selection_template_unmatched.json
662     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
663     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
664     Log To Console              *********************
665     Log To Console              response = ${resp}
666     Log To Console              body = ${resp.text}
667     ${response_json}    json.loads    ${resp.content}
668     ${generatedPlanId}=    Convert To String      ${response_json['id']}
669     Set Global Variable     ${generatedPlanId}
670     Log To Console              generatedPlanId = ${generatedPlanId}
671     Should Be Equal As Integers    ${resp.status_code}    201
672     Sleep    60s    Wait Plan Resolution
673
674 GetPlanWithNssiSelectionUnmatched
675     [Documentation]    It sends a REST GET request to capture recommendations
676     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
677     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
678     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
679     Log To Console              *********************
680     Log To Console              response = ${resp}
681     ${response_json}    json.loads    ${resp.content}
682     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
683     Set Global Variable     ${resultStatus}
684     Log To Console              resultStatus = ${resultStatus}
685     Log To Console              body = ${resp.text}
686     Should Be Equal As Integers    ${resp.status_code}    200
687     Should Be Equal    not found    ${resultStatus}
688
689 # NST selection template
690 SendPlanWithNSTSelection
691     [Documentation]    It sends a POST request to conductor
692     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
693     ${data}=         Get Binary File     ${CURDIR}${/}data${/}nst_selection_template.json
694     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
695     ${resp}=         Post Request        optf-cond   /v1/plans     data=${data}     headers=${headers}
696     Log To Console              *********************
697     Log To Console              response = ${resp}
698     Log To Console              body = ${resp.text}
699     ${response_json}    json.loads    ${resp.content}
700     ${generatedPlanId}=    Convert To String      ${response_json['id']}
701     Set Global Variable     ${generatedPlanId}
702     Log To Console              generatedPlanId = ${generatedPlanId}
703     Should Be Equal As Integers    ${resp.status_code}    201
704     Sleep    60s    Wait Plan Resolution
705
706 GetPlanWithNsTSelection
707     [Documentation]    It sends a REST GET request to capture recommendations
708     Create Session   optf-cond            ${COND_HOSTNAME}:${COND_PORT}
709     &{headers}=      Create Dictionary    Authorization=${HAS_Auth}    Content-Type=application/json  Accept=application/json
710     ${resp}=         Get Request        optf-cond   /v1/plans/${generatedPlanId}    headers=${headers}
711     Log To Console              *********************
712     Log To Console              response = ${resp}
713     ${response_json}    json.loads    ${resp.content}
714     ${resultStatus}=    Convert To String      ${response_json['plans'][0]['status']}
715     ${instance_name}=    Convert To String      ${response_json['plans'][0]['recommendations'][0]['nst_demand']['candidate']['model_name']}
716     Set Global Variable     ${resultStatus}
717     Log To Console              resultStatus = ${resultStatus}
718     Log To Console              body = ${resp.text}
719     Should Be Equal As Integers    ${resp.status_code}    200
720     Should Be Equal    done    ${resultStatus}
721     Should Be Equal    EmbbNst    ${instance_name}
722
723
724 *** Keywords ***
725
726