summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorMark McLoughlin <markmc@redhat.com>2011-10-14 12:25:30 +0100
committerMark McLoughlin <markmc@redhat.com>2011-10-19 07:36:02 +0100
commit5ee3e31eb189b7bc46bb009b99c12b8e58417a0d (patch)
tree8cf2ca5204e9799777330a47b2023894dc86a901 /nova/tests
parent2431b7848d633dc67ad684b4d1cc79468df24568 (diff)
Start switching from gflags to optparse
Re-write the nova.flags module to use optparse instead of gflags. This provides an easier path to switching completely to optparse. Next steps are to: 1) Gradually switch each of the individual flags to optparse 2) Re-use config code from other projects via openstack-common optparse was chosen instead of argparse purely because that's what the other projects use and that's what makes most sense for openstack-common. Switching to argparse is something that can be done later in openstack-common. Change-Id: Ia49d42b4c7cc208fba140db6b8fd8f33c0f89e04
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/test_flags.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/nova/tests/test_flags.py b/nova/tests/test_flags.py
index 05319d91f..dab11c5e0 100644
--- a/nova/tests/test_flags.py
+++ b/nova/tests/test_flags.py
@@ -3,6 +3,7 @@
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
+# Copyright 2011 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
@@ -16,6 +17,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+import exceptions
+import os
+import tempfile
+
from nova import exception
from nova import flags
from nova import test
@@ -64,6 +69,37 @@ class FlagsTestCase(test.TestCase):
self.assertEqual(self.FLAGS.false, True)
self.assertEqual(self.FLAGS.true, False)
+ def test_define_float(self):
+ flags.DEFINE_float('float', 6.66, 'desc', flag_values=self.FLAGS)
+ self.assertEqual(self.FLAGS.float, 6.66)
+
+ def test_define_multistring(self):
+ flags.DEFINE_multistring('multi', [], 'desc', flag_values=self.FLAGS)
+
+ argv = ['flags_test', '--multi', 'foo', '--multi', 'bar']
+ self.FLAGS(argv)
+
+ self.assertEqual(self.FLAGS.multi, ['foo', 'bar'])
+
+ def test_define_list(self):
+ flags.DEFINE_list('list', ['foo'], 'desc', flag_values=self.FLAGS)
+
+ self.assert_(self.FLAGS['list'])
+ self.assertEqual(self.FLAGS.list, ['foo'])
+
+ argv = ['flags_test', '--list=a,b,c,d']
+ self.FLAGS(argv)
+
+ self.assertEqual(self.FLAGS.list, ['a', 'b', 'c', 'd'])
+
+ def test_error(self):
+ flags.DEFINE_integer('error', 1, 'desc', flag_values=self.FLAGS)
+
+ self.assertEqual(self.FLAGS.error, 1)
+
+ argv = ['flags_test', '--error=foo']
+ self.assertRaises(exceptions.SystemExit, self.FLAGS, argv)
+
def test_declare(self):
self.assert_('answer' not in self.global_FLAGS)
flags.DECLARE('answer', 'nova.tests.declare_flags')
@@ -76,6 +112,14 @@ class FlagsTestCase(test.TestCase):
flags.DECLARE('answer', 'nova.tests.declare_flags')
self.assertEqual(self.global_FLAGS.answer, 256)
+ def test_getopt_non_interspersed_args(self):
+ self.assert_('runtime_answer' not in self.global_FLAGS)
+
+ argv = ['flags_test', 'extra_arg', '--runtime_answer=60']
+ args = self.global_FLAGS(argv)
+ self.assertEqual(len(args), 3)
+ self.assertEqual(argv, args)
+
def test_runtime_and_unknown_flags(self):
self.assert_('runtime_answer' not in self.global_FLAGS)
@@ -114,3 +158,49 @@ class FlagsTestCase(test.TestCase):
self.assertEqual(FLAGS.flags_unittest, 'foo')
FLAGS.flags_unittest = 'bar'
self.assertEqual(FLAGS.flags_unittest, 'bar')
+
+ def test_flag_overrides(self):
+ self.assertEqual(FLAGS.flags_unittest, 'foo')
+ self.flags(flags_unittest='bar')
+ self.assertEqual(FLAGS.flags_unittest, 'bar')
+ self.assertEqual(FLAGS['flags_unittest'].value, 'bar')
+ self.assertEqual(FLAGS.FlagValuesDict()['flags_unittest'], 'bar')
+ self.reset_flags()
+ self.assertEqual(FLAGS.flags_unittest, 'foo')
+ self.assertEqual(FLAGS['flags_unittest'].value, 'foo')
+ self.assertEqual(FLAGS.FlagValuesDict()['flags_unittest'], 'foo')
+
+ def test_flagfile(self):
+ flags.DEFINE_string('string', 'default', 'desc',
+ flag_values=self.FLAGS)
+ flags.DEFINE_integer('int', 1, 'desc', flag_values=self.FLAGS)
+ flags.DEFINE_bool('false', False, 'desc', flag_values=self.FLAGS)
+ flags.DEFINE_bool('true', True, 'desc', flag_values=self.FLAGS)
+
+ (fd, path) = tempfile.mkstemp(prefix='nova', suffix='.flags')
+
+ try:
+ os.write(fd, '--string=foo\n--int=2\n--false\n--notrue\n')
+ os.close(fd)
+
+ self.FLAGS(['flags_test', '--flagfile=' + path])
+
+ self.assertEqual(self.FLAGS.string, 'foo')
+ self.assertEqual(self.FLAGS.int, 2)
+ self.assertEqual(self.FLAGS.false, True)
+ self.assertEqual(self.FLAGS.true, False)
+ finally:
+ os.remove(path)
+
+ def test_defaults(self):
+ flags.DEFINE_string('foo', 'bar', 'help', flag_values=self.FLAGS)
+ self.assertEqual(self.FLAGS.foo, 'bar')
+
+ self.FLAGS['foo'].SetDefault('blaa')
+ self.assertEqual(self.FLAGS.foo, 'blaa')
+
+ def test_templated_values(self):
+ flags.DEFINE_string('foo', 'foo', 'help', flag_values=self.FLAGS)
+ flags.DEFINE_string('bar', 'bar', 'help', flag_values=self.FLAGS)
+ flags.DEFINE_string('blaa', '$foo$bar', 'help', flag_values=self.FLAGS)
+ self.assertEqual(self.FLAGS.blaa, 'foobar')