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