blob: dc6c0c885055ff2d72a598785ec6b419d4f48980 [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):
Masayuki Igawa00effc92016-07-25 12:28:26 +090050 cmd = ['tempest', 'workspace', 'list',
51 '--workspace-path', self.store_file]
step682980c14ec2016-02-23 14:53:52 -050052 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)
Masayuki Igawa00effc92016-07-25 12:28:26 +090058 cmd = ['tempest', 'workspace', 'register',
59 '--workspace-path', self.store_file,
60 '--name', name, '--path', path]
step682980c14ec2016-02-23 14:53:52 -050061 self._run_cmd_gets_return_code(cmd, 0)
62 self.assertIsNotNone(self.workspace_manager.get_workspace(name))
63
64 def test_run_workspace_rename(self):
65 new_name = data_utils.rand_uuid()
Masayuki Igawa00effc92016-07-25 12:28:26 +090066 cmd = ['tempest', 'workspace', 'rename',
67 '--workspace-path', self.store_file,
68 '--old-name', self.name, '--new-name', new_name]
step682980c14ec2016-02-23 14:53:52 -050069 self._run_cmd_gets_return_code(cmd, 0)
70 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
71 self.assertIsNotNone(self.workspace_manager.get_workspace(new_name))
72
73 def test_run_workspace_move(self):
74 new_path = tempfile.mkdtemp()
75 self.addCleanup(shutil.rmtree, new_path, ignore_errors=True)
Masayuki Igawa00effc92016-07-25 12:28:26 +090076 cmd = ['tempest', 'workspace', 'move',
77 '--workspace-path', self.store_file,
78 '--name', self.name, '--path', new_path]
step682980c14ec2016-02-23 14:53:52 -050079 self._run_cmd_gets_return_code(cmd, 0)
80 self.assertEqual(
81 self.workspace_manager.get_workspace(self.name), new_path)
82
83 def test_run_workspace_remove(self):
Masayuki Igawa00effc92016-07-25 12:28:26 +090084 cmd = ['tempest', 'workspace', 'remove',
85 '--workspace-path', self.store_file,
86 '--name', self.name]
step682980c14ec2016-02-23 14:53:52 -050087 self._run_cmd_gets_return_code(cmd, 0)
88 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
89
90
91class TestTempestWorkspaceManager(TestTempestWorkspaceBase):
92 def setUp(self):
93 super(TestTempestWorkspaceManager, self).setUp()
94 self.name = data_utils.rand_uuid()
95 self.path = tempfile.mkdtemp()
96 self.addCleanup(shutil.rmtree, self.path, ignore_errors=True)
97 store_dir = tempfile.mkdtemp()
98 self.addCleanup(shutil.rmtree, store_dir, ignore_errors=True)
99 self.store_file = os.path.join(store_dir, 'workspace.yaml')
Cao Xuan Hoang36fe23c2016-08-25 16:11:14 +0700100 self.workspace_manager = workspace.WorkspaceManager(
101 path=self.store_file)
step682980c14ec2016-02-23 14:53:52 -0500102 self.workspace_manager.register_new_workspace(self.name, self.path)
103
104 def test_workspace_manager_get(self):
105 self.assertIsNotNone(self.workspace_manager.get_workspace(self.name))
106
107 def test_workspace_manager_rename(self):
108 new_name = data_utils.rand_uuid()
109 self.workspace_manager.rename_workspace(self.name, new_name)
110 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
111 self.assertIsNotNone(self.workspace_manager.get_workspace(new_name))
112
113 def test_workspace_manager_move(self):
114 new_path = tempfile.mkdtemp()
115 self.addCleanup(shutil.rmtree, new_path, ignore_errors=True)
116 self.workspace_manager.move_workspace(self.name, new_path)
117 self.assertEqual(
118 self.workspace_manager.get_workspace(self.name), new_path)
119
120 def test_workspace_manager_remove(self):
121 self.workspace_manager.remove_workspace(self.name)
122 self.assertIsNone(self.workspace_manager.get_workspace(self.name))
123
124 def test_path_expansion(self):
125 name = data_utils.rand_uuid()
126 path = os.path.join("~", name)
127 os.makedirs(os.path.expanduser(path))
128 self.addCleanup(shutil.rmtree, path, ignore_errors=True)
129 self.workspace_manager.register_new_workspace(name, path)
130 self.assertIsNotNone(self.workspace_manager.get_workspace(name))