Changing extension from .txt to .robot
[integration/test.git] / test / csit / suites / openflowplugin / Performance / 010_Cbench.robot
diff --git a/test/csit/suites/openflowplugin/Performance/010_Cbench.robot b/test/csit/suites/openflowplugin/Performance/010_Cbench.robot
new file mode 100644 (file)
index 0000000..3146390
--- /dev/null
@@ -0,0 +1,78 @@
+*** Settings ***
+Documentation     Cbench Latency and Throughput tests can be run from an external
+...                 cbench.
+...                 If cbench is run with a medium number of switches or higher (e.g. 32+)
+...                 the normal openflow operations seem to break.
+...                 BUG:  https://bugs.opendaylight.org/show_bug.cgi?id=2897
+Suite Setup       Cbench Suite Setup
+Force Tags        cbench
+Library           String
+Resource          ../../../libraries/Utils.txt
+Resource          ../../../libraries/KarafKeywords.txt
+
+
+*** Variables ***
+${throughput_threshold}     30000
+${latency_threshold}        10000
+${switch_count}             8
+${duration_in_secs}         12
+${loops}                    10
+${num_of_unique_macs}       10000
+${cbench_system}            ${MININET}
+${cbench_executable}        /usr/local/bin/cbench
+${throughput_results_file}  throughput.csv
+${latency_results_file}     latency.csv
+
+*** Testcases ***
+Cbench Throughput Test
+    [Documentation]     cbench executed in throughput mode (-t).  Test parameters have defaults, but can be overridden
+    ...     on the pybot command line
+    [Tags]  throughput
+    [Timeout]   ${test_timeout}
+    Log    Cbench tests using ${loops} iterations of ${duration_in_secs} second tests. Switch Count: ${switch_count}. Unique MACS to cycle: ${num_of_unique_macs}
+    Run Cbench And Log Results  -t -m ${duration_in_ms} -M ${num_of_unique_macs} -s ${switch_count} -l ${loops}     ${throughput_threshold}     ${throughput_results_file}
+
+Cbench Latency Test
+    [Documentation]     cbench executed in default latency mode.  Test parameters have defaults, but can be overridden
+    ...     on the pybot command line
+    [Tags]  latency
+    [Timeout]   ${test_timeout}
+    Log    Cbench tests using ${loops} iterations of ${duration_in_secs} second tests. Switch Count: ${switch_count}. Unique MACS to cycle: ${num_of_unique_macs}
+    Run Cbench And Log Results  -m ${duration_in_ms} -M ${num_of_unique_macs} -s ${switch_count} -l ${loops}     ${latency_threshold}     ${latency_results_file}
+
+*** Keywords ***
+Run Cbench And Log Results
+    [Arguments]    ${cbench_args}    ${average_threshold}   ${output_filename}=results.csv
+    ${output}=  Run Command On Remote System    ${cbench_system}   ${cbench_executable} -c ${CONTROLLER} ${cbench_args}  prompt_timeout=${test_timeout}
+    Log     ${output}
+    Should Contain    ${output}    RESULT
+    ${result_line}=    Get Lines Containing String    ${output}    RESULT
+    @{results_list}=    Split String    ${result_line}
+    Log    ${results_list[5]}
+    Log    ${results_list[7]}
+    @{result_name_list}=    Split String    ${results_list[5]}    /
+    @{result_value_list}=    Split String    ${results_list[7]}    /
+    ${num_stats}=    Get Length    ${result_name_list}
+    : FOR    ${i}    IN RANGE    0    ${num_stats}
+    \    Log    ${result_name_list[${i}]} :: ${result_value_list[${i}]}
+    ${min}=    Set Variable    ${result_value_list[${0}]}
+    ${max}=    Set Variable    ${result_value_list[${1}]}
+    ${average}=    Set Variable    ${result_value_list[${2}]}
+    ${stdev}=    Set Variable    ${result_value_list[${3}]}
+    ${date}=    Get Time    d,m,s
+    Log    CBench Result: ${date},${cbench_args},${min},${max},${average},${stdev}
+    Append To File    ${output_filename}    ${min},${max},${average}\n
+    Should Be True    ${average} > ${average_threshold}     ${average} flow_mods per/sec did not exceed threshold of ${average_threshold}
+
+Cbench Suite Setup
+    Append To File    ${latency_results_file}    LATENCY_MIN,LATENCY_MAX,LATENCY_AVERAGE\n
+    Append To File    ${throughput_results_file}    THROUGHPUT_MIN,THROUGHPUT_MAX,THROUGHPUT_AVERAGE\n
+    ${duration_in_ms}           Evaluate    ${duration_in_secs} * 1000
+    Set Suite Variable  ${duration_in_ms}
+    ##Setting the test timeout dynamically in case larger values on command line override default
+    ${test_timeout}             Evaluate    (${loops} * ${duration_in_secs}) * 1.5
+    Set Suite Variable  ${test_timeout}
+    Verify File Exists On Remote System     ${cbench_system}    ${cbench_executable}
+    Should Be True  ${loops} >= 2   If number of loops is less than 2, cbench will not run
+    Verify Feature Is Installed     odl-openflowplugin-drop-test
+    Issue Command On Karaf Console  dropallpacketsrpc on