Remove remnants of sfc project
[integration/test.git] / csit / libraries / RestPerfClient.robot
index 0fa35ecbaf49a5f5c1a204613102be03b2ddf6eb..c8492eeef661f40a4c31c8024f5ec58678c47473 100644 (file)
@@ -1,38 +1,45 @@
 *** Settings ***
-Documentation     RestPerfClient handling singleton resource.
+Documentation       RestPerfClient handling singleton resource.
 ...
-...               Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+...                 Copyright (c) 2016,2017 Cisco Systems, Inc. and others. All rights reserved.
 ...
-...               This program and the accompanying materials are made available under the
-...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
-...               and is available at http://www.eclipse.org/legal/epl-v10.html
+...                 This program and the accompanying materials are made available under the
+...                 terms of the Eclipse Public License v1.0 which accompanies this distribution,
+...                 and is available at http://www.eclipse.org/legal/epl-v10.html
 ...
-...               This singleton manages RestPerfClient invocation, tracks the log file
-...               produced by the invocation, allows the test suite to easily search this
-...               log file and collect it once done.
 ...
-...               TODO: Currently only one RestPerfClient invocation running at a time is
-...               supported. Support for multiple concurrently running RestPerfClient
-...               invocations might be needed for example when performance testing cluster
-...               nodes. However no such suites are planned for now.
+...                 This singleton manages RestPerfClient invocation, tracks the log file
+...                 produced by the invocation, allows the test suite to easily search this
+...                 log file and collect it once done.
 ...
-...               FIXME: There may be suites which want to use this Resource without
-...               NetconfKeywords, in which case NexusKeywords will not be initialized
-...               and Setup_Restperfclient will fail. Fixing this problem will require
-...               updating NexusKeywords initialization (which may break other suites)
-...               and currently all suites using this use also NetconfKeywords so this
-...               was postponed. Workaround for the problem: Initialize NexusKeywords
-...               manually before initializing this resource.
-Library           DateTime
-Library           SSHLibrary
-Resource          ${CURDIR}/NexusKeywords.robot
-Resource          ${CURDIR}/SetupUtils.robot
-Resource          ${CURDIR}/SSHKeywords.robot
-Resource          ${CURDIR}/Utils.robot
+...                 TODO: RemoteBash.robot contains logic which could be reused here.
+...
+...                 TODO: Currently only one RestPerfClient invocation running at a time is
+...                 supported. Support for multiple concurrently running RestPerfClient
+...                 invocations might be needed for example when performance testing cluster
+...                 nodes. However no such suites are planned for now.
+...
+...                 FIXME: There may be suites which want to use this Resource without
+...                 NetconfKeywords, in which case NexusKeywords will not be initialized
+...                 and Setup_Restperfclient will fail. Fixing this problem will require
+...                 updating NexusKeywords initialization (which may break other suites)
+...                 and currently all suites using this use also NetconfKeywords so this
+...                 was postponed. Workaround for the problem: Initialize NexusKeywords
+...                 manually before initializing this resource.
+
+Library             DateTime
+Library             SSHLibrary
+Resource            ${CURDIR}/NexusKeywords.robot
+Resource            ${CURDIR}/SetupUtils.robot
+Resource            ${CURDIR}/SSHKeywords.robot
+Resource            ${CURDIR}/Utils.robot
+Resource            ${CURDIR}/RemoteBash.robot
+
 
 *** Variables ***
 ${RestPerfClient__restperfclientlog}    ${EMPTY}
 
+
 *** Keywords ***
 Setup_Restperfclient
     [Documentation]    Deploy RestPerfClient and determine the Java command to use to call it.
@@ -40,25 +47,45 @@ Setup_Restperfclient
     ...    invoked, deploy RestPerfClient and the data files it needs to do
     ...    its work and initialize the internal state for the remaining
     ...    keywords.
+    [Arguments]    ${build_version}=${EMPTY}    ${build_location}=${EMPTY}
     ${connection}=    SSHKeywords.Open_Connection_To_Tools_System
     BuiltIn.Set_Suite_Variable    ${RestPerfClient__restperfclient}    ${connection}
     SSHLibrary.Put_File    ${CURDIR}/../variables/netconf/RestPerfClient/request1.json
-    ${filename}=    NexusKeywords.Deploy_Test_Tool    netconf    netconf-testtool    rest-perf-client
-    ${prefix}=    NexusKeywords.Compose_Full_Java_Command    -Xmx1G -XX:MaxPermSize=256M -jar ${filename}
+    IF    '${IS_KARAF_APPL}' == 'False'
+        ${filename}=    Set Variable    ${RESTPERF_FILENAME}
+    ELSE
+        ${filename}=    NexusKeywords.Deploy_Test_Tool    netconf    netconf-testtool    rest-perf-client
+    END
+    ${prefix}=    NexusKeywords.Compose_Full_Java_Command    -Xmx4G -jar ${filename}
     BuiltIn.Set_Suite_Variable    ${RestPerfClient__restperfclient_invocation_command_prefix}    ${prefix}
 
