File: format_test.go

package info (click to toggle)
aptly 1.6.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 49,928 kB
  • sloc: python: 10,398; sh: 252; makefile: 184
file content (185 lines) | stat: -rw-r--r-- 6,299 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
package deb

import (
	"bufio"
	"bytes"
	"os"
	"strings"

	. "gopkg.in/check.v1"
)

type ControlFileSuite struct {
	reader *bytes.Buffer
}

var _ = Suite(&ControlFileSuite{})

const installerFile = `dab96042d8e25e0f6bbb8d7c5bd78543afb5eb31a4a8b122ece68ab197228028  ./udeb.list
9d8bb14044dee520f4706ab197dfff10e9e39ecb3c1a402331712154e8284b2e  ./MANIFEST.udebs
`

const controlFile = `Package: bti
Binary: bti
Version: 032-1
Maintainer: gregor herrmann <gregoa@debian.org>
Uploaders: tony mancill <tmancill@debian.org>
Build-Depends: 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
Architecture: any
Standards-Version: 3.9.2
Format: 3.0 (quilt)
Files:
 3d5f65778bf3f89be03c313b0024b62c 1980 bti_032-1.dsc
 1e0d0b693fdeebec268004ba41701baf 59773 bti_032.orig.tar.gz
 ac1229a6d685023aeb8fcb0806324aa8 5065 bti_032-1.debian.tar.gz
Vcs-Browser: http://svn.toastfreeware.priv.at/wsvn/ToastfreewareDebian/bti/trunk/
Vcs-Svn: http://svn.toastfreeware.priv.at/debian/bti/trunk/
Checksums-Sha1:
 3da2c5a42138c884a7d9524b9706dc56c0d6d46e 1980 bti_032-1.dsc
 22061e3f56074703be415d65abc9ca27ef775c6a 59773 bti_032.orig.tar.gz
 66ae7f56a3c1f0ebe0638d0ec0599a819d72baea 5065 bti_032-1.debian.tar.gz
Checksums-Sha256:
 ed6015b79693f270d0a826c695b40e4d8eb4307942cac81a98f1fda479f74215 1980 bti_032-1.dsc
 feeabec98a89040a53283d798f7d55eb4311a854f17312a177dc45919883746a 59773 bti_032.orig.tar.gz
 f025da42efaf57db5e71a14cb8be27eb802ad23e7ab02b7ce2252454a86ac1d9 5065 bti_032-1.debian.tar.gz
Homepage: http://gregkh.github.com/bti/
Package-List:
 bti deb net extra
Directory: pool/main/b/bti
Description: This is cool
 Multiline description
Section: net


Package: i3-wm
Version: 4.2-1
Installed-Size: 1573
Maintainer: Michael Stapelberg <stapelberg@debian.org>
Architecture: amd64
Provides: x-window-manager
Depends: 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
Recommends: xfonts-base
Suggests: rxvt-unicode | x-terminal-emulator
Description-en: improved dynamic tiling window manager
 Key features of i3 are good documentation, reasonable defaults (changeable in
 a simple configuration file) and good multi-monitor support. The user
 interface is designed for power users and emphasizes keyboard usage. i3 uses
 XCB for asynchronous communication with X11 and aims to be fast and
 light-weight.
 .
 Please be aware i3 is primarily targeted at advanced users and developers.
Homepage: http://i3wm.org/
Description-md5: 2be7e62f455351435b1e055745d3e81c
Tag: implemented-in::c, interface::x11, role::program, uitoolkit::TODO,
 works-with::unicode, x11::window-manager
Section: x11
Priority: extra
Filename: pool/main/i/i3-wm/i3-wm_4.2-1_amd64.deb
Size: 798186
MD5sum: 3c7dbecd76d5c271401860967563fa8c
SHA1: 2e94f3faa5d4d617061f94076b2537d15fbff73f
SHA256: 2894bc999b3982c4e57f100fa31e21b52e14c5f3bc7ad5345f46842fcdab0db7`

