diff options
Diffstat (limited to 'test/resources/libraries/python/VatExecutor.py')
-rw-r--r-- | test/resources/libraries/python/VatExecutor.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/test/resources/libraries/python/VatExecutor.py b/test/resources/libraries/python/VatExecutor.py new file mode 100644 index 00000000000..55a0454bcb5 --- /dev/null +++ b/test/resources/libraries/python/VatExecutor.py @@ -0,0 +1,84 @@ +# Copyright (c) 2015 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +from ssh import SSH +from robot.api import logger + +__all__ = [] + +class VatExecutor(object): + + __TMP_DIR = "/tmp/" + __VAT_BIN = "vpe_api_test" + + def __init__(self): + self._stdout = None + self._stderr = None + self._ret_code = None + + def execute_script(self, local_path, node, timeout=10, json_out=True): + """Copy local_path script to node, execute it and return result. + + Returns (rc, stdout, stderr tuple). + """ + + ssh = SSH() + ssh.connect(node) + + local_basename = os.path.basename(local_path) + remote_file_path = self.__TMP_DIR + local_basename + remote_file_out = remote_file_path + ".out" + + ssh.scp(local_path, remote_file_path) + + cmd = "sudo -S {vat} {json} < {input}".format(vat=self.__VAT_BIN, + json="json" if json_out == True else "", + input=remote_file_path) + (ret_code, stdout, stderr) = ssh.exec_command(cmd, timeout) + self._ret_code = ret_code + self._stdout = stdout + self._stderr = stderr + + logger.trace("Command '{0}' returned {1}'".format(cmd, self._ret_code)) + logger.trace("stdout: '{0}'".format(self._stdout)) + logger.trace("stderr: '{0}'".format(self._stderr)) + + #TODO: download vpe_api_test output file + self._delete_files(node, remote_file_path, remote_file_out) + + def _delete_files(self, node, *files): + ssh = SSH() + ssh.connect(node) + files = " ".join([str(x) for x in files]) + ssh.exec_command("rm {0}".format(files)) + + def script_should_have_failed(self): + if self._ret_code is None: + raise Exception("First execute the script!") + if self._ret_code == 0: + raise AssertionError( + "Script execution passed, but failure was expected") + + def script_should_have_passed(self): + if self._ret_code is None: + raise Exception("First execute the script!") + if self._ret_code != 0: + raise AssertionError( + "Script execution failed, but success was expected") + + def get_script_stdout(self): + return self._stdout + + def get_script_stderr(self): + return self._stderr + |