1package deb
2
3import (
4	"os"
5	"path/filepath"
6	"runtime"
7
8	"github.com/aptly-dev/aptly/pgp"
9
10	. "gopkg.in/check.v1"
11)
12
13type DebSuite struct {
14	debFile, debFile2, debFileWithXzControl, dscFile, dscFileNoSign string
15}
16
17var _ = Suite(&DebSuite{})
18
19func (s *DebSuite) SetUpSuite(c *C) {
20	_, _File, _, _ := runtime.Caller(0)
21	s.debFile = filepath.Join(filepath.Dir(_File), "../system/files/libboost-program-options-dev_1.49.0.1_i386.deb")
22	s.debFile2 = filepath.Join(filepath.Dir(_File), "../system/changes/hardlink_0.2.1_amd64.deb")
23	s.debFileWithXzControl = filepath.Join(filepath.Dir(_File), "../system/changes/libqt5concurrent5-dbgsym_5.9.1+dfsg-2+18.04+bionic+build4_amd64.ddeb")
24	s.dscFile = filepath.Join(filepath.Dir(_File), "../system/files/pyspi_0.6.1-1.3.dsc")
25	s.dscFileNoSign = filepath.Join(filepath.Dir(_File), "../system/files/pyspi-0.6.1-1.3.stripped.dsc")
26}
27
28func (s *DebSuite) TestGetControlFileFromDeb(c *C) {
29	_, err := GetControlFileFromDeb("/no/such/file")
30	c.Check(err, ErrorMatches, ".*no such file or directory")
31
32	_, _File, _, _ := runtime.Caller(0)
33	_, err = GetControlFileFromDeb(_File)
34	c.Check(err, ErrorMatches, "^.+ar: missing global header")
35
36	st, err := GetControlFileFromDeb(s.debFile)
37	c.Check(err, IsNil)
38	c.Check(st["Version"], Equals, "1.49.0.1")
39	c.Check(st["Package"], Equals, "libboost-program-options-dev")
40}
41
42func (s *DebSuite) TestGetControlFileFromDebWithXzControl(c *C) {
43	// Has control.tar.xz archive inside.
44	st, err := GetControlFileFromDeb(s.debFileWithXzControl)
45	c.Check(err, IsNil)
46	c.Check(st["Version"], Equals, "5.9.1+dfsg-2+18.04+bionic+build4")
47	c.Check(st["Package"], Equals, "libqt5concurrent5-dbgsym")
48}
49
50func (s *DebSuite) TestGetControlFileFromDsc(c *C) {
51	verifier := &pgp.GoVerifier{}
52
53	_, err := GetControlFileFromDsc("/no/such/file", verifier)
54	c.Check(err, ErrorMatches, ".*no such file or directory")
55
56	_, _File, _, _ := runtime.Caller(0)
57	_, err = GetControlFileFromDsc(_File, verifier)
58	c.Check(err, ErrorMatches, "malformed stanza syntax")
59
60	st, err := GetControlFileFromDsc(s.dscFile, verifier)
61	c.Check(err, IsNil)
62	c.Check(st["Version"], Equals, "0.6.1-1.3")
63	c.Check(st["Source"], Equals, "pyspi")
64
65	st, err = GetControlFileFromDsc(s.dscFileNoSign, verifier)
66	c.Check(err, IsNil)
67	c.Check(st["Version"], Equals, "0.6.1-1.4")
68	c.Check(st["Source"], Equals, "pyspi")
69}
70
71func (s *DebSuite) TestGetContentsFromDeb(c *C) {
72	f, err := os.Open(s.debFile)
73	c.Assert(err, IsNil)
74	contents, err := GetContentsFromDeb(f, s.debFile)
75	c.Check(err, IsNil)
76	c.Check(contents, DeepEquals, []string{"usr/share/doc/libboost-program-options-dev/changelog.gz",
77		"usr/share/doc/libboost-program-options-dev/copyright"})
78	c.Assert(f.Close(), IsNil)
79
80	f, err = os.Open(s.debFile2)
81	c.Assert(err, IsNil)
82	contents, err = GetContentsFromDeb(f, s.debFile2)
83	c.Check(err, IsNil)
84	c.Check(contents, DeepEquals, []string{"usr/bin/hardlink", "usr/share/man/man1/hardlink.1.gz",
85		"usr/share/doc/hardlink/changelog.gz", "usr/share/doc/hardlink/copyright", "usr/share/doc/hardlink/NEWS.Debian.gz"})
86	c.Assert(f.Close(), IsNil)
87}
88