import cStringIO import os import sys from novaclient import exceptions import novaclient.shell from tests import utils class ShellTest(utils.TestCase): # Patch os.environ to avoid required auth info. def setUp(self): global _old_env fake_env = { 'OS_USERNAME': 'username', 'OS_PASSWORD': 'password', 'OS_TENANT_NAME': 'tenant_name', 'OS_AUTH_URL': 'http://no.where', } _old_env, os.environ = os.environ, fake_env.copy() def shell(self, argstr): orig = sys.stdout try: sys.stdout = cStringIO.StringIO() _shell = novaclient.shell.OpenStackComputeShell() _shell.main(argstr.split()) except SystemExit: exc_type, exc_value, exc_traceback = sys.exc_info() self.assertEqual(exc_value.code, 0) finally: out = sys.stdout.getvalue() sys.stdout.close() sys.stdout = orig return out def tearDown(self): global _old_env os.environ = _old_env def test_help_unknown_command(self): self.assertRaises(exceptions.CommandError, self.shell, 'help foofoo') def test_help(self): required = [ '^usage: ', '(?m)^\s+root-password\s+Change the root password', '(?m)^See "nova help COMMAND" for help on a specific command', ] help_text = self.shell('help') for r in required: self.assertRegexpMatches(help_text, r) def test_help_on_subcommand(self): required = [ '^usage: nova root-password', '(?m)^Change the root password', '(?m)^Positional arguments:', ] help_text = self.shell('help root-password') for r in required: self.assertRegexpMatches(help_text, r)