diff options
-rwxr-xr-x | api/api-prepare.sh | 8 | ||||
-rw-r--r-- | api/yardstick.ini | 4 | ||||
-rw-r--r-- | api/yardstick.sock | 0 | ||||
-rw-r--r-- | tests/opnfv/test_suites/opnfv_components.yaml | 16 | ||||
-rw-r--r-- | tests/opnfv/test_suites/opnfv_features.yaml | 52 | ||||
-rw-r--r-- | tests/opnfv/test_suites/opnfv_performance.yaml | 62 | ||||
-rw-r--r-- | tests/opnfv/test_suites/opnfv_smoke.yaml | 14 | ||||
-rw-r--r-- | tests/unit/test_ssh.py | 36 | ||||
-rw-r--r-- | yardstick/ssh.py | 16 |
9 files changed, 194 insertions, 14 deletions
diff --git a/api/api-prepare.sh b/api/api-prepare.sh index fade8ccc6..5cc65c959 100755 --- a/api/api-prepare.sh +++ b/api/api-prepare.sh @@ -20,7 +20,7 @@ server { index index.htm index.html; location / { include uwsgi_params; - uwsgi_pass unix:///home/opnfv/repos/yardstick/api/yardstick.sock; + uwsgi_pass unix:///var/run/yardstick.sock; } } EOF @@ -47,3 +47,9 @@ command = uwsgi -i yardstick.ini autorestart = true EOF fi + +# create api log directory +mkdir -p /var/log/yardstick + +# create yardstick.sock for communicating +touch /var/run/yardstick.sock diff --git a/api/yardstick.ini b/api/yardstick.ini index 01025c2ef..2ba881fc1 100644 --- a/api/yardstick.ini +++ b/api/yardstick.ini @@ -12,5 +12,5 @@ chmod-socket = 666 callable = app enable-threads = true close-on-exec = 1 -daemonize=/home/opnfv/repos/yardstick/api/uwsgi.log -socket = /home/opnfv/repos/yardstick/api/yardstick.sock +daemonize= /var/log/yardstick/uwsgi.log +socket = /var/run/yardstick.sock diff --git a/api/yardstick.sock b/api/yardstick.sock deleted file mode 100644 index e69de29bb..000000000 --- a/api/yardstick.sock +++ /dev/null diff --git a/tests/opnfv/test_suites/opnfv_components.yaml b/tests/opnfv/test_suites/opnfv_components.yaml new file mode 100644 index 000000000..ff4923e03 --- /dev/null +++ b/tests/opnfv/test_suites/opnfv_components.yaml @@ -0,0 +1,16 @@ +--- +# Yardstick components task suite + +schema: "yardstick:suite:0.1" + +name: "opnfv_yardstick-components" +test_cases_dir: "tests/opnfv/test_cases/" +test_cases: +- + file_name: opnfv_yardstick_tc074.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"public_network": "ext-net", + "StorPerf_ip": "192.168.200.1"}' diff --git a/tests/opnfv/test_suites/opnfv_features.yaml b/tests/opnfv/test_suites/opnfv_features.yaml new file mode 100644 index 000000000..3621f1367 --- /dev/null +++ b/tests/opnfv/test_suites/opnfv_features.yaml @@ -0,0 +1,52 @@ +--- +# Yardstick features task suite + +schema: "yardstick:suite:0.1" + +name: "opnfv_yardstick-features" +test_cases_dir: "tests/opnfv/test_cases/" +test_cases: +- + file_name: opnfv_yardstick_tc027.yaml + constraint: + installer: compass,fuel + pod: huawei-pod1,lf-pod2 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml"}' + lf-pod2: '{"pod_info": "etc/yardstick/nodes/fuel_baremetal/pod.yaml", "openrc":"/root/openrc", "external_network":"admin_floating_net"}' +- + file_name: opnfv_yardstick_tc045.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc046.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc047.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc048.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc049.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc050.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc051.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc052.yaml + constraint: + installer: fuel +- + file_name: opnfv_yardstick_tc053.yaml + constraint: + installer: fuel diff --git a/tests/opnfv/test_suites/opnfv_performance.yaml b/tests/opnfv/test_suites/opnfv_performance.yaml new file mode 100644 index 000000000..71b1e2ef9 --- /dev/null +++ b/tests/opnfv/test_suites/opnfv_performance.yaml @@ -0,0 +1,62 @@ +--- +# Yardstick performance task suite + +schema: "yardstick:suite:0.1" + +name: "opnfv_yardstick-performance" +test_cases_dir: "tests/opnfv/test_cases/" +test_cases: +- + file_name: opnfv_yardstick_tc002.yaml +- + file_name: opnfv_yardstick_tc005.yaml +- + file_name: opnfv_yardstick_tc010.yaml +- + file_name: opnfv_yardstick_tc011.yaml +- + file_name: opnfv_yardstick_tc012.yaml +- + file_name: opnfv_yardstick_tc014.yaml +- + file_name: opnfv_yardstick_tc037.yaml +- + file_name: opnfv_yardstick_tc043.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node4.LF","target": "node5.LF"}' +- + file_name: opnfv_yardstick_tc055.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC055"}' +- + file_name: opnfv_yardstick_tc063.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node5.yardstick-TC063"}' +- + file_name: opnfv_yardstick_tc069.yaml +- + file_name: opnfv_yardstick_tc070.yaml +- + file_name: opnfv_yardstick_tc071.yaml +- + file_name: opnfv_yardstick_tc072.yaml +- + file_name: opnfv_yardstick_tc075.yaml + constraint: + installer: compass + pod: huawei-pod1 + task_args: + huawei-pod1: '{"pod_info": "etc/yardstick/nodes/compass_sclab_physical/pod.yaml", + "host": "node1.LF"}' diff --git a/tests/opnfv/test_suites/opnfv_smoke.yaml b/tests/opnfv/test_suites/opnfv_smoke.yaml new file mode 100644 index 000000000..f773bec87 --- /dev/null +++ b/tests/opnfv/test_suites/opnfv_smoke.yaml @@ -0,0 +1,14 @@ +--- +# Yardstick smoke task suite + +schema: "yardstick:suite:0.1" + +name: "opnfv_yardstick-smoke" +test_cases_dir: "tests/opnfv/test_cases/" +test_cases: +- + file_name: opnfv_yardstick_tc002.yaml +- + file_name: opnfv_yardstick_tc005.yaml +- + file_name: opnfv_yardstick_tc012.yaml diff --git a/tests/unit/test_ssh.py b/tests/unit/test_ssh.py index 8b828ed7c..045ac0f1b 100644 --- a/tests/unit/test_ssh.py +++ b/tests/unit/test_ssh.py @@ -310,12 +310,38 @@ class SSHRunTestCase(unittest.TestCase): @mock.patch("yardstick.ssh.open", create=True) def test__put_file_shell(self, mock_open): - self.test_client.run = mock.Mock() - self.test_client._put_file_shell("localfile", "remotefile", 0o42) + with mock.patch.object(self.test_client, "run") as run_mock: + self.test_client._put_file_shell("localfile", "remotefile", 0o42) + run_mock.assert_called_once_with( + 'cat > "remotefile"&& chmod -- 042 "remotefile"', + stdin=mock_open.return_value.__enter__.return_value) - self.test_client.run.assert_called_once_with( - 'cat > remotefile && chmod -- 042 remotefile', - stdin=mock_open.return_value.__enter__.return_value) + @mock.patch("yardstick.ssh.open", create=True) + def test__put_file_shell_space(self, mock_open): + with mock.patch.object(self.test_client, "run") as run_mock: + self.test_client._put_file_shell("localfile", + "filename with space", 0o42) + run_mock.assert_called_once_with( + 'cat > "filename with space"&& chmod -- 042 "filename with ' + 'space"', + stdin=mock_open.return_value.__enter__.return_value) + + @mock.patch("yardstick.ssh.open", create=True) + def test__put_file_shell_tilde(self, mock_open): + with mock.patch.object(self.test_client, "run") as run_mock: + self.test_client._put_file_shell("localfile", "~/remotefile", 0o42) + run_mock.assert_called_once_with( + 'cat > ~/"remotefile"&& chmod -- 042 ~/"remotefile"', + stdin=mock_open.return_value.__enter__.return_value) + + @mock.patch("yardstick.ssh.open", create=True) + def test__put_file_shell_tilde_spaces(self, mock_open): + with mock.patch.object(self.test_client, "run") as run_mock: + self.test_client._put_file_shell("localfile", "~/file with space", + 0o42) + run_mock.assert_called_once_with( + 'cat > ~/"file with space"&& chmod -- 042 ~/"file with space"', + stdin=mock_open.return_value.__enter__.return_value) @mock.patch("yardstick.ssh.os.stat") def test__put_file_sftp(self, mock_stat): diff --git a/yardstick/ssh.py b/yardstick/ssh.py index 3081001b6..927ca94db 100644 --- a/yardstick/ssh.py +++ b/yardstick/ssh.py @@ -66,6 +66,7 @@ import os import select import socket import time +import re import logging import paramiko @@ -252,7 +253,7 @@ class SSH(object): raise SSHError("Socket error.") exit_status = session.recv_exit_status() - if 0 != exit_status and raise_on_error: + if exit_status != 0 and raise_on_error: fmt = "Command '%(cmd)s' failed with exit_status %(status)d." details = fmt % {"cmd": cmd, "status": exit_status} if stderr_data: @@ -311,17 +312,21 @@ class SSH(object): mode = 0o777 & os.stat(localpath).st_mode sftp.chmod(remotepath, mode) + TILDE_EXPANSIONS_RE = re.compile("(^~[^/]*/)?(.*)") + def _put_file_shell(self, localpath, remotepath, mode=None): # quote to stop wordpslit - cmd = ['cat > %s' % remotepath] + tilde, remotepath = self.TILDE_EXPANSIONS_RE.match(remotepath).groups() + if not tilde: + tilde = '' + cmd = ['cat > %s"%s"' % (tilde, remotepath)] if mode is not None: # use -- so no options - cmd.append('chmod -- 0%o %s' % (mode, remotepath)) + cmd.append('chmod -- 0%o %s"%s"' % (mode, tilde, remotepath)) with open(localpath, "rb") as localfile: # only chmod on successful cat - cmd = " && ".join(cmd) - self.run(cmd, stdin=localfile) + self.run("&& ".join(cmd), stdin=localfile) def put_file(self, localpath, remotepath, mode=None): """Copy specified local file to the server. @@ -330,7 +335,6 @@ class SSH(object): :param remotepath: Remote filename. :param mode: Permissions to set after upload """ - import socket try: self._put_file_sftp(localpath, remotepath, mode=mode) except (paramiko.SSHException, socket.error): |