blob: 65481de0a5ca5d43d4e9167843c937a54579f9c4 [file] [log] [blame]
step682980c14ec2016-02-23 14:53:52 -05001# Copyright 2016 Rackspace
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15import os
16import shutil
17import subprocess
18import tempfile
19
Anna Pankiewicz0691ee52018-06-19 15:04:22 -050020from mock import patch
21try:
22 from StringIO import StringIO
23except ImportError:
24 from io import StringIO
Cao Xuan Hoang36fe23c2016-08-25 16:11:14 +070025from tempest.cmd import workspace
step682980c14ec2016-02-23 14:53:52 -050026from tempest.lib.common.utils import data_utils
27from tempest.tests import base
28
29
30class TestTempestWorkspaceBase(base.TestCase):
31 def setUp(self):
32 super(TestTempestWorkspaceBase, self).setUp()
33 self.name = data_utils.rand_uuid()
34 self.path = tempfile.mkdtemp()
35 self.addCleanup(shutil.rmtree, self.path, ignore_errors=True)
36 store_dir = tempfile.mkdtemp()
37 self.addCleanup(shutil.rmtree, store_dir, ignore_errors=True)
38 self.store_file = os.path.join(store_dir, 'workspace.yaml')
Cao Xuan Hoang36fe23c2016-08-25 16:11:14 +070039 self.workspace_manager = workspace.WorkspaceManager(
40 path=self.store_file)
step682980c14ec2016-02-23 14:53:52 -050041 self.workspace_manager.register_new_workspace(self.name, self.path)
42
43
44class TestTempestWorkspace(TestTempestWorkspaceBase):
45 def _run_cmd_gets_return_code(self, cmd, expected):
46 process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
47 stderr=subprocess.PIPE)
48 stdout, stderr = process.communicate()
49 return_code = process.returncode
zhuflbedb2ad2016-06-20 11:39:01 +080050 msg = ("%s failed with:\nstdout: %s\nstderr: %s" % (' '.join(cmd),
51 stdout, stderr))
step682980c14ec2016-02-23 14:53:52 -050052 self.assertEqual(return_code, expected, msg)
53
54 def test_run_workspace_list(self):
Masayuki Igawa00effc92016-07-25 12:28:26 +090055 cmd = ['tempest', 'workspace', 'list',
56 '--workspace-path', self.store_file]
step682980c14ec2016-02-23 14:53:52 -050057 self._run_cmd_gets_return_code(cmd, 0)
58
59 def test_run_workspace_register(self):
60 name = data_utils.rand_uuid()
61 path = tempfile.mkdtemp()
62 self.addCleanup(shutil.rmtree, path, ignore_errors=True)
Masayuki Igawa00effc92016-07-25 12:28:26 +090063 cmd = ['tempest', 'workspace', 'register',
64 '--workspace-path', self.store_file,
65 '--name', name, '--path', path]
step682980c14ec2016-02-23 14:53:52 -050066 self._run_cmd_gets_return_code(cmd, 0)
67 self.assertIsNotNone(self.workspace_manager.get_workspace(name))
68
69 def test_run_workspace_rename(self):
70 new_name = data_utils.rand_uuid()
Masayuki Igawa00effc92016-07-25 12:28:26 +090071 cmd = ['tempest', 'workspace', 'rename',
72 '--workspace-path', self.store_file,
73 '--old-name', self.name, '--new-name', new_name]
step682980c14ec2016-02-23 14:53:52 -050074 self._run_cmd_gets_return_code(cmd, 0)
75 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
76 self.assertIsNotNone(self.workspace_manager.get_workspace(new_name))
77
78 def test_run_workspace_move(self):
79 new_path = tempfile.mkdtemp()
80 self.addCleanup(shutil.rmtree, new_path, ignore_errors=True)
Masayuki Igawa00effc92016-07-25 12:28:26 +090081 cmd = ['tempest', 'workspace', 'move',
82 '--workspace-path', self.store_file,
83 '--name', self.name, '--path', new_path]
step682980c14ec2016-02-23 14:53:52 -050084 self._run_cmd_gets_return_code(cmd, 0)
85 self.assertEqual(
86 self.workspace_manager.get_workspace(self.name), new_path)
87
Chandan Kumarb78e2572017-06-26 19:34:34 +053088 def test_run_workspace_remove_entry(self):
Masayuki Igawa00effc92016-07-25 12:28:26 +090089 cmd = ['tempest', 'workspace', 'remove',
90 '--workspace-path', self.store_file,
91 '--name', self.name]
step682980c14ec2016-02-23 14:53:52 -050092 self._run_cmd_gets_return_code(cmd, 0)
93 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
94
Chandan Kumarb78e2572017-06-26 19:34:34 +053095 def test_run_workspace_remove_directory(self):
96 cmd = ['tempest', 'workspace', 'remove',
97 '--workspace-path', self.store_file,
98 '--name', self.name, '--rmdir']
99 self._run_cmd_gets_return_code(cmd, 0)
100 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
101
step682980c14ec2016-02-23 14:53:52 -0500102
103class TestTempestWorkspaceManager(TestTempestWorkspaceBase):
104 def setUp(self):
105 super(TestTempestWorkspaceManager, self).setUp()
106 self.name = data_utils.rand_uuid()
107 self.path = tempfile.mkdtemp()
108 self.addCleanup(shutil.rmtree, self.path, ignore_errors=True)
109 store_dir = tempfile.mkdtemp()
110 self.addCleanup(shutil.rmtree, store_dir, ignore_errors=True)
111 self.store_file = os.path.join(store_dir, 'workspace.yaml')
Cao Xuan Hoang36fe23c2016-08-25 16:11:14 +0700112 self.workspace_manager = workspace.WorkspaceManager(
113 path=self.store_file)
step682980c14ec2016-02-23 14:53:52 -0500114 self.workspace_manager.register_new_workspace(self.name, self.path)
115
116 def test_workspace_manager_get(self):
117 self.assertIsNotNone(self.workspace_manager.get_workspace(self.name))
118
119 def test_workspace_manager_rename(self):
120 new_name = data_utils.rand_uuid()
121 self.workspace_manager.rename_workspace(self.name, new_name)
122 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
123 self.assertIsNotNone(self.workspace_manager.get_workspace(new_name))
124
Manik Bindlish864f37e2018-09-06 06:30:51 +0000125 def test_workspace_manager_rename_no_name_exist(self):
126 no_name = ""
127 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
128 ex = self.assertRaises(SystemExit,
129 self.workspace_manager.rename_workspace,
130 self.name, no_name)
131 self.assertEqual(1, ex.code)
132 self.assertEqual(mock_stdout.getvalue(),
133 "None or empty name is specified."
134 " Please specify correct name for workspace.\n")
135
step682980c14ec2016-02-23 14:53:52 -0500136 def test_workspace_manager_move(self):
137 new_path = tempfile.mkdtemp()
138 self.addCleanup(shutil.rmtree, new_path, ignore_errors=True)
139 self.workspace_manager.move_workspace(self.name, new_path)
140 self.assertEqual(
141 self.workspace_manager.get_workspace(self.name), new_path)
142
Manik Bindlish6c956782018-10-25 06:59:55 +0000143 def test_workspace_manager_move_no_workspace_path(self):
144 new_path = ""
145 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
146 ex = self.assertRaises(SystemExit,
147 self.workspace_manager.move_workspace,
148 self.name, new_path)
149 self.assertEqual(1, ex.code)
150 self.assertEqual(mock_stdout.getvalue(),
151 "None or empty path is specified for workspace."
152 " Please specify correct workspace path.\n")
153
Chandan Kumarb78e2572017-06-26 19:34:34 +0530154 def test_workspace_manager_remove_entry(self):
155 self.workspace_manager.remove_workspace_entry(self.name)
156 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
157
158 def test_workspace_manager_remove_directory(self):
159 path = self.workspace_manager.remove_workspace_entry(self.name)
160 self.workspace_manager.remove_workspace_directory(path)
step682980c14ec2016-02-23 14:53:52 -0500161 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
162
Manik Bindlish6c956782018-10-25 06:59:55 +0000163 def test_workspace_manager_remove_directory_no_path(self):
164 no_path = ""
165 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
166 ex = self.assertRaises(SystemExit,
167 self.workspace_manager.
168 remove_workspace_directory,
169 no_path)
170 self.assertEqual(1, ex.code)
171 self.assertEqual(mock_stdout.getvalue(),
172 "None or empty path is specified for workspace."
173 " Please specify correct workspace path.\n")
174
step682980c14ec2016-02-23 14:53:52 -0500175 def test_path_expansion(self):
176 name = data_utils.rand_uuid()
177 path = os.path.join("~", name)
178 os.makedirs(os.path.expanduser(path))
179 self.addCleanup(shutil.rmtree, path, ignore_errors=True)
180 self.workspace_manager.register_new_workspace(name, path)
181 self.assertIsNotNone(self.workspace_manager.get_workspace(name))
Anna Pankiewicz0691ee52018-06-19 15:04:22 -0500182
183 def test_workspace_name_not_exists(self):
184 nonexistent_name = data_utils.rand_uuid()
185 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
186 ex = self.assertRaises(SystemExit,
187 self.workspace_manager._name_exists,
188 nonexistent_name)
189 self.assertEqual(1, ex.code)
190 self.assertEqual(mock_stdout.getvalue(),
191 "A workspace was not found with name: %s\n" %
192 nonexistent_name)
193
194 def test_workspace_name_already_exists(self):
195 duplicate_name = self.name
196 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
197 ex = self.assertRaises(SystemExit,
198 self.workspace_manager.
199 _workspace_name_exists,
200 duplicate_name)
201 self.assertEqual(1, ex.code)
202 self.assertEqual(mock_stdout.getvalue(),
203 "A workspace already exists with name: %s.\n"
204 % duplicate_name)
205
206 def test_workspace_manager_path_not_exist(self):
207 fake_path = "fake_path"
208 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
209 ex = self.assertRaises(SystemExit,
210 self.workspace_manager._validate_path,
211 fake_path)
212 self.assertEqual(1, ex.code)
213 self.assertEqual(mock_stdout.getvalue(),
214 "Path does not exist.\n")
215
216 def test_workspace_manager_list_workspaces(self):
217 listed = self.workspace_manager.list_workspaces()
218 self.assertEqual(1, len(listed))
219 self.assertIn(self.name, listed)
220 self.assertEqual(self.path, listed.get(self.name))
Manik Bindlish864f37e2018-09-06 06:30:51 +0000221
222 def test_register_new_workspace_no_name(self):
223 no_name = ""
224 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
225 ex = self.assertRaises(SystemExit,
226 self.workspace_manager.
227 register_new_workspace,
228 no_name, self.path)
229 self.assertEqual(1, ex.code)
230 self.assertEqual(mock_stdout.getvalue(),
231 "None or empty name is specified."
232 " Please specify correct name for workspace.\n")
Manik Bindlish6c956782018-10-25 06:59:55 +0000233
234 def test_register_new_workspace_no_path(self):
235 no_path = ""
236 with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
237 ex = self.assertRaises(SystemExit,
238 self.workspace_manager.
239 register_new_workspace,
240 self.name, no_path)
241 self.assertEqual(1, ex.code)
242 self.assertEqual(mock_stdout.getvalue(),
243 "None or empty path is specified for workspace."
244 " Please specify correct workspace path.\n")