Test option parser fallbacks more thoroughly
authorGuido Günther <agx@sigxcpu.org>
Tue, 1 Apr 2014 08:03:35 +0000 (10:03 +0200)
committerGuido Günther <agx@sigxcpu.org>
Tue, 1 Apr 2014 09:33:06 +0000 (11:33 +0200)
revealing another bug where we overwrote parsed values with defaults

Closes: #733759

gbp/config.py
tests/18_test_Config.py [new file with mode: 0644]
tests/data/test1.conf [new file with mode: 0644]

index 93961a2..1980daa 100644 (file)
@@ -335,7 +335,6 @@ class GbpOptionParser(OptionParser):
 
         # Update with command specific settings
         if parser.has_section(cmd):
-            self.config.update(dict(parser.items(cmd, raw=True)))
             # Don't use items() until we got rid of the compat sections
             # since this pulls in the defaults again
             self.config.update(dict(parser._sections[cmd].items()))
diff --git a/tests/18_test_Config.py b/tests/18_test_Config.py
new file mode 100644 (file)
index 0000000..701288b
--- /dev/null
@@ -0,0 +1,64 @@
+# vim: set fileencoding=utf-8 :
+
+import os
+import unittest
+from gbp.config import GbpOptionParser
+from . import context
+
+class TestConfigParser(unittest.TestCase):
+    def setUp(self):
+        self.conffiles_save = os.environ.get('GBP_CONF_FILES')
+        self.confname = 'tests/data/test1.conf'
+        self.assertTrue(os.stat(self.confname))
+        os.environ['GBP_CONF_FILES'] = self.confname
+
+    def tearDown(self):
+        if self.conffiles_save:
+            os.environ['GBP_CONF_FILES'] = self.conffiles_save
+
+    def test_default(self):
+        """
+        A value only in the default section should be available in all commands
+        """
+        for n in range(1,5):
+            for prefix in [ '', 'git-', 'gbp-' ]:
+                parser = GbpOptionParser('cmd%d' % n)
+                self.assertEqual(parser.config['default_option'], 'default_default1')
+
+    def test_single_override(self):
+        """
+        A value in any command section should override the default
+        """
+        for prefix in [ '', 'git-', 'gbp-' ]:
+            parser = GbpOptionParser('%scmd1' % prefix)
+            self.assertEqual(parser.config['single_override_option1'], 'single_override_value1')
+
+    def test_single_git_override(self):
+        """
+        A value in any git-command section should override the default
+        """
+        for prefix in [ '', 'git-' ]:
+            parser = GbpOptionParser('%scmd2' % prefix)
+            self.assertEqual(parser.config['single_git_override_option1'], 'single_git_override_value1')
+
+    def test_single_gbp_override(self):
+        """
+        A value in any gbp-command section should override the default
+        """
+        for prefix in [ '', 'gbp-' ]:
+            parser = GbpOptionParser('%scmd3' % prefix)
+            self.assertEqual(parser.config['single_gbp_override_option1'], 'single_gbp_override_value1')
+        # FIXME: for all prefixes
+
+    def test_new_overrides_git(self):
+        """
+        A value in the cmd section should override the old git-cmd section independent from
+        how we're invoked
+        """
+        for n in range(4, 6):
+            for prefix in [ '', 'git-']:
+                cmd = '%scmd%d' % (prefix, n)
+                parser = GbpOptionParser(cmd)
+                actual = parser.config['new_overrides_git_option1']
+                expected = 'new_overrides_git_value1'
+                self.assertEqual(actual, expected, "%s != %s for %s" % (actual, expected, cmd))
diff --git a/tests/data/test1.conf b/tests/data/test1.conf
new file mode 100644 (file)
index 0000000..e7ffeb4
--- /dev/null
@@ -0,0 +1,35 @@
+# Data for TestConfigParser
+
+[DEFAULT]
+default_option = default_default1
+single_override_option1 = single_override_default1
+single_git_override_option1 = single_git_override_default1
+single_gbp_override_option1 = single_gbp_override_default1
+new_overrides_git_option1 = new_overrides_git_default1
+
+# These commands only have a single section overriding defaults.
+# There are no alterntive old or new names
+[cmd1]
+single_override_option1 = single_override_value1
+
+[git-cmd2]
+single_git_override_option1 = single_git_override_value1
+
+[gbp-cmd3]
+single_gbp_override_option1 = single_gbp_override_value1
+
+# This commands have a new name overriding the old git- section
+# The order of the sections differs though
+[git-cmd4]
+new_overrides_git_option1 = new_overrides_git_overridden1
+
+[cmd4]
+new_overrides_git_option1 = new_overrides_git_value1
+
+[cmd5]
+new_overrides_git_option1 = new_overrides_git_value1
+
+[git-cmd5]
+new_overrides_git_option1 = new_overrides_git_overridden1
+
+