diff --git a/pkg/installer/repository_test.go b/pkg/installer/repository_test.go index 18568e0e..8b8abc3a 100644 --- a/pkg/installer/repository_test.go +++ b/pkg/installer/repository_test.go @@ -392,5 +392,80 @@ urls: Expect(string(content)).To(Equal("")) }) + + It("Searches files", func() { + repos := Repositories{ + &LuetSystemRepository{ + Index: compiler.ArtifactIndex{ + &compiler.PackageArtifact{ + CompileSpec: &compiler.LuetCompilationSpec{ + Package: &pkg.DefaultPackage{}, + }, + Path: "bar", + Files: []string{"boo"}, + }, + &compiler.PackageArtifact{ + Path: "d", + Files: []string{"baz"}, + }, + }, + }, + } + + matches := repos.SearchPackages("bo", FileSearch) + Expect(len(matches)).To(Equal(1)) + Expect(matches[0].Artifact.GetPath()).To(Equal("bar")) + }) + + It("Searches packages", func() { + repo := &LuetSystemRepository{ + Index: compiler.ArtifactIndex{ + &compiler.PackageArtifact{ + Path: "foo", + CompileSpec: &compiler.LuetCompilationSpec{ + Package: &pkg.DefaultPackage{ + Name: "foo", + Category: "bar", + Version: "1.0", + }, + }, + }, + &compiler.PackageArtifact{ + Path: "baz", + CompileSpec: &compiler.LuetCompilationSpec{ + Package: &pkg.DefaultPackage{ + Name: "foo", + Category: "baz", + Version: "1.0", + }, + }, + }, + }, + } + + a, err := repo.SearchArtefact(&pkg.DefaultPackage{ + Name: "foo", + Category: "baz", + Version: "1.0", + }) + Expect(err).ToNot(HaveOccurred()) + Expect(a.GetPath()).To(Equal("baz")) + + a, err = repo.SearchArtefact(&pkg.DefaultPackage{ + Name: "foo", + Category: "bar", + Version: "1.0", + }) + Expect(err).ToNot(HaveOccurred()) + Expect(a.GetPath()).To(Equal("foo")) + + // Doesn't exist. so must fail + _, err = repo.SearchArtefact(&pkg.DefaultPackage{ + Name: "foo", + Category: "bar", + Version: "1.1", + }) + Expect(err).To(HaveOccurred()) + }) }) }) diff --git a/pkg/package/database_boltdb_test.go b/pkg/package/database_boltdb_test.go index 238a06d6..676a3edf 100644 --- a/pkg/package/database_boltdb_test.go +++ b/pkg/package/database_boltdb_test.go @@ -57,6 +57,31 @@ var _ = Describe("BoltDB Database", func() { }) + It("Find package files", func() { + a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) + a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + _, err := db.CreatePackage(a) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a1) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a3) + Expect(err).ToNot(HaveOccurred()) + + err = db.SetPackageFiles(&PackageFile{PackageFingerprint: a.GetFingerPrint(), Files: []string{"foo"}}) + Expect(err).ToNot(HaveOccurred()) + + err = db.SetPackageFiles(&PackageFile{PackageFingerprint: a1.GetFingerPrint(), Files: []string{"bar"}}) + Expect(err).ToNot(HaveOccurred()) + + pack, err := db.FindPackageByFile("fo") + Expect(err).ToNot(HaveOccurred()) + Expect(len(pack)).To(Equal(1)) + Expect(pack[0]).To(Equal(a)) + }) + It("Expands correctly", func() { a := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{}) diff --git a/pkg/package/database_mem_test.go b/pkg/package/database_mem_test.go index b24dd543..fbfb5560 100644 --- a/pkg/package/database_mem_test.go +++ b/pkg/package/database_mem_test.go @@ -77,6 +77,32 @@ var _ = Describe("Database", func() { }) + It("Find package files", func() { + db := NewInMemoryDatabase(false) + a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) + a1 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{}) + a3 := NewPackage("A", "1.3", []*DefaultPackage{}, []*DefaultPackage{}) + _, err := db.CreatePackage(a) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a1) + Expect(err).ToNot(HaveOccurred()) + + _, err = db.CreatePackage(a3) + Expect(err).ToNot(HaveOccurred()) + + err = db.SetPackageFiles(&PackageFile{PackageFingerprint: a.GetFingerPrint(), Files: []string{"foo"}}) + Expect(err).ToNot(HaveOccurred()) + + err = db.SetPackageFiles(&PackageFile{PackageFingerprint: a1.GetFingerPrint(), Files: []string{"bar"}}) + Expect(err).ToNot(HaveOccurred()) + + pack, err := db.FindPackageByFile("fo") + Expect(err).ToNot(HaveOccurred()) + Expect(len(pack)).To(Equal(1)) + Expect(pack[0]).To(Equal(a)) + }) + It("Find specific package candidate", func() { db := NewInMemoryDatabase(false) a := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{}) diff --git a/tests/integration/06_search_files.sh b/tests/integration/06_search_files.sh new file mode 100755 index 00000000..57c43621 --- /dev/null +++ b/tests/integration/06_search_files.sh @@ -0,0 +1,128 @@ +#!/bin/bash + +export LUET_NOLOCK=true +oneTimeSetUp() { +export tmpdir="$(mktemp -d)" +} + +oneTimeTearDown() { + rm -rf "$tmpdir" +} + +testBuild() { + mkdir $tmpdir/testbuild + luet build --tree "$ROOT_DIR/tests/fixtures/upgrade_integration" --destination $tmpdir/testbuild --compression gzip test/b@1.0 + buildst=$? + assertTrue 'create package B 1.0' "[ -e '$tmpdir/testbuild/b-test-1.0.package.tar.gz' ]" + assertEquals 'builds successfully' "$buildst" "0" + + luet build --tree "$ROOT_DIR/tests/fixtures/upgrade_integration" --destination $tmpdir/testbuild --compression gzip test/b@1.1 + buildst=$? + assertEquals 'builds successfully' "$buildst" "0" + assertTrue 'create package B 1.1' "[ -e '$tmpdir/testbuild/b-test-1.1.package.tar.gz' ]" + + luet build --tree "$ROOT_DIR/tests/fixtures/upgrade_integration" --destination $tmpdir/testbuild --compression gzip test/a@1.0 + buildst=$? + assertEquals 'builds successfully' "$buildst" "0" + assertTrue 'create package A 1.0' "[ -e '$tmpdir/testbuild/a-test-1.0.package.tar.gz' ]" + + luet build --tree "$ROOT_DIR/tests/fixtures/upgrade_integration" --destination $tmpdir/testbuild --compression gzip test/a@1.1 + buildst=$? + assertEquals 'builds successfully' "$buildst" "0" + + assertTrue 'create package A 1.1' "[ -e '$tmpdir/testbuild/a-test-1.1.package.tar.gz' ]" + + luet build --tree "$ROOT_DIR/tests/fixtures/upgrade_integration" --destination $tmpdir/testbuild --compression gzip test/a@1.2 + buildst=$? + assertEquals 'builds successfully' "$buildst" "0" + + assertTrue 'create package A 1.2' "[ -e '$tmpdir/testbuild/a-test-1.2.package.tar.gz' ]" + + + luet build --tree "$ROOT_DIR/tests/fixtures/upgrade_integration" --destination $tmpdir/testbuild --compression gzip test/c@1.0 + buildst=$? + assertEquals 'builds successfully' "$buildst" "0" + assertTrue 'create package C 1.0' "[ -e '$tmpdir/testbuild/c-test-1.0.package.tar.gz' ]" + +} + +testRepo() { + assertTrue 'no repository' "[ ! -e '$tmpdir/testbuild/repository.yaml' ]" + luet create-repo --tree "$ROOT_DIR/tests/fixtures/upgrade_integration" \ + --output $tmpdir/testbuild \ + --packages $tmpdir/testbuild \ + --name "test" \ + --descr "Test Repo" \ + --urls $tmpdir/testrootfs \ + --type disk + + createst=$? + assertEquals 'create repo successfully' "$createst" "0" + assertTrue 'create repository' "[ -e '$tmpdir/testbuild/repository.yaml' ]" +} + +testConfig() { + mkdir $tmpdir/testrootfs + cat < $tmpdir/luet.yaml +general: + debug: true +system: + rootfs: $tmpdir/testrootfs + database_path: "/" + database_engine: "boltdb" +config_from_host: true +repositories: + - name: "main" + type: "disk" + enable: true + urls: + - "$tmpdir/testbuild" +EOF + luet config --config $tmpdir/luet.yaml + res=$? + assertEquals 'config test successfully' "$res" "0" +} + + +testSearch() { + installed=$(luet --config $tmpdir/luet.yaml search --files testaa) + searchst=$? + assertEquals 'search exists successfully' "$searchst" "0" + assertContains 'contains test/a-1.0' "$installed" 'test/a-1.0' +} + +testGetSearchLocal() { + luet install -y --config $tmpdir/luet.yaml test/a@1.0 + assertTrue 'package installed A' "[ -e '$tmpdir/testrootfs/testaa' ]" + installst=$? + assertEquals 'install test successfully' "$installst" "0" + + installed=$(luet --config $tmpdir/luet.yaml database get --files test/a@1.0) + searchst=$? + assertEquals 'search exists successfully' "$searchst" "0" + assertContains 'contains file' "$installed" 'testaa' + + installed=$(luet --config $tmpdir/luet.yaml database get test/a@1.0) + searchst=$? + assertEquals 'search exists successfully' "$searchst" "0" + assertNotContains 'contains file' "$installed" 'testaa' + + + + installed=$(luet --config $tmpdir/luet.yaml search --installed --files testaa) + searchst=$? + assertEquals 'search exists successfully' "$searchst" "0" + + assertContains 'contains test/a-1.1' "$installed" 'test/a-1.0' + + installed=$(luet --config $tmpdir/luet.yaml search --installed --files foo) + searchst=$? + assertEquals 'search exists successfully' "$searchst" "0" + + assertNotContains 'contains test/a-1.1' "$installed" 'test/a-1.0' +} + + +# Load shUnit2. +. "$ROOT_DIR/tests/integration/shunit2"/shunit2 +