func (s *ControlFileSuite) SetUpTest(c *C) {
	s.reader = bytes.NewBufferString(controlFile)
}

func (s *ControlFileSuite) TestReadStanza(c *C) {
	r := NewControlFileReader(s.reader, false, false)

	stanza1, err := r.ReadStanza()
	c.Assert(err, IsNil)

	stanza2, err := r.ReadStanza()
	c.Assert(err, IsNil)

	stanza3, err := r.ReadStanza()
	c.Assert(err, IsNil)
	c.Assert(stanza3, IsNil)

	c.Check(stanza1["Format"], Equals, "3.0 (quilt)")
	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")
	c.Check(stanza1["Files"], Equals, " 3d5f65778bf3f89be03c313b0024b62c 1980 bti_032-1.dsc\n"+
		" 1e0d0b693fdeebec268004ba41701baf 59773 bti_032.orig.tar.gz\n"+" ac1229a6d685023aeb8fcb0806324aa8 5065 bti_032-1.debian.tar.gz\n")
	c.Check(len(stanza2), Equals, 20)
}

func (s *ControlFileSuite) TestReadWriteStanza(c *C) {
	r := NewControlFileReader(s.reader, false, false)
	stanza, err := r.ReadStanza()
	c.Assert(err, IsNil)

	buf := &bytes.Buffer{}
	w := bufio.NewWriter(buf)
	err = stanza.Copy().WriteTo(w, true, false, false)
	c.Assert(err, IsNil)
	err = w.Flush()
	c.Assert(err, IsNil)

	str := buf.String()

	r = NewControlFileReader(buf, false, false)
	stanza2, err := r.ReadStanza()
	c.Assert(err, IsNil)

	c.Assert(stanza2, DeepEquals, stanza)
	c.Assert(strings.HasPrefix(str, "Package: "), Equals, true)
}

func (s *ControlFileSuite) TestReadWriteInstallerStanza(c *C) {
	s.reader = bytes.NewBufferString(installerFile)
	r := NewControlFileReader(s.reader, false, true)
	stanza, err := r.ReadStanza()
	c.Assert(err, IsNil)

	buf := &bytes.Buffer{}
	w := bufio.NewWriter(buf)
	err = stanza.Copy().WriteTo(w, false, false, true)
	c.Assert(err, IsNil)
	err = w.Flush()
	c.Assert(err, IsNil)

	r = NewControlFileReader(buf, false, true)
	stanza2, err := r.ReadStanza()
	c.Assert(err, IsNil)

	c.Assert(stanza2, DeepEquals, stanza)
}

func (s *ControlFileSuite) TestCanonicalCase(c *C) {
	c.Check(canonicalCase("Package"), Equals, "Package")
	c.Check(canonicalCase("package"), Equals, "Package")
	c.Check(canonicalCase("pAckaGe"), Equals, "Package")
	c.Check(canonicalCase("MD5Sum"), Equals, "MD5Sum")
	c.Check(canonicalCase("SHA1"), Equals, "SHA1")
	c.Check(canonicalCase("SHA256"), Equals, "SHA256")
	c.Check(canonicalCase("Package-List"), Equals, "Package-List")
	c.Check(canonicalCase("package-list"), Equals, "Package-List")
	c.Check(canonicalCase("packaGe-lIst"), Equals, "Package-List")
}

func (s *ControlFileSuite) TestLongFields(c *C) {
	f, err := os.Open("long.stanza")
	c.Assert(err, IsNil)
	defer func() { _ = f.Close() }()

	r := NewControlFileReader(f, false, false)
	stanza, e := r.ReadStanza()
	c.Assert(e, IsNil)
	c.Assert(len(stanza["Provides"]), Equals, 586929)
}

func (s *ControlFileSuite) BenchmarkReadStanza(c *C) {
	for i := 0; i < c.N; i++ {
		reader := bytes.NewBufferString(controlFile)
		r := NewControlFileReader(reader, false, false)
		for {
			s, e := r.ReadStanza()
			if s == nil && e == nil {
				break
			}
		}
	}
}