d8fc0e8db163e2ac42a3c8dd90ec7c790c28251e
[integration.git] / test / csit / libraries / VtnCoKeywords.robot
1 *** Settings ***
2 Library           SSHLibrary
3 Library           String
4 Library           DateTime
5 Library           RequestsLibrary
6 Library           json
7 Library           SSHLibrary
8 Library           Collections
9 Library           XML
10 Variables         ../variables/Variables.py
11 Resource          ./Utils.robot
12
13 *** Keywords ***
14 Get VtnCo
15     [Documentation]    Download the VTN Coordinator from Controller VM
16     Log    Download the VTN Coordinator bz2 file
17     SSHLibrary.Open_Connection    ${CONTROLLER}
18     SSHLibrary.Login_With_Public_Key    ${CONTROLLER_USER}    ${USER_HOME}/.ssh/${SSH_KEY}    any
19     ${VTNC_FILENAME}=    Catenate    SEPARATOR=/    ${WORKSPACE}    vtn_coordinator.tar.bz2
20     SSHLibrary.Get_File    ${WORKSPACE}/${BUNDLEFOLDER}/externalapps/*vtn-coordinator*-bin.tar.bz2    ${VTNC_FILENAME}
21     SSHLibrary.Close_Connection
22     SSHLibrary.Open_Connection    ${MININET}
23     SSHLibrary.Login_With_Public_Key    ${MININET_USER}    ${USER_HOME}/.ssh/${SSH_KEY}    any
24     SSHLibrary.Put_File    ${VTNC_FILENAME}    /tmp
25     SSHLibrary.Close_Connection
26
27 Start SuiteVtnCo
28     [Documentation]    Download and startup the VTN Coordinator.
29     Log    Start the VTN Coordinator
30     Get VtnCo
31     ${vtnc_conn_id}=    Open Connection    ${MININET}    prompt=${LINUX_PROMPT}    timeout=30s
32     Set Suite Variable    ${vtnc_conn_id}
33     Login With Public Key    ${MININET_USER}    ${USER_HOME}/.ssh/${SSH_KEY}    any
34     ${VTNC_FILENAME}=    Catenate    SEPARATOR=/    ${WORKSPACE}    vtn_coordinator.tar.bz2
35     Execute Command    tar -C/ -jxvf ${VTNC_FILENAME}
36     Execute Command    /usr/local/vtn/sbin/db_setup
37     Execute Command    /usr/local/vtn/bin/vtn_start
38     Execute Command    /usr/local/vtn/bin/unc_dmctl status
39     Execute Command    /usr/local/vtn/sbin/db_setup
40     Execute Command    /usr/local/vtn/bin/vtn_start
41     Execute Command    /usr/local/vtn/bin/unc_dmctl status
42     Execute Command    exit
43
44 Stop SuiteVtnCo
45     [Documentation]    Exit the Launch Test
46     Log    Stop the Launch Test
47
48 Start SuiteVtnCoTest
49     [Documentation]    Start the VTNCo Test
50     Create Session    session    http://${MININET}:8083    headers=${VTNC_HEADERS}
51
52 Stop SuiteVtnCoTest
53     [Documentation]    Exit the VtnCo Test
54     Delete All Sessions
55
56 Get Coordinator Version
57     [Documentation]    Get API version for testing
58     ${resp}    RequestsLibrary.Get    session    ${VTNWEBAPI}/api_version
59     Should Be Equal As Strings    ${resp.status_code}    200
60
61 Add a Controller
62     [Arguments]    ${ctrlname}    ${ctrlip}
63     [Documentation]    Create a controller
64     ${controllerinfo}    Create Dictionary    controller_id=${ctrlname}    type=odc    ipaddr=${CONTROLLER}    version=1.0    auditstatus=enable
65     ${controllercreate}    Create Dictionary    controller=${controllerinfo}
66     ${controllercreate_json}=    json.dumps    ${controllercreate}
67     ${resp}    RequestsLibrary.Post    session    ${VTNWEBAPI}/${CTRLS_CREATE}    data=${controllercreate_json}
68     Should Be Equal As Strings    ${resp.status_code}    201
69
70 Remove Controller
71     [Arguments]    ${ctrlname}
72     [Documentation]    Delete a Controller
73     ${resp}    RequestsLibrary.Delete    session    ${VTNWEBAPI}/${CTRLS}/${ctrlname}.json
74     Should Be Equal As Strings    ${resp.status_code}    204
75
76 Update Controller
77     [Arguments]    ${ctrlname}    ${ctrlip}    ${desc}
78     [Documentation]    Update controller
79     ${controllerinfo}    Create Dictionary    description=${desc}    ipaddr=${ctrlip}    version=1.0    auditstatus=enable
80     ${controllerupdate}    Create Dictionary    controller=${controllerinfo}
81     ${controllerupdate_json}=    json.dumps    ${controllerupdate}
82     ${resp}    RequestsLibrary.Put    session    ${VTNWEBAPI}/${CTRLS}/${ctrlname}.json    data=${controllerupdate_json}
83     Should Be Equal As Strings    ${resp.status_code}    204
84
85 Check Controller Status
86     [Arguments]    ${ctrlname}    ${stat}
87     [Documentation]    Get controller status
88     ${resp}    RequestsLibrary.Get    session    ${VTNWEBAPI}/${CTRLS}/${ctrlname}.json
89     ${contents}    To JSON    ${resp.content}
90     ${controllerblock}    Get From Dictionary    ${contents}    controller
91     ${status}    Get From Dictionary    ${controllerblock}    operstatus
92     Should Be Equal As Strings    ${status}    ${stat}
93
94 Add a VTN
95     [Arguments]    ${vtnname}    ${vtndescription}
96     [Documentation]    Create VTN in Coordinator
97     ${vtninfo}    Create Dictionary    vtn_name=${vtnname}    description=${vtndescription}
98     ${vtncreate}    Create Dictionary    vtn=${vtninfo}
99     ${vtncreate_json}=    json.dumps    ${vtncreate}
100     ${resp}    RequestsLibrary.Post    session    ${VTNWEBAPI}/${VTNS_CREATE}    data=${vtncreate_json}
101     Should Be Equal As Strings    ${resp.status_code}    201
102
103 Delete a VTN
104     [Arguments]    ${vtnname}
105     [Documentation]    Delete a VTN Created
106     ${resp}    RequestsLibrary.Delete    session    ${VTNWEBAPI}/${VTNS}/${vtnname}.json
107     Should Be Equal As Strings    ${resp.status_code}    204
108
109 Create VBR in VTN
110     [Arguments]    ${vtnname}    ${vbrname}    ${ctrlname}
111     [Documentation]    Create VBR for VTN in Coordinator
112     ${vbrinfo}    Create Dictionary    vbr_name=${vbrname}    controller_id=${ctrlname}    domain_id=(DEFAULT)
113     ${vbrcreate}    Create Dictionary    vbridge=${vbrinfo}
114     ${vbrcreate_json}=    json.dumps    ${vbrcreate}
115     ${resp}    RequestsLibrary.Post    session    ${VTNWEBAPI}/${VTNS}/${vtnname}/${VBRS_CREATE}    data=${vbrcreate_json}
116     Should Be Equal As Strings    ${resp.status_code}    201
117
118 Create VBRIF in VBR
119     [Arguments]    ${vtnname}    ${vbrname}    ${vbrifname}    ${ifdescription}    ${retcode}
120     [Documentation]    Create VBR Interface in VBR
121     ${vbrifinfo}    Create Dictionary    if_name=${vbrifname}    description=${ifdescription}
122     ${vbrifcreate}    Create Dictionary    interface=${vbrifinfo}
123     ${vbrifcreate_json}=    json.dumps    ${vbrifcreate}
124     ${resp}    RequestsLibrary.Post    session    ${VTNWEBAPI}/${VTNS}/${vtnname}/${VBRS}/${vbrname}/${VBRIFS_CREATE}    data=${vbrifcreate_json}
125     Should Be Equal As Strings    ${resp.status_code}    ${retcode}
126
127 Define Portmap for VBRIF
128     [Arguments]    ${vtnname}    ${vbrname}    ${vbrifname}    ${logical_port_id}
129     [Documentation]    Map Interface to a logical port
130     ${logical_port_info}    Create Dictionary    logical_port_id=${logical_port_id}
131     ${portmapdefine}    Create Dictionary    portmap=${logical_port_info}
132     ${portmapdefine_json}=    json.dumps    ${portmapdefine}
133     ${resp}    RequestsLibrary.Put    session    ${VTNWEBAPI}/${VTNS}/${vtnname}/${VBRS}/${vbrname}/${VBRIFS}/${vbrifname}/${PORTMAP_CREATE}    data=${portmapdefine_json}
134     Should Be Equal As Strings    ${resp.status_code}    204
135
136 Test Ping
137     [Arguments]    ${host1}    ${host2}
138     [Documentation]    Ping hosts to check connectivity
139     Write    ${host1} ping -c 10 ${host2}
140     ${result}    Read Until    mininet>
141     Should Contain    ${result}    64 bytes
142
143 Verify Switch
144     [Arguments]    ${ctrlname}    ${switch_id}
145     [Documentation]    Get switch
146     ${resp}    Get    session    ${VTNWEBAPI}/${CTRLS}/${ctrlname}/${SW}/${switch_id}.json
147     ${contents}    To JSON    ${resp.content}
148     ${switchblock}    Get From Dictionary    ${contents}    switch
149     ${status}    Get From Dictionary    ${switchblock}    switch_id
150     Should Be Equal As Strings    ${status}    ${switch_id}
151
152 Verify SwitchPort
153     [Arguments]    ${ctrlname}    ${switch_id}
154     [Documentation]    Get switch
155     ${resp}    Get    session    ${VTNWEBAPI}/${CTRLS}/${ctrlname}/${SW}/${switch_id}/${PORTS}
156     Should Be Equal As Strings    ${resp.status_code}    200