First Pass Automated vFW control setup
[testsuite.git] / robot / resources / policy_interface.robot
1 *** Settings ***
2 Documentation     The main interface for interacting with Policy. It handles low level stuff like managing the http request library and Policy required fields
3 Library           RequestsClientCert
4 Library               RequestsLibrary
5 Library           String
6 Library           JSONUtils
7 Library           Collections      
8 Resource          global_properties.robot
9
10 *** Variables ***
11 ${POLICY_HEALTH_CHECK_PATH}        /healthcheck
12 ${POLICY_ENDPOINT}     ${GLOBAL_POLICY_SERVER_PROTOCOL}://${GLOBAL_INJECTED_POLICY_IP_ADDR}:${GLOBAL_POLICY_SERVER_PORT}
13 ${POLICY_HEALTHCHECK_ENDPOINT}     ${GLOBAL_POLICY_SERVER_PROTOCOL}://${GLOBAL_INJECTED_POLICY_IP_ADDR}:${GLOBAL_POLICY_HEALTHCHECK_PORT}
14 ${POLICY_TEMPLATES}        robot/assets/templates/policy
15
16 *** Keywords ***
17
18 Run Policy Health Check
19      [Documentation]    Runs Policy Health check
20      ${auth}=    Create List    ${GLOBAL_POLICY_USERNAME}    ${GLOBAL_POLICY_PASSWORD}    
21      Log    Creating session ${POLICY_ENDPOINT}
22      ${session}=    Create Session      policy  ${POLICY_HEALTHCHECK_ENDPOINT}   auth=${auth}
23      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
24      ${resp}=   Get Request     policy  ${POLICY_HEALTH_CHECK_PATH}     headers=${headers}
25      Log    Received response from policy ${resp.text}
26      Should Be Equal As Strings         ${resp.status_code}     200
27      Should Be True     ${resp.json()['healthy']}
28      @{ITEMS}=    Copy List    ${resp.json()['details']}
29      :FOR    ${ELEMENT}    IN    @{ITEMS}
30      \    Should Be Equal As Strings    ${ELEMENT['code']}      200
31      \    Should Be True    ${ELEMENT['healthy']}
32     
33 Run Policy Put Request
34      [Documentation]    Runs Policy Put request
35      [Arguments]    ${data_path}  ${data}
36      Log    Creating session ${POLICY_ENDPOINT}
37      ${session}=    Create Session      policy  ${POLICY_ENDPOINT}
38      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    Authorization=Basic ${GLOBAL_POLICY_AUTH}   ClientAuth=${GLOBAL_POLICY_CLIENTAUTH}    Environment=TEST
39      ${resp}=   Put Request     policy  ${data_path}     data=${data}    headers=${headers}
40      Log    Received response from policy ${resp.text}
41      [Return]    ${resp}
42      
43 Run Policy Delete Request
44      [Documentation]    Runs Policy Delete request
45      [Arguments]    ${data_path}  ${data}
46      Log    Creating session ${POLICY_ENDPOINT}
47      ${session}=    Create Session      policy  ${POLICY_ENDPOINT}
48      ${headers}=    Create Dictionary     Accept=application/json    Content-Type=application/json    Authorization=Basic ${GLOBAL_POLICY_AUTH}   ClientAuth=${GLOBAL_POLICY_CLIENTAUTH}    Environment=TEST
49      ${resp}=   Delete Request  policy  ${data_path}    data=${data}    headers=${headers}
50      Log    Received response from policy ${resp.text}
51      [Return]    ${resp}
52      
53 Run Policy Get Configs Request
54     [Documentation]    Runs Policy Get Configs request
55     [Arguments]    ${data_path}  ${data}
56     Log    Creating session ${POLICY_ENDPOINT}
57     ${session}=    Create Session       policy  ${POLICY_ENDPOINT}
58     ${headers}=    Create Dictionary     Accept=application/json    Content-Type=application/json    Authorization=Basic ${GLOBAL_POLICY_AUTH}   ClientAuth=${GLOBAL_POLICY_CLIENTAUTH}    
59     ${resp}=    Post Request    policy  ${data_path}    data=${data}    headers=${headers}
60     Log    Received response from policy ${resp.text}
61     [Return]    ${resp}
62
63
64
65 Update vVFWCL Policy
66     [Arguments]   ${resource_id}
67     Run Keyword and Ignore Error    Delete vFWCL Policy
68     Sleep    20s
69     Create vFWCL Policy     ${resource_id}
70     Sleep    5s
71     Push vFWCL Policy
72     Sleep    20s
73     Reboot Drools
74     Sleep    20s
75     Validate the vFWCL Policy
76
77 Delete vFWCL Policy
78      ${data}=   OperatingSystem.Get File    ${POLICY_TEMPLATES}/FirewallPolicy_delete.template
79      ${resp}=   Run Policy Delete Request    /pdp/api/deletePolicy    ${data}
80      Should Be Equal As Strings         ${resp.status_code}     200
81
82 Create vFWCL Policy
83     [Arguments]   ${resource_id}
84     ${dict}=   Create Dictionary   RESOURCE_ID=${resource_id}
85     ${data}=   Fill JSON Template File    ${POLICY_TEMPLATES}/FirewallPolicy_update.template   ${dict}
86     ${resp}=   Run Policy Put Request    /pdp/api/updatePolicy    ${data}
87     Should Be Equal As Strings  ${resp.status_code}     200
88
89 Push vFWCL Policy
90      ${dict}=   Create Dictionary
91      ${data}=   Fill JSON Template File    ${POLICY_TEMPLATES}/FirewallPolicy_push.template   ${dict}
92      ${resp}=   Run Policy Put Request    /pdp/api/pushPolicy    ${data}
93      Should Be Equal As Strings         ${resp.status_code}     200
94
95 Reboot Drools
96     ${stop}=   Catenate   docker exec -t -u policy drools bash -c "source /opt/app/policy/etc/profile.d/env.sh; policy stop"
97     ${start}=   Catenate   docker exec -t -u policy drools bash -c "source /opt/app/policy/etc/profile.d/env.sh; policy start"
98     Wait Until Keyword Succeeds    120    5 sec    Open Connection And Log In    ${GLOBAL_INJECTED_POLICY_IP_ADDR}    root    ${GLOBAL_VM_PRIVATE_KEY}
99     Write    ${stop}
100     ${status}   ${stdout}=       Run Keyword And Ignore Error    SSHLibrary.Read Until Regexp    has stopped
101     Log   ${status}: stdout=${stdout}
102     ${ctrlc}=    Evaluate   '\x03'
103     Run Keyword If   '${status}' == 'FAIL'   Write   ${ctrlc}
104     Sleep    5s
105     Write    ${start}
106     ${stdout}=   SSHLibrary.Read Until Regexp    is running
107     Log   stdout=${stdout}
108     Should Contain     ${stdout}    is running
109
110 Validate the vFWCL Policy
111     ${resp}=   Run Drools Get Request   /policy/pdp/engine/controllers/amsterdam/drools
112     Should Be Equal As Strings  ${resp.status_code}     200
113     ${resp}=   Run Drools Get Request   /policy/pdp/engine/controllers/amsterdam/drools/facts/closedloop-amsterdam/org.onap.policy.controlloop.Params
114     Should Be Equal As Strings  ${resp.status_code}     200