1package deb 2 3import ( 4 "os" 5 "path/filepath" 6 7 "github.com/aptly-dev/aptly/aptly" 8 "github.com/aptly-dev/aptly/console" 9 "github.com/aptly-dev/aptly/database" 10 "github.com/aptly-dev/aptly/files" 11 "github.com/aptly-dev/aptly/utils" 12 13 . "gopkg.in/check.v1" 14) 15 16type ChangesSuite struct { 17 Dir, Path string 18 Reporter aptly.ResultReporter 19 db database.Storage 20 localRepoCollection *LocalRepoCollection 21 packageCollection *PackageCollection 22 packagePool aptly.PackagePool 23 checksumStorage aptly.ChecksumStorage 24 progress aptly.Progress 25} 26 27var _ = Suite(&ChangesSuite{}) 28 29func (s *ChangesSuite) SetUpTest(c *C) { 30 s.Reporter = &aptly.RecordingResultReporter{ 31 Warnings: []string{}, 32 AddedLines: []string{}, 33 RemovedLines: []string{}, 34 } 35 s.Dir = c.MkDir() 36 s.Path = filepath.Join(s.Dir, "calamares.changes") 37 err := utils.CopyFile("testdata/changes/calamares.changes", s.Path) 38 c.Assert(err, IsNil) 39 40 s.db, _ = database.NewOpenDB(c.MkDir()) 41 s.localRepoCollection = NewLocalRepoCollection(s.db) 42 s.packageCollection = NewPackageCollection(s.db) 43 44 s.checksumStorage = files.NewMockChecksumStorage() 45 s.packagePool = files.NewPackagePool(s.Dir, false) 46 s.progress = console.NewProgress() 47 s.progress.Start() 48} 49 50func (s *ChangesSuite) TearDownTest(c *C) { 51 s.progress.Shutdown() 52 s.db.Close() 53} 54 55func (s *ChangesSuite) TestParseAndVerify(c *C) { 56 changes, err := NewChanges(s.Path) 57 c.Assert(err, IsNil) 58 59 err = changes.VerifyAndParse(true, true, &NullVerifier{}) 60 c.Check(err, IsNil) 61 62 c.Check(changes.Distribution, Equals, "sid") 63 c.Check(changes.Files, HasLen, 4) 64 c.Check(changes.Files[0].Filename, Equals, "calamares_0+git20141127.99.dsc") 65 c.Check(changes.Files[0].Checksums.Size, Equals, int64(1106)) 66 c.Check(changes.Files[0].Checksums.MD5, Equals, "05fd8f3ffe8f362c5ef9bad2f936a56e") 67 c.Check(changes.Files[0].Checksums.SHA1, Equals, "79f10e955dab6eb25b7f7bae18213f367a3a0396") 68 c.Check(changes.Files[0].Checksums.SHA256, Equals, "35b3280a7b1ffe159a276128cb5c408d687318f60ecbb8ab6dedb2e49c4e82dc") 69 c.Check(changes.BasePath, Equals, s.Dir) 70 c.Check(changes.Architectures, DeepEquals, []string{"source", "amd64"}) 71 c.Check(changes.Source, Equals, "calamares") 72 c.Check(changes.Binary, DeepEquals, []string{"calamares", "calamares-dbg"}) 73} 74 75func (s *ChangesSuite) TestCollectChangesFiles(c *C) { 76 changesFiles, failedFiles := CollectChangesFiles([]string{"testdata/changes"}, s.Reporter) 77 78 c.Check(failedFiles, HasLen, 0) 79 c.Check(changesFiles, DeepEquals, []string{ 80 "testdata/changes/calamares.changes", 81 "testdata/changes/hardlink_0.2.1-invalidfiles_amd64.changes", 82 "testdata/changes/hardlink_0.2.1-invalidsig_amd64.changes", 83 "testdata/changes/hardlink_0.2.1_amd64.changes", 84 }) 85} 86 87func (s *ChangesSuite) TestImportChangesFiles(c *C) { 88 repo := NewLocalRepo("test", "Test Comment") 89 c.Assert(s.localRepoCollection.Add(repo), IsNil) 90 91 origFailedFiles := []string{ 92 "testdata/changes/calamares.changes", 93 "testdata/changes/hardlink_0.2.1-invalidfiles_amd64.changes", 94 "testdata/changes/hardlink_0.2.1-invalidsig_amd64.changes", 95 "testdata/changes/hardlink_0.2.0_i386.deb", 96 } 97 origProcessedFiles := []string{ 98 "testdata/changes/hardlink_0.2.1.dsc", 99 "testdata/changes/hardlink_0.2.1.tar.gz", 100 "testdata/changes/hardlink_0.2.1_amd64.deb", 101 "testdata/changes/hardlink_0.2.1_amd64.buildinfo", 102 "testdata/changes/hardlink_0.2.1_amd64.changes", 103 } 104 105 var expectedProcessedFiles, expectedFailedFiles []string 106 107 for _, path := range origFailedFiles { 108 filename := filepath.Join(s.Dir, filepath.Base(path)) 109 utils.CopyFile(path, filename) 110 expectedFailedFiles = append(expectedFailedFiles, filename) 111 } 112 113 for _, path := range origProcessedFiles { 114 filename := filepath.Join(s.Dir, filepath.Base(path)) 115 utils.CopyFile(path, filename) 116 expectedProcessedFiles = append(expectedProcessedFiles, filename) 117 } 118 119 changesFiles, failedFiles := CollectChangesFiles([]string{s.Dir}, s.Reporter) 120 c.Check(failedFiles, HasLen, 0) 121 122 processedFiles, failedFiles, err := ImportChangesFiles( 123 append(changesFiles, "testdata/changes/notexistent.changes"), 124 s.Reporter, true, true, false, false, &NullVerifier{}, 125 "test", s.progress, s.localRepoCollection, s.packageCollection, s.packagePool, s.checksumStorage, 126 nil, nil) 127 c.Assert(err, IsNil) 128 c.Check(failedFiles, DeepEquals, append(expectedFailedFiles, "testdata/changes/notexistent.changes")) 129 c.Check(processedFiles, DeepEquals, expectedProcessedFiles) 130} 131 132func (s *ChangesSuite) TestPrepare(c *C) { 133 changes, err := NewChanges("testdata/changes/hardlink_0.2.1_amd64.changes") 134 c.Assert(err, IsNil) 135 err = changes.Prepare() 136 c.Assert(err, IsNil) 137 138 _, err = os.Stat(filepath.Join(changes.TempDir, "hardlink_0.2.1_amd64.changes")) 139 c.Check(err, IsNil) 140} 141 142func (s *ChangesSuite) TestPackageQuery(c *C) { 143 changes, err := NewChanges(s.Path) 144 c.Assert(err, IsNil) 145 146 err = changes.VerifyAndParse(true, true, &NullVerifier{}) 147 c.Check(err, IsNil) 148 149 q := changes.PackageQuery() 150 c.Check(q.String(), Equals, 151 "(($Architecture (= amd64)) | (($Architecture (= source)) | ($Architecture (= )))), ((($PackageType (= source)), (Name (= calamares))) | ((!($PackageType (= source))), (((Name (= calamares-dbg)) | (Name (= calamares))) | ((Source (= calamares)), ((Name (= calamares-dbg-dbgsym)) | (Name (= calamares-dbgsym)))))))") 152} 153