Add lispflowmapping performance tests
[integration/test.git] / csit / suites / lispflowmapping / performance / 010_Southbound_MapRequest.robot
diff --git a/csit/suites/lispflowmapping/performance/010_Southbound_MapRequest.robot b/csit/suites/lispflowmapping/performance/010_Southbound_MapRequest.robot
new file mode 100644 (file)
index 0000000..ac512da
--- /dev/null
@@ -0,0 +1,70 @@
+*** Settings ***
+Documentation     Test suite to determine the southbound Map-Request serving rate
+Suite Setup       Prepare Environment
+Suite Teardown    Destroy Environment
+Library           Collections
+Library           OperatingSystem
+Library           RequestsLibrary
+Library           String
+Resource          ../../../libraries/Utils.robot
+Variables         ../../../variables/Variables.py
+
+*** Variables ***
+${MAPPINGS}=          10000
+${LISP_SCAPY}         https://raw.githubusercontent.com/intouch/py-lispnetworking/master/lisp.py
+${TOOLS_DIR}          ${CURDIR}/../../../../tools/odl-lispflowmapping-performance-tests/
+${PCAP_CREATOR}       ${TOOLS_DIR}/create_map_request_pcap.py
+${MAPPING_BLASTER}    ${TOOLS_DIR}/mapping_blaster.py
+${REPLAY_PPS}         100000
+${REPLAY_CNT}         1000
+${REPLAY_FILE}        ${CURDIR}/encapsulated-map-requests-sequential.pcap
+${RESULTS_FILE}       pps.csv
+
+*** Test Cases ***
+Add Simple IPv4 Mappings
+    Run Process With Logging And Status Check    ${MAPPING_BLASTER}    --host    ${CONTROLLER}    --mappings    ${MAPPINGS}
+
+Generate Test Traffic
+    Reset Stats
+    ${result}=    Run Process With Logging And Status Check    /usr/local/bin/udpreplay    --pps    ${REPLAY_PPS}    --repeat    ${REPLAY_CNT}    --port    4342    ${REPLAY_FILE}
+    ${partial}=    Fetch From Left    ${result.stdout}    s =
+    Log    ${partial}
+    ${seconds}=    Fetch From Right    ${partial}    ${SPACE}
+    ${seconds}=    Convert To Number    ${seconds}
+    Log    ${seconds}
+    Set Suite Variable    ${seconds}
+
+Compute And Export MapReply Rate
+    ${txmrep}=    Get Transmitted Map-Requests Stats
+    ${pps}=    Evaluate    ${txmrep}/${seconds}
+    Log    ${pps}
+    Create File    ${RESULTS_FILE}    replies/s\n
+    Append To File    ${RESULTS_FILE}    ${pps}\n
+
+*** Keywords ***
+Reset Stats
+    ${resp}=    RequestsLibrary.Post    session    ${LFM_SB_RPC_API}:reset-stats
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+
+Get Transmitted Map-Requests Stats
+    ${resp}=    RequestsLibrary.Post    session    ${LFM_SB_RPC_API}:get-stats
+    Log    ${resp.content}
+    ${output}=     Get From Dictionary    ${resp.json()}    output
+    ${stats}=      Get From Dictionary    ${output}         control-message-stats
+    ${ctrlmsg}=    Get From Dictionary    ${stats}          control-message
+    ${replies}=    Get From List          ${ctrlmsg}        2
+    ${txmrep}=     Get From Dictionary    ${replies}        tx-count
+    ${txmrep}=     Convert To Integer     ${txmrep}
+    Log    ${txmrep}
+    [Return]    ${txmrep}
+
+Prepare Environment
+    Create Session    session    http://${CONTROLLER}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
+    Run Process With Logging And Status Check    wget    -P    ${TOOLS_DIR}    ${LISP_SCAPY}
+    Run Process With Logging And Status Check    ${PCAP_CREATOR}    --requests    ${MAPPINGS}
+
+Destroy Environment
+    Delete All Sessions
+    Remove File    ${TOOLS_DIR}/lisp.py*
+    Remove File    ${REPLAY_FILE}