diff options
Diffstat (limited to 'testsuite/Testlib/TestOptions.py')
-rw-r--r-- | testsuite/Testlib/TestOptions.py | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/testsuite/Testlib/TestOptions.py b/testsuite/Testlib/TestOptions.py new file mode 100644 index 000000000..f5833a54a --- /dev/null +++ b/testsuite/Testlib/TestOptions.py @@ -0,0 +1,124 @@ +import os +import sys +import unittest +from mock import Mock, patch +import Bcfg2.Options + +class TestOption(unittest.TestCase): + def test__init(self): + self.assertRaises(Bcfg2.Options.OptionFailure, + Bcfg2.Options.Option, + 'foo', False, cmd='f') + self.assertRaises(Bcfg2.Options.OptionFailure, + Bcfg2.Options.Option, + 'foo', False, cmd='--f') + self.assertRaises(Bcfg2.Options.OptionFailure, + Bcfg2.Options.Option, + 'foo', False, cmd='-foo') + self.assertRaises(Bcfg2.Options.OptionFailure, + Bcfg2.Options.Option, + 'foo', False, cmd='-foo', long_arg=True) + + @patch('ConfigParser.ConfigParser') + @patch('__builtin__.open') + def test_getCFP(self, mock_open, mock_cp): + mock_cp.return_value = Mock() + o = Bcfg2.Options.Option('foo', False, cmd='-f') + self.assertFalse(o._Option__cfp) + o.getCFP() + mock_cp.assert_any_call() + mock_open.assert_any_call(Bcfg2.Options.DEFAULT_CONFIG_LOCATION) + self.assertTrue(mock_cp.return_value.readfp.called) + + @patch('Bcfg2.Options.Option.cfp') + def test_parse(self, mock_cfp): + cf = ('communication', 'password') + o = Bcfg2.Options.Option('foo', 'test4', cmd='-F', env='TEST2', + odesc='bar', cf=cf) + o.parse([], ['-F', 'test']) + self.assertEqual(o.value, 'test') + o.parse([('-F', 'test2')], []) + self.assertEqual(o.value, 'test2') + + os.environ['TEST2'] = 'test3' + o.parse([], []) + self.assertEqual(o.value, 'test3') + del os.environ['TEST2'] + + mock_cfp.get = Mock() + mock_cfp.get.return_value = 'test5' + o.parse([], []) + self.assertEqual(o.value, 'test5') + mock_cfp.get.assert_any_call(*cf) + + o.cf = False + o.parse([], []) + assert o.value == 'test4' + + def test_cook(self): + # check that default value isn't cooked + o1 = Bcfg2.Options.Option('foo', 'test4', cook=Bcfg2.Options.bool_cook) + o1.parse([], []) + assert o1.value == 'test4' + o2 = Bcfg2.Options.Option('foo', False, cmd='-F') + o2.parse([('-F', '')], []) + assert o2.value == True + + +class TestOptionSet(unittest.TestCase): + def test_buildGetopt(self): + opts = [('foo', Bcfg2.Options.Option('foo', 'test1', cmd='-G')), + ('bar', Bcfg2.Options.Option('foo', 'test2')), + ('baz', Bcfg2.Options.Option('foo', 'test1', cmd='-H', + odesc='1'))] + oset = Bcfg2.Options.OptionSet(opts) + res = oset.buildGetopt() + self.assertIn('H:', res) + self.assertIn('G', res) + self.assertEqual(len(res), 3) + + def test_buildLongGetopt(self): + opts = [('foo', Bcfg2.Options.Option('foo', 'test1', cmd='-G')), + ('bar', Bcfg2.Options.Option('foo', 'test2')), + ('baz', Bcfg2.Options.Option('foo', 'test1', cmd='--H', + odesc='1', long_arg=True))] + oset = Bcfg2.Options.OptionSet(opts) + res = oset.buildLongGetopt() + self.assertIn('H=', res) + self.assertEqual(len(res), 1) + + def test_parse(self): + opts = [('foo', Bcfg2.Options.Option('foo', 'test1', cmd='-G')), + ('bar', Bcfg2.Options.Option('foo', 'test2')), + ('baz', Bcfg2.Options.Option('foo', 'test1', cmd='-H', + odesc='1'))] + oset = Bcfg2.Options.OptionSet(opts) + self.assertRaises(SystemExit, + oset.parse, + ['-G', '-H']) + oset2 = Bcfg2.Options.OptionSet(opts) + self.assertRaises(SystemExit, + oset2.parse, + ['-h']) + oset3 = Bcfg2.Options.OptionSet(opts) + oset3.parse(['-G']) + self.assertTrue(oset3['foo']) + + +class TestOptionParser(unittest.TestCase): + def test__init(self): + opts = [('foo', Bcfg2.Options.Option('foo', 'test1', cmd='-h')), + ('bar', Bcfg2.Options.Option('foo', 'test2')), + ('baz', Bcfg2.Options.Option('foo', 'test1', cmd='-H', + odesc='1'))] + oset1 = Bcfg2.Options.OptionParser(opts) + self.assertEqual(Bcfg2.Options.Option.cfpath, + Bcfg2.Options.DEFAULT_CONFIG_LOCATION) + sys.argv = ['foo', '-C', '/usr/local/etc/bcfg2.conf'] + oset2 = Bcfg2.Options.OptionParser(opts) + self.assertEqual(Bcfg2.Options.Option.cfpath, + '/usr/local/etc/bcfg2.conf') + sys.argv = [] + oset3 = Bcfg2.Options.OptionParser(opts) + self.assertEqual(Bcfg2.Options.Option.cfpath, + Bcfg2.Options.DEFAULT_CONFIG_LOCATION) |