Merge lp:~gz/bzr-builddeb/merge_changelog_invalid_version_tweak_testing into lp:bzr-builddeb

Proposed by Martin Packman
Status: Merged
Merged at revision: 662
Proposed branch: lp:~gz/bzr-builddeb/merge_changelog_invalid_version_tweak_testing
Merge into: lp:bzr-builddeb
Diff against target: 198 lines (+65/-46)
1 file modified
tests/test_merge_changelog.py (+65/-46)
To merge this branch: bzr merge lp:~gz/bzr-builddeb/merge_changelog_invalid_version_tweak_testing
Reviewer Review Type Date Requested Status
Bzr-builddeb-hackers Pending
Review via email: mp+85642@code.launchpad.net

This proposal supersedes a proposal from 2011-12-14.

Description of the change

Follow up to previous mp, tidying up the merge_changelog testing a little:

<https://code.launchpad.net/~gz/bzr-builddeb/merge_changelog_invalid_version_893495/+merge/85572>

Original way of spelling the test meant it would fail when selftest was run with LANG=de_DE.UTF-8 for example. Have rearranged things a bit to make it easy to add another test for the original style of invalid version as well.

(Resubmitting for clean diff after resolving conflict)

To post a comment you must log in.
Revision history for this message
James Westby (james-w) wrote : Posted in a previous version of this proposal

Hi,

Thanks for cleaning this up. It looks good to me, assuming the
conflicts are easily resolvable.

Thanks,

