From d7e58623a917a7c39e42612289151b04cd8d1a1f Mon Sep 17 00:00:00 2001 From: Rascalov Date: Fri, 23 Oct 2026 00:33:16 +0200 Subject: [PATCH] deb: add tests for keeping the N most recent versions --- deb/list_test.go | 48 +++++++++++++++++++++++++++++++++++++++++++--- deb/remote_test.go | 35 ++++++++++++++++++--------------- 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/deb/list_test.go b/deb/list_test.go index d63a3451..6d3e6064 100644 --- a/deb/list_test.go +++ b/deb/list_test.go @@ -524,13 +524,55 @@ func (s *PackageListSuite) TestFilterLatest(c *C) { sharedPkg := NewPackageFromControlFile(shared) _ = list.Add(sharedPkg) - filtered, err := list.FilterLatest() + filtered, err := list.FilterLatest(1) c.Assert(err, IsNil) c.Assert(filtered.Len(), Equals, 2) c.Check(filtered.Has(newerPkg), Equals, true) c.Check(filtered.Has(sharedPkg), Equals, true) } +func (s *PackageListSuite) TestFilterLatestMultiple(c *C) { + list := NewPackageList() + + pkgs := make([]*Package, 0, 4) + for _, version := range []string{"2.0", "1.0", "10.0", "1:0.1"} { + stanza := packageStanza.Copy() + stanza["Version"] = version + pkg := NewPackageFromControlFile(stanza) + _ = list.Add(pkg) + pkgs = append(pkgs, pkg) + } + + shared := packageStanza.Copy() + shared["Architecture"] = ArchitectureAll + shared["Version"] = "3.0" + shared["Package"] = "shared" + sharedPkg := NewPackageFromControlFile(shared) + _ = list.Add(sharedPkg) + + filtered, err := list.FilterLatest(3) + c.Assert(err, IsNil) + c.Assert(filtered.Len(), Equals, 4) + c.Check(filtered.Has(pkgs[0]), Equals, true) + c.Check(filtered.Has(pkgs[1]), Equals, false) + c.Check(filtered.Has(pkgs[2]), Equals, true) + c.Check(filtered.Has(pkgs[3]), Equals, true) + c.Check(filtered.Has(sharedPkg), Equals, true) + + // fewer versions available than requested: everything is kept + filtered, err = list.FilterLatest(5) + c.Assert(err, IsNil) + c.Check(filtered.Len(), Equals, 5) +} + +func (s *PackageListSuite) TestFilterLatestInvalidCount(c *C) { + list := NewPackageList() + + filtered, err := list.FilterLatest(0) + c.Assert(err, ErrorMatches, "number of latest versions should be at least 1, got 0") + c.Assert(filtered, IsNil) +} + func (s *PackageListSuite) TestFilterLatestInvalidVersions(c *C) { list := NewPackageList() valid := &Package{Name: "pkg", Version: "1.0", Architecture: "amd64"} @@ -570,7 +612,7 @@ func (s *PackageListSuite) TestFilterLatestPreservesDuplicatesFlag(c *C) { another["Version"] = "7.41-1" _ = list.Add(NewPackageFromControlFile(another)) - filtered, err := list.FilterLatest() + filtered, err := list.FilterLatest(1) c.Assert(err, IsNil) c.Assert(filtered.duplicatesAllowed, Equals, true) } @@ -578,7 +620,7 @@ func (s *PackageListSuite) TestFilterLatestPreservesDuplicatesFlag(c *C) { func (s *PackageListSuite) TestFilterLatestNil(c *C) { var list *PackageList - filtered, err := list.FilterLatest() + filtered, err := list.FilterLatest(1) c.Assert(err, ErrorMatches, "package list is nil") c.Assert(filtered, IsNil) } diff --git a/deb/remote_test.go b/deb/remote_test.go index 4154e0b8..0381655d 100644 --- a/deb/remote_test.go +++ b/deb/remote_test.go @@ -322,7 +322,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) { c.Assert(err, IsNil) c.Assert(s.downloader.Empty(), Equals, true) - queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(3)) c.Check(queue, HasLen, 1) @@ -349,7 +349,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) { c.Assert(err, IsNil) c.Assert(s.downloader.Empty(), Equals, true) - queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true, false) + queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true) c.Assert(err, IsNil) c.Check(size, Equals, int64(0)) c.Check(queue, HasLen, 0) @@ -370,7 +370,7 @@ func (s *RemoteRepoSuite) TestDownload(c *C) { c.Assert(err, IsNil) c.Assert(s.downloader.Empty(), Equals, true) - queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(3)) c.Check(queue, HasLen, 1) @@ -397,7 +397,7 @@ func (s *RemoteRepoSuite) TestDownloadWithInstaller(c *C) { c.Assert(err, IsNil) c.Assert(s.downloader.Empty(), Equals, true) - queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(3)+int64(len(exampleInstallerManifestFile))) c.Check(queue, HasLen, 2) @@ -423,7 +423,7 @@ func (s *RemoteRepoSuite) TestDownloadWithInstaller(c *C) { c.Check(pkg.Name, Equals, "installer") } -func (s *RemoteRepoSuite) TestBuildDownloadQueueLatestOnly(c *C) { +func (s *RemoteRepoSuite) TestFilterLatest(c *C) { s.repo.Architectures = []string{"i386"} err := s.repo.Fetch(s.downloader, nil, true) @@ -445,7 +445,12 @@ func (s *RemoteRepoSuite) TestBuildDownloadQueueLatestOnly(c *C) { newest := NewPackageFromControlFile(stanza) _ = s.repo.packageList.Add(newest) - queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, true) + oldLen, newLen, err := s.repo.FilterLatest(1) + c.Assert(err, IsNil) + c.Check(oldLen, Equals, 2) + c.Check(newLen, Equals, 1) + + queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(queue, HasLen, 1) c.Check(queue[0].File.DownloadURL(), Equals, "pool/main/a/amanda/amanda-client_3.4.0-1_i386.deb") @@ -470,7 +475,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) { c.Assert(err, IsNil) c.Assert(s.downloader.Empty(), Equals, true) - queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err := s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(15)) c.Check(queue, HasLen, 4) @@ -514,7 +519,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) { c.Assert(err, IsNil) c.Assert(s.downloader.Empty(), Equals, true) - queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true, false) + queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true) c.Assert(err, IsNil) c.Check(size, Equals, int64(0)) c.Check(queue, HasLen, 0) @@ -539,7 +544,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSources(c *C) { c.Assert(err, IsNil) c.Assert(s.downloader.Empty(), Equals, true) - queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err = s.repo.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(15)) c.Check(queue, HasLen, 4) @@ -563,7 +568,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) { c.Assert(err, IsNil) c.Assert(downloader.Empty(), Equals, true) - queue, size, err := s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err := s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(3)) c.Check(queue, HasLen, 1) @@ -591,7 +596,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) { c.Assert(err, IsNil) c.Assert(downloader.Empty(), Equals, true) - queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true, false) + queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true) c.Assert(err, IsNil) c.Check(size, Equals, int64(0)) c.Check(queue, HasLen, 0) @@ -613,7 +618,7 @@ func (s *RemoteRepoSuite) TestDownloadFlat(c *C) { c.Assert(err, IsNil) c.Assert(downloader.Empty(), Equals, true) - queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(3)) c.Check(queue, HasLen, 1) @@ -644,7 +649,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) { c.Assert(err, IsNil) c.Assert(downloader.Empty(), Equals, true) - queue, size, err := s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err := s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(15)) c.Check(queue, HasLen, 4) @@ -690,7 +695,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) { c.Assert(err, IsNil) c.Assert(downloader.Empty(), Equals, true) - queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true, false) + queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, true) c.Assert(err, IsNil) c.Check(size, Equals, int64(0)) c.Check(queue, HasLen, 0) @@ -716,7 +721,7 @@ func (s *RemoteRepoSuite) TestDownloadWithSourcesFlat(c *C) { c.Assert(err, IsNil) c.Assert(downloader.Empty(), Equals, true) - queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false, false) + queue, size, err = s.flat.BuildDownloadQueue(s.packagePool, s.collectionFactory.PackageCollection(), s.cs, false) c.Assert(err, IsNil) c.Check(size, Equals, int64(15)) c.Check(queue, HasLen, 4)