+RestPerfClient__Kill
+    RemoteBash.Write_Bare_Ctrl_C
+    SSHLibrary.Set_Client_Configuration    timeout=5
+    SSHLibrary.Read_Until_Prompt
+
+Restperfclient__Wait_For_Finish
+    SSHLibrary.Write    ${Empty}
+    ${stdout}=    SSHLibrary.Read_Until_Prompt
+
 Restperfclient__Invoke_With_Timeout
     [Arguments]    ${timeout}    ${command}
-    [Timeout]    ${timeout}
-    Execute_Command_Passes    ${command} >${RestPerfClient__restperfclientlog} 2>&1
+    ${stdout}=    SSHLibrary.Read
+    BuiltIn.Log    ${stdout}
+    ${cmd}=    BuiltIn.Set_Variable    ${command} 2>&1 | tee ${RestPerfClient__restperfclientlog}
+    SSHLibrary.Write    ${cmd}
+    SSHLibrary.Set_Client_Configuration    timeout=120
+    BuiltIn.Wait_Until_Keyword_Succeeds    ${timeout}    1s    Restperfclient__Wait_For_Finish
+    Execute_Command_Passes    cat ${RestPerfClient__restperfclientlog}
 
 Invoke_Restperfclient
-    [Arguments]    ${timeout}    ${url}    ${testcase}=${EMPTY}    ${ip}=${ODL_SYSTEM_IP}    ${port}=${RESTCONFPORT}    ${count}=${REQUEST_COUNT}
-    ...    ${async}=false    ${user}=${ODL_RESTCONF_USER}    ${password}=${ODL_RESTCONF_PASSWORD}
     [Documentation]    Invoke RestPerfClient on the specified URL with the specified timeout.
     ...    Assemble the RestPerfClient invocation commad, setup the specified
     ...    timeout for the SSH connection, invoke the assembled command and
     ...    then check that RestPerfClient finished its run correctly.
+    [Arguments]    ${timeout}    ${url}    ${testcase}=${EMPTY}    ${ip}=${ODL_SYSTEM_IP}    ${port}=${RESTCONFPORT}    ${count}=${REQUEST_COUNT}
+    ...    ${async}=false    ${user}=${ODL_RESTCONF_USER}    ${password}=${ODL_RESTCONF_PASSWORD}
+    ${restperfclient_running}=    Set_Variable    False
     ${logname}=    Utils.Get_Log_File_Name    restperfclient    ${testcase}
     BuiltIn.Set_Suite_Variable    ${RestPerfClient__restperfclientlog}    ${logname}
     ${options}=    BuiltIn.Set_Variable    --ip ${ip} --port ${port} --edits ${count}
@@ -69,20 +96,22 @@ Invoke_Restperfclient
     ${command}=    BuiltIn.Set_Variable    ${RestPerfClient__restperfclient_invocation_command_prefix} ${options}
     BuiltIn.Log    Running restperfclient: ${command}
     SSHLibrary.Switch_Connection    ${RestPerfClient__restperfclient}
-    SSHLibrary.Set_Client_Configuration    timeout=${timeout}
     ${keyword_timeout}=    DateTime.Add_Time_To_Time    ${timeout}    2m    result_format=compact
     SetupUtils.Set_Known_Bug_Id    5413
+    ${restperfclient_running}=    Set_Variable    True
     Restperfclient__Invoke_With_Timeout    ${keyword_timeout}    ${command}
+    ${restperfclient_running}=    Set_Variable    False
     SetupUtils.Set_Unknown_Bug_Id
     ${result}=    Grep_Restperfclient_Log    FINISHED. Execution time:
     BuiltIn.Should_Not_Be_Equal    '${result}'    ''
+    [Teardown]    BuiltIn.Run_Keyword_If    ${restperfclient_running}    BuiltIn.Run_Keyword_And_Ignore_Error    RestPerfClient__Kill
 
 Grep_Restperfclient_Log
-    [Arguments]    ${pattern}
     [Documentation]    Search for the specified string in the log file produced by latest invocation of RestPerfClient
+    [Arguments]    ${pattern}
     BuiltIn.Should_Not_Be_Equal    '${RestPerfClient__restperfclientlog}'    ''
     ${result}=    SSHLibrary.Execute_Command    grep '${pattern}' ${RestPerfClient__restperfclientlog}
-    [Return]    ${result}
+    RETURN    ${result}
 
 Collect_From_Restperfclient
     [Documentation]    Collect useful data produced by restperfclient