1package deb 2 3import ( 4 "bufio" 5 "bytes" 6 "os" 7 "strings" 8 9 . "gopkg.in/check.v1" 10) 11 12type ControlFileSuite struct { 13 reader *bytes.Buffer 14} 15 16var _ = Suite(&ControlFileSuite{}) 17 18const installerFile = `dab96042d8e25e0f6bbb8d7c5bd78543afb5eb31a4a8b122ece68ab197228028 ./udeb.list 199d8bb14044dee520f4706ab197dfff10e9e39ecb3c1a402331712154e8284b2e ./MANIFEST.udebs 20` 21 22const controlFile = `Package: bti 23Binary: bti 24Version: 032-1 25Maintainer: gregor herrmann <gregoa@debian.org> 26Uploaders: tony mancill <tmancill@debian.org> 27Build-Depends: debhelper (>= 8), 28 bash-completion (>= 1:1.1-3), 29 libcurl4-nss-dev, libreadline-dev, libxml2-dev, libpcre3-dev, liboauth-dev, xsltproc, docbook-xsl, docbook-xml, dh-autoreconf 30Architecture: any 31Standards-Version: 3.9.2 32Format: 3.0 (quilt) 33Files: 34 3d5f65778bf3f89be03c313b0024b62c 1980 bti_032-1.dsc 35 1e0d0b693fdeebec268004ba41701baf 59773 bti_032.orig.tar.gz 36 ac1229a6d685023aeb8fcb0806324aa8 5065 bti_032-1.debian.tar.gz 37Vcs-Browser: http://svn.toastfreeware.priv.at/wsvn/ToastfreewareDebian/bti/trunk/ 38Vcs-Svn: http://svn.toastfreeware.priv.at/debian/bti/trunk/ 39Checksums-Sha1: 40 3da2c5a42138c884a7d9524b9706dc56c0d6d46e 1980 bti_032-1.dsc 41 22061e3f56074703be415d65abc9ca27ef775c6a 59773 bti_032.orig.tar.gz 42 66ae7f56a3c1f0ebe0638d0ec0599a819d72baea 5065 bti_032-1.debian.tar.gz 43Checksums-Sha256: 44 ed6015b79693f270d0a826c695b40e4d8eb4307942cac81a98f1fda479f74215 1980 bti_032-1.dsc 45 feeabec98a89040a53283d798f7d55eb4311a854f17312a177dc45919883746a 59773 bti_032.orig.tar.gz 46 f025da42efaf57db5e71a14cb8be27eb802ad23e7ab02b7ce2252454a86ac1d9 5065 bti_032-1.debian.tar.gz 47Homepage: http://gregkh.github.com/bti/ 48Package-List: 49 bti deb net extra 50Directory: pool/main/b/bti 51Description: This is cool 52 Multiline description 53Section: net 54 55 56Package: i3-wm 57Version: 4.2-1 58Installed-Size: 1573 59Maintainer: Michael Stapelberg <stapelberg@debian.org> 60Architecture: amd64 61Provides: x-window-manager 62Depends: libc6 (>= 2.8), libev4 (>= 1:4.04), libpcre3 (>= 8.10), libstartup-notification0 (>= 0.10), libx11-6, libxcb-icccm4 (>= 0.3.8), libxcb-keysyms1 (>= 0.3.8), libxcb-randr0 (>= 1.3), libxcb-util0 (>= 0.3.8), libxcb-xinerama0, libxcb1, libxcursor1 (>> 1.1.2), libyajl2 (>= 2.0.4), perl, x11-utils 63Recommends: xfonts-base 64Suggests: rxvt-unicode | x-terminal-emulator 65Description-en: improved dynamic tiling window manager 66 Key features of i3 are good documentation, reasonable defaults (changeable in 67 a simple configuration file) and good multi-monitor support. The user 68 interface is designed for power users and emphasizes keyboard usage. i3 uses 69 XCB for asynchronous communication with X11 and aims to be fast and 70 light-weight. 71 . 72 Please be aware i3 is primarily targeted at advanced users and developers. 73Homepage: http://i3wm.org/ 74Description-md5: 2be7e62f455351435b1e055745d3e81c 75Tag: implemented-in::c, interface::x11, role::program, uitoolkit::TODO, 76 works-with::unicode, x11::window-manager 77Section: x11 78Priority: extra 79Filename: pool/main/i/i3-wm/i3-wm_4.2-1_amd64.deb 80Size: 798186 81MD5sum: 3c7dbecd76d5c271401860967563fa8c 82SHA1: 2e94f3faa5d4d617061f94076b2537d15fbff73f 83SHA256: 2894bc999b3982c4e57f100fa31e21b52e14c5f3bc7ad5345f46842fcdab0db7` 84 85func (s *ControlFileSuite) SetUpTest(c *C) { 86 s.reader = bytes.NewBufferString(controlFile) 87} 88 89func (s *ControlFileSuite) TestReadStanza(c *C) { 90 r := NewControlFileReader(s.reader, false, false) 91 92 stanza1, err := r.ReadStanza() 93 c.Assert(err, IsNil) 94 95 stanza2, err := r.ReadStanza() 96 c.Assert(err, IsNil) 97 98 stanza3, err := r.ReadStanza() 99 c.Assert(err, IsNil) 100 c.Assert(stanza3, IsNil) 101 102 c.Check(stanza1["Format"], Equals, "3.0 (quilt)") 103 c.Check(stanza1["Build-Depends"], Equals, "debhelper (>= 8), bash-completion (>= 1:1.1-3), libcurl4-nss-dev, libreadline-dev, libxml2-dev, libpcre3-dev, liboauth-dev, xsltproc, docbook-xsl, docbook-xml, dh-autoreconf") 104 c.Check(stanza1["Files"], Equals, " 3d5f65778bf3f89be03c313b0024b62c 1980 bti_032-1.dsc\n"+ 105 " 1e0d0b693fdeebec268004ba41701baf 59773 bti_032.orig.tar.gz\n"+" ac1229a6d685023aeb8fcb0806324aa8 5065 bti_032-1.debian.tar.gz\n") 106 c.Check(len(stanza2), Equals, 20) 107} 108 109func (s *ControlFileSuite) TestReadWriteStanza(c *C) { 110 r := NewControlFileReader(s.reader, false, false) 111 stanza, err := r.ReadStanza() 112 c.Assert(err, IsNil) 113 114 buf := &bytes.Buffer{} 115 w := bufio.NewWriter(buf) 116 err = stanza.Copy().WriteTo(w, true, false, false) 117 c.Assert(err, IsNil) 118 err = w.Flush() 119 c.Assert(err, IsNil) 120 121 str := buf.String() 122 123 r = NewControlFileReader(buf, false, false) 124 stanza2, err := r.ReadStanza() 125 c.Assert(err, IsNil) 126 127 c.Assert(stanza2, DeepEquals, stanza) 128 c.Assert(strings.HasPrefix(str, "Package: "), Equals, true) 129} 130 131func (s *ControlFileSuite) TestReadWriteInstallerStanza(c *C) { 132 s.reader = bytes.NewBufferString(installerFile) 133 r := NewControlFileReader(s.reader, false, true) 134 stanza, err := r.ReadStanza() 135 c.Assert(err, IsNil) 136 137 buf := &bytes.Buffer{} 138 w := bufio.NewWriter(buf) 139 err = stanza.Copy().WriteTo(w, false, false, true) 140 c.Assert(err, IsNil) 141 err = w.Flush() 142 c.Assert(err, IsNil) 143 144 r = NewControlFileReader(buf, false, true) 145 stanza2, err := r.ReadStanza() 146 c.Assert(err, IsNil) 147 148 c.Assert(stanza2, DeepEquals, stanza) 149} 150 151func (s *ControlFileSuite) TestCanonicalCase(c *C) { 152 c.Check(canonicalCase("Package"), Equals, "Package") 153 c.Check(canonicalCase("package"), Equals, "Package") 154 c.Check(canonicalCase("pAckaGe"), Equals, "Package") 155 c.Check(canonicalCase("MD5Sum"), Equals, "MD5Sum") 156 c.Check(canonicalCase("SHA1"), Equals, "SHA1") 157 c.Check(canonicalCase("SHA256"), Equals, "SHA256") 158 c.Check(canonicalCase("Package-List"), Equals, "Package-List") 159 c.Check(canonicalCase("package-list"), Equals, "Package-List") 160 c.Check(canonicalCase("packaGe-lIst"), Equals, "Package-List") 161} 162 163func (s *ControlFileSuite) TestLongFields(c *C) { 164 f, err := os.Open("long.stanza") 165 c.Assert(err, IsNil) 166 defer f.Close() 167 168 r := NewControlFileReader(f, false, false) 169 stanza, e := r.ReadStanza() 170 c.Assert(e, IsNil) 171 c.Assert(len(stanza["Provides"]), Equals, 586929) 172} 173 174func (s *ControlFileSuite) BenchmarkReadStanza(c *C) { 175 for i := 0; i < c.N; i++ { 176 reader := bytes.NewBufferString(controlFile) 177 r := NewControlFileReader(reader, false, false) 178 for { 179 s, e := r.ReadStanza() 180 if s == nil && e == nil { 181 break 182 } 183 } 184 } 185} 186