blob: e97fe3e4feb53039938d69e998524788bf8de726 [file] [log] [blame]
Joe Gordonc97f5c72013-02-14 01:15:57 +00001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2013 OpenStack Foundation
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
18import logging
Pavel Sedláka2b757c2013-02-25 18:16:04 +010019import shlex
20import subprocess
Joe Gordonc97f5c72013-02-14 01:15:57 +000021
22from tempest.openstack.common import cfg
Pavel Sedláka2b757c2013-02-25 18:16:04 +010023import tempest.test
Joe Gordonc97f5c72013-02-14 01:15:57 +000024
25LOG = logging.getLogger(__name__)
26
27cli_opts = [
28 cfg.BoolOpt('enabled',
29 default=True,
30 help="enable cli tests"),
31 cfg.StrOpt('cli_dir',
32 default='/usr/local/bin/',
33 help="directory where python client binaries are located"),
34]
35
36CONF = cfg.CONF
37cli_group = cfg.OptGroup(name='cli', title="cli Configuration Options")
38CONF.register_group(cli_group)
39CONF.register_opts(cli_opts, group=cli_group)
Pavel Sedláka2b757c2013-02-25 18:16:04 +010040
41
42class ClientTestBase(tempest.test.BaseTestCase):
43 @classmethod
44 def setUpClass(cls):
45 if not CONF.cli.enabled:
46 msg = "cli testing disabled"
47 raise cls.skipException(msg)
48 cls.identity = cls.config.identity
49 super(ClientTestBase, cls).setUpClass()
50
51 def __init__(self, *args, **kwargs):
52 super(ClientTestBase, self).__init__(*args, **kwargs)
53
54 def nova(self, action, flags='', params='', admin=True, fail_ok=False):
55 """Executes nova command for the given action."""
56 return self.cmd_with_auth(
57 'nova', action, flags, params, admin, fail_ok)
58
59 def cmd_with_auth(self, cmd, action, flags='', params='',
60 admin=True, fail_ok=False):
61 """Executes given command with auth attributes appended."""
62 #TODO(jogo) make admin=False work
63 creds = ('--os-username %s --os-tenant-name %s --os-password %s '
64 '--os-auth-url %s ' % (self.identity.admin_username,
65 self.identity.admin_tenant_name, self.identity.admin_password,
66 self.identity.uri))
67 flags = creds + ' ' + flags
68 return self.cmd(cmd, action, flags, params, fail_ok)
69
70 def cmd(self, cmd, action, flags='', params='', fail_ok=False):
71 """Executes specified command for the given action."""
72 cmd = ' '.join([CONF.cli.cli_dir + cmd,
73 flags, action, params])
74 LOG.info("running: '%s'" % cmd)
75 cmd = shlex.split(cmd)
76 try:
77 result = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
78 except subprocess.CalledProcessError, e:
79 LOG.error("command output:\n%s" % e.output)
80 raise
81 return result