James

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tests/test_merge_changelog.py'
2--- tests/test_merge_changelog.py 2011-12-14 00:04:54 +0000
3+++ tests/test_merge_changelog.py 2011-12-14 11:49:25 +0000
4@@ -44,7 +44,7 @@
5
6
7 v_111_2 = """\
8-psuedo-prog (1.1.1-2) unstable; urgency=low
9+pseudo-prog (1.1.1-2) unstable; urgency=low
10
11 * New upstream release.
12 * Awesome bug fixes.
13@@ -55,7 +55,7 @@
14
15
16 v_111_2b = """\
17-psuedo-prog (1.1.1-2) unstable; urgency=low
18+pseudo-prog (1.1.1-2) unstable; urgency=low
19
20 * New upstream release.
21 * Awesome bug fixes.
22@@ -67,7 +67,7 @@
23
24
25 v_111_2c = """\
26-psuedo-prog (1.1.1-2) unstable; urgency=low
27+pseudo-prog (1.1.1-2) unstable; urgency=low
28
29 * New upstream release.
30 * Yet another content for 1.1.1-2
31@@ -80,7 +80,7 @@
32 # Merge of 2b and 2c using 2 as the base (b adds a line, c adds a line and
33 # deletes a line).
34 v_111_2bc = """\
35-psuedo-prog (1.1.1-2) unstable; urgency=low
36+pseudo-prog (1.1.1-2) unstable; urgency=low
37
38 * New upstream release.
39 * Yet another content for 1.1.1-2
40@@ -94,7 +94,7 @@
41 # Merge of 2b and 2c using an empty base. (As calculated by
42 # dpkg-mergechangelogs.)
43 v_111_2bc_empty_base = """\
44-psuedo-prog (1.1.1-2) unstable; urgency=low
45+pseudo-prog (1.1.1-2) unstable; urgency=low
46
47 * New upstream release.
48 <<<<<<<
49@@ -110,7 +110,7 @@
50
51
52 v_112_1 = """\
53-psuedo-prog (1.1.2-1) unstable; urgency=low
54+pseudo-prog (1.1.2-1) unstable; urgency=low
55
56 * New upstream release.
57 * No bug fixes :(
58@@ -121,7 +121,7 @@
59
60
61 v_001_1 = """\
62-psuedo-prog (0.0.1-1) unstable; urgency=low
63+pseudo-prog (0.0.1-1) unstable; urgency=low
64
65 * New project released!!!!
66 * No bugs evar
67@@ -160,14 +160,19 @@
68 Content(UTF8_TEXT, lambda: [warnings_log]))
69
70 def assertMergeChangelog(self, expected_lines, this_lines, other_lines,
71- base_lines=[], conflicted=False):
72+ base_lines=[], conflicted=False, possible_error=False):
73 status, merged_lines = merge_changelog.merge_changelog(
74 this_lines, other_lines, base_lines)
75+ if possible_error and status == "not_applicable":
76+ self.assertContainsRe(self.logged_warnings.getvalue(),
77+ "(?m)dpkg-mergechangelogs failed with status \\d+$")
78+ return False
79 if conflicted:
80 self.assertEqual('conflicted', status)
81 else:
82 self.assertEqual('success', status)
83 self.assertEqualDiff(''.join(expected_lines), ''.join(merged_lines))
84+ return True
85
86 def test_merge_by_version(self):
87 this_lines = v_111_2 + v_001_1
88@@ -227,7 +232,7 @@
89
90 def test_not_valid_changelog(self):
91 invalid_changelog = """\
92-psuedo-prog (1.1.1-2) unstable; urgency=low
93+pseudo-prog (1.1.1-2) unstable; urgency=low
94
95 * New upstream release.
96 * Awesome bug fixes.
97@@ -246,10 +251,6 @@
98 # <https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/815704>
99 # - Andrew Bennetts, 25 July 2011.
100 #self.assertEqual(''.join(invalid_changelog), ''.join(lines))
101- status, lines = merge_changelog.merge_changelog(
102- invalid_changelog, v_111_2, v_111_2)
103- self.assertEqual('success', status)
104- #self.assertEqual(''.join(invalid_changelog), ''.join(lines))
105 self.assertMergeChangelog(v_112_1 +
106 ['<<<<<<<\n'] +
107 v_111_2 +
108@@ -260,39 +261,57 @@
109 conflicted=True
110 )
111
112- def test_invalid_version(self):
113- """An invalid version in the changelog should be handled sanely
114-
115- Depending on the dpkg version, a bad version may be tolerated or not.
116- If the script aborts the merge should result in a success with zero
117- bytes in the merged file. See lp:893495 for such an issue.
118- """
119- invalid_changelog = """\
120-psuedo-prog (\xc2\xa7) unstable; urgency=low
121-
122- * New project released!!!!
123-
124- -- Barry Foo <barry@example.com> Thu, 28 Jan 2010 10:00:44 +0000
125-
126-""".splitlines(True)
127- # invalid_changelog has a bad version, with non-ascii characters.
128- status, lines = merge_changelog.merge_changelog(
129- this_lines=v_112_1 + invalid_changelog,
130- other_lines=v_111_2 + invalid_changelog,
131- base_lines=invalid_changelog)
132- log = self.logged_warnings.getvalue()
133- self.assertContainsRe(log, "(?m)\xc2\xa7 is not a valid version$")
134- if "dpkg-mergechangelogs: error:" in log:
135- # Script version aborts on invalid versions so merge must fail
136- self.assertEqual('not_applicable', status)
137- self.assertContainsRe(log,
138- "(?m)dpkg-mergechangelogs failed with status \\d+$")
139- else:
140- # Script version tolerates invalid versions and produces output
141- self.assertEqual('success', status)
142- self.assertEqualDiff(
143- "".join(v_112_1 + v_111_2 + invalid_changelog),
144- "".join(lines))
145+ def test_invalid_version_starting_non_digit(self):
146+ """Invalid version without digit first is rejected or correctly merged
147+
148+ Versions of dpkg prior to 1.16.0.1 merge such changelogs correctly,
149+ however then a stricter check was introduced that aborts the script.
150+ In that case, the result should not be a success with a zero byte
151+ merge result file. See lp:893495 for such an issue.
152+ """
153+ invalid_changelog = """\
154+pseudo-prog (ss-0) unstable; urgency=low
155+
156+ * New project released!!!!
157+
158+ -- Barry Foo <barry@example.com> Thu, 28 Jan 2010 10:00:44 +0000
159+
160+""".splitlines(True)
161+ handled = self.assertMergeChangelog(
162+ expected_lines=v_112_1 + v_111_2 + invalid_changelog,
163+ this_lines=v_112_1 + invalid_changelog,
164+ other_lines=v_111_2 + invalid_changelog,
165+ base_lines=invalid_changelog,
166+ possible_error=True)
167+ if not handled:
168+ # Can't assert on the exact message as it depends on the locale
169+ self.assertContainsRe(self.logged_warnings.getvalue(),
170+ "dpkg-mergechangelogs: .*ss-0( is not a valid version)?")
171+
172+ def test_invalid_version_non_ascii(self):
173+ """Invalid version with non-ascii data is rejected or correctly merged
174+
175+ Such a version has always been treated as invalid so fails
176+ consistently across dpkg versions currently.
177+ """
178+ invalid_changelog = """\
179+pseudo-prog (\xc2\xa7) unstable; urgency=low
180+
181+ * New project released!!!!
182+
183+ -- Barry Foo <barry@example.com> Thu, 28 Jan 2010 10:00:44 +0000
184+
185+""".splitlines(True)
186+ handled = self.assertMergeChangelog(
187+ expected_lines=v_112_1 + v_111_2 + invalid_changelog,
188+ this_lines=v_112_1 + invalid_changelog,
189+ other_lines=v_111_2 + invalid_changelog,
190+ base_lines=invalid_changelog,
191+ possible_error=True)
192+ if not handled:
193+ # Can't assert on the exact message as it depends on the locale
194+ self.assertContainsRe(self.logged_warnings.getvalue(),
195+ "dpkg-mergechangelogs: .*\xc2\xa7( is not a valid version)?")
196
197
198 class TestChangelogHook(tests.TestCaseWithMemoryTransport):

Subscribers

People subscribed via source and target branches