*** Settings ***
Library SSHLibrary
+Library String
Library ./UtilLibrary.py
Resource KarafKeywords.txt
${value}= Run Keyword If '${strip}' == 'strip' Strip Quotes ${value}
[Return] ${value}
+Get Process ID Based On Regex On Remote System
+ [Documentation] Uses ps to find a process that matches the supplied regex. Returns the PID of that process
+ ... The ${regex_string_to_match_on} should produce a unique process otherwise the PID returned may not be
+ ... the expected PID
+ [Arguments] ${remote_system} ${regex_string_to_match_on}
+ # doing the extra -v grep in this command to exclude the grep process itself from the output
+ ${output}= Run Command On Remote System ${remote_system} ps -elf | grep -v grep | grep ${regex_string_to_match_on} | awk '{print $4}'
+ # ${output} contains the system prompt and all we want is the value of the number
+ ${pid}= Fetch From Left ${output} \r
+ [Return] ${pid}
+
+Get Process Thread Count On Remote System
+ [Documentation] Executes the ps command to retrieve the lightweight process (aka thread) count.
+ [Arguments] ${remote_system} ${pid}
+ ${output}= Run Command On Remote System ${remote_system} ps --no-headers -o nlwp ${pid}
+ # ${output} contains the system prompt and all we want is the value of the number
+ ${thread_count}= Fetch From Left ${output} \r
+ [Return] ${thread_count}
+
Strip Quotes
[Arguments] ${string_to_strip}
[Documentation] Will strip ALL quotes from given string and return the new string
SSHLibrary.Write ${cmd}
${output}= SSHLibrary.Read Until ${linux_prompt}
SSHLibrary.Close Connection
+ Log ${output}
[Return] ${output}
Verify File Exists On Remote System
--- /dev/null
+*** Settings ***
+Documentation OF Handshake threads should be closed if the connection has a
+... failure. This bug was fixed in the Helium SR3 release but
+... persisted in to the Lithium release. Once fixed, this will
+... catch any future regressions
+Metadata: https://bugs.opendaylight.org/show_bug.cgi?id=2429
+Library OperatingSystem
+Library SSHLibrary
+Resource ../../../libraries/Utils.txt
+Variables ../../../variables/Variables.py
+
+*** Variables ***
+${openflow_port} 6633
+${number_ofconnections_to_fail} 1000
+${margin_of_error} 0.05 # percentage
+
+*** Test Cases ***
+Bug_2429
+ [Documentation] Using the "nc" tool, a number of connections to the ${openflow_port}
+ ... will be opened and closed to simulate a failed OF handshake. The java threadcount
+ ... will be compared before and after to ensure that there are no thread leaks. Since
+ ... it's reasonable for other valid threads to be started (or stopped) during the test
+ ... a larger number of failed connections will be used and a small margin of error will
+ ... determine if the test is a PASS or FAIL
+ ${controller_pid}= Get Process ID Based On Regex On Remote System ${CONTROLLER} java.*distribution.*karaf
+ Should Match Regexp ${controller_pid} [0-9]+ PID was not discovered
+ ${starting_thread_count}= Get Process Thread Count On Remote System ${CONTROLLER} ${controller_pid}
+ Repeat Keyword ${number_ofconnections_to_fail} Run nc -w 1 ${CONTROLLER} ${openflow_port} &
+ ${ending_thread_count}= Get Process Thread Count On Remote System ${CONTROLLER} ${controller_pid}
+ Log starting count: ${starting_thread_count}\nending count: ${ending_thread_count}
+ ${acceptable_thread_count}= Evaluate ${starting_thread_count} + (${number_of_connections_to_fail} * ${margin_of_error})
+ Should Be True ${ending_thread_count} <= ${acceptable_thread_count} Final thread count of ${ending_thread_count} exceeds acceptable count: ${acceptable_thread_count}
\ No newline at end of file
integration/test/csit/suites/openflowplugin/Switch_Qualification
integration/test/csit/suites/openflowplugin/Flows_Stats_OF13
integration/test/csit/suites/openflowplugin/Groups_Meters_OF13
+integration/test/csit/suites/openflowplugin/Bug_Validation
integration/test/csit/suites/openflowplugin/Switch_Qualification
integration/test/csit/suites/openflowplugin/Flows_Stats_OF13
integration/test/csit/suites/openflowplugin/Groups_Meters_OF13
+integration/test/csit/suites/openflowplugin/Bug_Validation