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
=== modified file 'tests/test_merge_changelog.py'
--- tests/test_merge_changelog.py 2011-12-14 00:04:54 +0000
+++ tests/test_merge_changelog.py 2011-12-14 11:49:25 +0000
@@ -44,7 +44,7 @@
4444
4545
46v_111_2 = """\46v_111_2 = """\
47psuedo-prog (1.1.1-2) unstable; urgency=low47pseudo-prog (1.1.1-2) unstable; urgency=low
4848
49 * New upstream release.49 * New upstream release.
50 * Awesome bug fixes.50 * Awesome bug fixes.
@@ -55,7 +55,7 @@
5555
5656
57v_111_2b = """\57v_111_2b = """\
58psuedo-prog (1.1.1-2) unstable; urgency=low58pseudo-prog (1.1.1-2) unstable; urgency=low
5959
60 * New upstream release.60 * New upstream release.
61 * Awesome bug fixes.61 * Awesome bug fixes.
@@ -67,7 +67,7 @@
6767
6868
69v_111_2c = """\69v_111_2c = """\
70psuedo-prog (1.1.1-2) unstable; urgency=low70pseudo-prog (1.1.1-2) unstable; urgency=low
7171
72 * New upstream release.72 * New upstream release.
73 * Yet another content for 1.1.1-273 * Yet another content for 1.1.1-2
@@ -80,7 +80,7 @@
80# Merge of 2b and 2c using 2 as the base (b adds a line, c adds a line and80# Merge of 2b and 2c using 2 as the base (b adds a line, c adds a line and
81# deletes a line).81# deletes a line).
82v_111_2bc = """\82v_111_2bc = """\
83psuedo-prog (1.1.1-2) unstable; urgency=low83pseudo-prog (1.1.1-2) unstable; urgency=low
8484
85 * New upstream release.85 * New upstream release.
86 * Yet another content for 1.1.1-286 * Yet another content for 1.1.1-2
@@ -94,7 +94,7 @@
94# Merge of 2b and 2c using an empty base. (As calculated by94# Merge of 2b and 2c using an empty base. (As calculated by
95# dpkg-mergechangelogs.)95# dpkg-mergechangelogs.)
96v_111_2bc_empty_base = """\96v_111_2bc_empty_base = """\
97psuedo-prog (1.1.1-2) unstable; urgency=low97pseudo-prog (1.1.1-2) unstable; urgency=low
9898
99 * New upstream release.99 * New upstream release.
100<<<<<<<100<<<<<<<
@@ -110,7 +110,7 @@
110110
111111
112v_112_1 = """\112v_112_1 = """\
113psuedo-prog (1.1.2-1) unstable; urgency=low113pseudo-prog (1.1.2-1) unstable; urgency=low
114114
115 * New upstream release.115 * New upstream release.
116 * No bug fixes :(116 * No bug fixes :(
@@ -121,7 +121,7 @@
121121
122122
123v_001_1 = """\123v_001_1 = """\
124psuedo-prog (0.0.1-1) unstable; urgency=low124pseudo-prog (0.0.1-1) unstable; urgency=low
125125
126 * New project released!!!!126 * New project released!!!!
127 * No bugs evar127 * No bugs evar
@@ -160,14 +160,19 @@
160 Content(UTF8_TEXT, lambda: [warnings_log]))160 Content(UTF8_TEXT, lambda: [warnings_log]))
161161
162 def assertMergeChangelog(self, expected_lines, this_lines, other_lines,162 def assertMergeChangelog(self, expected_lines, this_lines, other_lines,
163 base_lines=[], conflicted=False):163 base_lines=[], conflicted=False, possible_error=False):
164 status, merged_lines = merge_changelog.merge_changelog(164 status, merged_lines = merge_changelog.merge_changelog(
165 this_lines, other_lines, base_lines)165 this_lines, other_lines, base_lines)
166 if possible_error and status == "not_applicable":
167 self.assertContainsRe(self.logged_warnings.getvalue(),
168 "(?m)dpkg-mergechangelogs failed with status \\d+$")
169 return False
166 if conflicted:170 if conflicted:
167 self.assertEqual('conflicted', status)171 self.assertEqual('conflicted', status)
168 else:172 else:
169 self.assertEqual('success', status)173 self.assertEqual('success', status)
170 self.assertEqualDiff(''.join(expected_lines), ''.join(merged_lines))174 self.assertEqualDiff(''.join(expected_lines), ''.join(merged_lines))
175 return True
171176
172 def test_merge_by_version(self):177 def test_merge_by_version(self):
173 this_lines = v_111_2 + v_001_1178 this_lines = v_111_2 + v_001_1
@@ -227,7 +232,7 @@
227232
228 def test_not_valid_changelog(self):233 def test_not_valid_changelog(self):
229 invalid_changelog = """\234 invalid_changelog = """\
230psuedo-prog (1.1.1-2) unstable; urgency=low235pseudo-prog (1.1.1-2) unstable; urgency=low
231236
232 * New upstream release.237 * New upstream release.
233 * Awesome bug fixes.238 * Awesome bug fixes.
@@ -246,10 +251,6 @@
246 # <https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/815704>251 # <https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/815704>
247 # - Andrew Bennetts, 25 July 2011.252 # - Andrew Bennetts, 25 July 2011.
248 #self.assertEqual(''.join(invalid_changelog), ''.join(lines))253 #self.assertEqual(''.join(invalid_changelog), ''.join(lines))
249 status, lines = merge_changelog.merge_changelog(
250 invalid_changelog, v_111_2, v_111_2)
251 self.assertEqual('success', status)
252 #self.assertEqual(''.join(invalid_changelog), ''.join(lines))
253 self.assertMergeChangelog(v_112_1 + 254 self.assertMergeChangelog(v_112_1 +
254 ['<<<<<<<\n'] +255 ['<<<<<<<\n'] +
255 v_111_2 +256 v_111_2 +
@@ -260,39 +261,57 @@
260 conflicted=True261 conflicted=True
261 )262 )
262263
263 def test_invalid_version(self):264 def test_invalid_version_starting_non_digit(self):
264 """An invalid version in the changelog should be handled sanely265 """Invalid version without digit first is rejected or correctly merged
265 266
266 Depending on the dpkg version, a bad version may be tolerated or not.267 Versions of dpkg prior to 1.16.0.1 merge such changelogs correctly,
267 If the script aborts the merge should result in a success with zero268 however then a stricter check was introduced that aborts the script.
268 bytes in the merged file. See lp:893495 for such an issue.269 In that case, the result should not be a success with a zero byte
269 """270 merge result file. See lp:893495 for such an issue.
270 invalid_changelog = """\271 """
271psuedo-prog (\xc2\xa7) unstable; urgency=low272 invalid_changelog = """\
272273pseudo-prog (ss-0) unstable; urgency=low
273 * New project released!!!!274
274275 * New project released!!!!
275 -- Barry Foo <barry@example.com> Thu, 28 Jan 2010 10:00:44 +0000276
276277 -- Barry Foo <barry@example.com> Thu, 28 Jan 2010 10:00:44 +0000
277""".splitlines(True)278
278 # invalid_changelog has a bad version, with non-ascii characters.279""".splitlines(True)
279 status, lines = merge_changelog.merge_changelog(280 handled = self.assertMergeChangelog(
280 this_lines=v_112_1 + invalid_changelog,281 expected_lines=v_112_1 + v_111_2 + invalid_changelog,
281 other_lines=v_111_2 + invalid_changelog,282 this_lines=v_112_1 + invalid_changelog,
282 base_lines=invalid_changelog)283 other_lines=v_111_2 + invalid_changelog,
283 log = self.logged_warnings.getvalue()284 base_lines=invalid_changelog,
284 self.assertContainsRe(log, "(?m)\xc2\xa7 is not a valid version$")285 possible_error=True)
285 if "dpkg-mergechangelogs: error:" in log:286 if not handled:
286 # Script version aborts on invalid versions so merge must fail287 # Can't assert on the exact message as it depends on the locale
287 self.assertEqual('not_applicable', status)288 self.assertContainsRe(self.logged_warnings.getvalue(),
288 self.assertContainsRe(log,289 "dpkg-mergechangelogs: .*ss-0( is not a valid version)?")
289 "(?m)dpkg-mergechangelogs failed with status \\d+$")290
290 else:291 def test_invalid_version_non_ascii(self):
291 # Script version tolerates invalid versions and produces output292 """Invalid version with non-ascii data is rejected or correctly merged
292 self.assertEqual('success', status)293
293 self.assertEqualDiff(294 Such a version has always been treated as invalid so fails
294 "".join(v_112_1 + v_111_2 + invalid_changelog),295 consistently across dpkg versions currently.
295 "".join(lines))296 """
297 invalid_changelog = """\
298pseudo-prog (\xc2\xa7) unstable; urgency=low
299
300 * New project released!!!!
301
302 -- Barry Foo <barry@example.com> Thu, 28 Jan 2010 10:00:44 +0000
303
304""".splitlines(True)
305 handled = self.assertMergeChangelog(
306 expected_lines=v_112_1 + v_111_2 + invalid_changelog,
307 this_lines=v_112_1 + invalid_changelog,
308 other_lines=v_111_2 + invalid_changelog,
309 base_lines=invalid_changelog,
310 possible_error=True)
311 if not handled:
312 # Can't assert on the exact message as it depends on the locale
313 self.assertContainsRe(self.logged_warnings.getvalue(),
314 "dpkg-mergechangelogs: .*\xc2\xa7( is not a valid version)?")
296315
297316
298class TestChangelogHook(tests.TestCaseWithMemoryTransport):317class TestChangelogHook(tests.TestCaseWithMemoryTransport):

Subscribers

People subscribed via source and target branches