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