1# Copyright (C) 2009, 2010, 2011, 2016 Canonical Ltd 2# 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 2 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program; if not, write to the Free Software 15# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 16 17from ..chk_serializer import ( 18 chk_bencode_serializer, 19 ) 20from ...revision import ( 21 Revision, 22 ) 23from . import TestCase 24 25_working_revision_bencode1 = (b'l' 26 b'l6:formati10ee' 27 b'l9:committer54:Canonical.com Patch Queue Manager <pqm@pqm.ubuntu.com>e' 28 b'l8:timezonei3600ee' 29 b'l10:propertiesd11:branch-nick6:+trunkee' 30 b'l9:timestamp14:1242300770.844e' 31 b'l11:revision-id50:pqm@pqm.ubuntu.com-20090514113250-jntkkpminfn3e0tze' 32 b'l10:parent-ids' 33 b'l' 34 b'50:pqm@pqm.ubuntu.com-20090514104039-kggemn7lrretzpvc' 35 b'48:jelmer@samba.org-20090510012654-jp9ufxquekaokbeo' 36 b'ee' 37 b'l14:inventory-sha140:4a2c7fb50e077699242cf6eb16a61779c7b680a7e' 38 b'l7:message35:(Jelmer) Move dpush to InterBranch.e' 39 b'e') 40 41_working_revision_bencode1_no_timezone = (b'l' 42 b'l6:formati10ee' 43 b'l9:committer54:Canonical.com Patch Queue Manager <pqm@pqm.ubuntu.com>e' 44 b'l9:timestamp14:1242300770.844e' 45 b'l10:propertiesd11:branch-nick6:+trunkee' 46 b'l11:revision-id50:pqm@pqm.ubuntu.com-20090514113250-jntkkpminfn3e0tze' 47 b'l10:parent-ids' 48 b'l' 49 b'50:pqm@pqm.ubuntu.com-20090514104039-kggemn7lrretzpvc' 50 b'48:jelmer@samba.org-20090510012654-jp9ufxquekaokbeo' 51 b'ee' 52 b'l14:inventory-sha140:4a2c7fb50e077699242cf6eb16a61779c7b680a7e' 53 b'l7:message35:(Jelmer) Move dpush to InterBranch.e' 54 b'e') 55 56 57class TestBEncodeSerializer1(TestCase): 58 """Test BEncode serialization""" 59 60 def test_unpack_revision(self): 61 """Test unpacking a revision""" 62 rev = chk_bencode_serializer.read_revision_from_string( 63 _working_revision_bencode1) 64 self.assertEqual(rev.committer, 65 "Canonical.com Patch Queue Manager <pqm@pqm.ubuntu.com>") 66 self.assertEqual(rev.inventory_sha1, 67 b"4a2c7fb50e077699242cf6eb16a61779c7b680a7") 68 self.assertEqual([b"pqm@pqm.ubuntu.com-20090514104039-kggemn7lrretzpvc", 69 b"jelmer@samba.org-20090510012654-jp9ufxquekaokbeo"], 70 rev.parent_ids) 71 self.assertEqual("(Jelmer) Move dpush to InterBranch.", rev.message) 72 self.assertEqual(b"pqm@pqm.ubuntu.com-20090514113250-jntkkpminfn3e0tz", 73 rev.revision_id) 74 self.assertEqual({u"branch-nick": u"+trunk"}, rev.properties) 75 self.assertEqual(3600, rev.timezone) 76 77 def test_written_form_matches(self): 78 rev = chk_bencode_serializer.read_revision_from_string( 79 _working_revision_bencode1) 80 as_str = chk_bencode_serializer.write_revision_to_string(rev) 81 self.assertEqualDiff(_working_revision_bencode1, as_str) 82 83 def test_unpack_revision_no_timezone(self): 84 rev = chk_bencode_serializer.read_revision_from_string( 85 _working_revision_bencode1_no_timezone) 86 self.assertEqual(None, rev.timezone) 87 88 def assertRoundTrips(self, serializer, orig_rev): 89 lines = serializer.write_revision_to_lines(orig_rev) 90 new_rev = serializer.read_revision_from_string(b''.join(lines)) 91 self.assertEqual(orig_rev, new_rev) 92 93 def test_roundtrips_non_ascii(self): 94 rev = Revision(b"revid1") 95 rev.message = u"\n\xe5me" 96 rev.committer = u'Erik B\xe5gfors' 97 rev.timestamp = 1242385452 98 rev.inventory_sha1 = b"4a2c7fb50e077699242cf6eb16a61779c7b680a7" 99 rev.timezone = 3600 100 self.assertRoundTrips(chk_bencode_serializer, rev) 101 102 def test_roundtrips_xml_invalid_chars(self): 103 rev = Revision(b"revid1") 104 rev.message = "\t\ue000" 105 rev.committer = u'Erik B\xe5gfors' 106 rev.timestamp = 1242385452 107 rev.timezone = 3600 108 rev.inventory_sha1 = b"4a2c7fb50e077699242cf6eb16a61779c7b680a7" 109 self.assertRoundTrips(chk_bencode_serializer, rev) 110