blob: 2639d9308693ef4e2ed741dd467e683c11daf526 [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
20from tempest.cmd.workspace import WorkspaceManager
21from tempest.lib.common.utils import data_utils
22from tempest.tests import base
23
24
25class TestTempestWorkspaceBase(base.TestCase):
26 def setUp(self):
27 super(TestTempestWorkspaceBase, self).setUp()
28 self.name = data_utils.rand_uuid()
29 self.path = tempfile.mkdtemp()
30 self.addCleanup(shutil.rmtree, self.path, ignore_errors=True)
31 store_dir = tempfile.mkdtemp()
32 self.addCleanup(shutil.rmtree, store_dir, ignore_errors=True)
33 self.store_file = os.path.join(store_dir, 'workspace.yaml')
34 self.workspace_manager = WorkspaceManager(path=self.store_file)
35 self.workspace_manager.register_new_workspace(self.name, self.path)
36
37
38class TestTempestWorkspace(TestTempestWorkspaceBase):
39 def _run_cmd_gets_return_code(self, cmd, expected):
40 process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
41 stderr=subprocess.PIPE)
42 stdout, stderr = process.communicate()
43 return_code = process.returncode
zhuflbedb2ad2016-06-20 11:39:01 +080044 msg = ("%s failed with:\nstdout: %s\nstderr: %s" % (' '.join(cmd),
45 stdout, stderr))
step682980c14ec2016-02-23 14:53:52 -050046 self.assertEqual(return_code, expected, msg)
47
48 def test_run_workspace_list(self):
49 cmd = ['tempest', 'workspace', '--workspace-path',
50 self.store_file, 'list']
51 self._run_cmd_gets_return_code(cmd, 0)
52
53 def test_run_workspace_register(self):
54 name = data_utils.rand_uuid()
55 path = tempfile.mkdtemp()
56 self.addCleanup(shutil.rmtree, path, ignore_errors=True)
57 cmd = ['tempest', 'workspace', '--workspace-path', self.store_file,
58 'register', '--name', name, '--path', path]
59 self._run_cmd_gets_return_code(cmd, 0)
60 self.assertIsNotNone(self.workspace_manager.get_workspace(name))
61
62 def test_run_workspace_rename(self):
63 new_name = data_utils.rand_uuid()
64 cmd = ['tempest', 'workspace', '--workspace-path', self.store_file,
65 'rename', "--old-name", self.name, '--new-name', new_name]
66 self._run_cmd_gets_return_code(cmd, 0)
67 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
68 self.assertIsNotNone(self.workspace_manager.get_workspace(new_name))
69
70 def test_run_workspace_move(self):
71 new_path = tempfile.mkdtemp()
72 self.addCleanup(shutil.rmtree, new_path, ignore_errors=True)
73 cmd = ['tempest', 'workspace', '--workspace-path', self.store_file,
74 'move', '--name', self.name, '--path', new_path]
75 self._run_cmd_gets_return_code(cmd, 0)
76 self.assertEqual(
77 self.workspace_manager.get_workspace(self.name), new_path)
78
79 def test_run_workspace_remove(self):
80 cmd = ['tempest', 'workspace', '--workspace-path', self.store_file,
81 'remove', '--name', self.name]
82 self._run_cmd_gets_return_code(cmd, 0)
83 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
84
85
86class TestTempestWorkspaceManager(TestTempestWorkspaceBase):
87 def setUp(self):
88 super(TestTempestWorkspaceManager, self).setUp()
89 self.name = data_utils.rand_uuid()
90 self.path = tempfile.mkdtemp()
91 self.addCleanup(shutil.rmtree, self.path, ignore_errors=True)
92 store_dir = tempfile.mkdtemp()
93 self.addCleanup(shutil.rmtree, store_dir, ignore_errors=True)
94 self.store_file = os.path.join(store_dir, 'workspace.yaml')
95 self.workspace_manager = WorkspaceManager(path=self.store_file)
96 self.workspace_manager.register_new_workspace(self.name, self.path)
97
98 def test_workspace_manager_get(self):
99 self.assertIsNotNone(self.workspace_manager.get_workspace(self.name))
100
101 def test_workspace_manager_rename(self):
102 new_name = data_utils.rand_uuid()
103 self.workspace_manager.rename_workspace(self.name, new_name)
104 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
105 self.assertIsNotNone(self.workspace_manager.get_workspace(new_name))
106
107 def test_workspace_manager_move(self):
108 new_path = tempfile.mkdtemp()
109 self.addCleanup(shutil.rmtree, new_path, ignore_errors=True)
110 self.workspace_manager.move_workspace(self.name, new_path)
111 self.assertEqual(
112 self.workspace_manager.get_workspace(self.name), new_path)
113
114 def test_workspace_manager_remove(self):
115 self.workspace_manager.remove_workspace(self.name)
116 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
117
118 def test_path_expansion(self):
119 name = data_utils.rand_uuid()
120 path = os.path.join("~", name)
121 os.makedirs(os.path.expanduser(path))
122 self.addCleanup(shutil.rmtree, path, ignore_errors=True)
123 self.workspace_manager.register_new_workspace(name, path)
124 self.assertIsNotNone(self.workspace_manager.get_workspace(name))