diff --git a/pkg/compiler/compiler_test.go b/pkg/compiler/compiler_test.go index d2dbf0e0..1eea1f46 100644 --- a/pkg/compiler/compiler_test.go +++ b/pkg/compiler/compiler_test.go @@ -614,4 +614,40 @@ var _ = Describe("Compiler", func() { Expect(helpers.Exists(spec.Rel("var"))).ToNot(BeTrue()) }) }) + + Context("Compression", func() { + It("Builds packages in gzip", func() { + generalRecipe := tree.NewCompilerRecipe(pkg.NewInMemoryDatabase(false)) + + err := generalRecipe.Load("../../tests/fixtures/packagelayers") + Expect(err).ToNot(HaveOccurred()) + + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(2)) + + compiler := NewLuetCompiler(sd.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + + spec, err := compiler.FromPackage(&pkg.DefaultPackage{Name: "runtime", Category: "layer", Version: "0.1"}) + Expect(err).ToNot(HaveOccurred()) + compiler.SetCompressionType(GZip) + Expect(spec.GetPackage().GetPath()).ToNot(Equal("")) + + tmpdir, err := ioutil.TempDir("", "tree") + Expect(err).ToNot(HaveOccurred()) + defer os.RemoveAll(tmpdir) // clean up + + spec.SetOutputPath(tmpdir) + compiler.SetConcurrency(1) + + artifacts, errs := compiler.CompileParallel(false, NewLuetCompilationspecs(spec)) + Expect(errs).To(BeNil()) + Expect(len(artifacts)).To(Equal(1)) + Expect(len(artifacts[0].GetDependencies())).To(Equal(1)) + Expect(helpers.Exists(spec.Rel("runtime-layer-0.1.package.tar.gz"))).To(BeTrue()) + Expect(helpers.Exists(spec.Rel("runtime-layer-0.1.package.tar"))).To(BeFalse()) + Expect(artifacts[0].Unpack(tmpdir, false)).ToNot(HaveOccurred()) + // Expect(helpers.Untar(spec.Rel("runtime-layer-0.1.package.tar"), tmpdir, false)).ToNot(HaveOccurred()) + Expect(helpers.Exists(spec.Rel("bin/busybox"))).To(BeTrue()) + Expect(helpers.Exists(spec.Rel("var"))).ToNot(BeTrue()) + }) + }) }) diff --git a/pkg/installer/installer_test.go b/pkg/installer/installer_test.go index 5e124260..a90805a3 100644 --- a/pkg/installer/installer_test.go +++ b/pkg/installer/installer_test.go @@ -375,4 +375,118 @@ uri: "`+tmpdir+`" }) + Context("Compressed packages", func() { + It("Installs", func() { + //repo:=NewLuetRepository() + + tmpdir, err := ioutil.TempDir("", "tree") + Expect(err).ToNot(HaveOccurred()) + defer os.RemoveAll(tmpdir) // clean up + + generalRecipe := tree.NewCompilerRecipe(pkg.NewInMemoryDatabase(false)) + + err = generalRecipe.Load("../../tests/fixtures/upgrade") + Expect(err).ToNot(HaveOccurred()) + + Expect(len(generalRecipe.GetDatabase().GetPackages())).To(Equal(4)) + + c := compiler.NewLuetCompiler(backend.NewSimpleDockerBackend(), generalRecipe.GetDatabase()) + + spec, err := c.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) + Expect(err).ToNot(HaveOccurred()) + spec2, err := c.FromPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.1"}) + Expect(err).ToNot(HaveOccurred()) + spec3, err := c.FromPackage(&pkg.DefaultPackage{Name: "c", Category: "test", Version: "1.0"}) + Expect(err).ToNot(HaveOccurred()) + + Expect(spec.GetPackage().GetPath()).ToNot(Equal("")) + + tmpdir, err = ioutil.TempDir("", "tree") + Expect(err).ToNot(HaveOccurred()) + defer os.RemoveAll(tmpdir) // clean up + spec.SetOutputPath(tmpdir) + spec2.SetOutputPath(tmpdir) + spec3.SetOutputPath(tmpdir) + c.SetConcurrency(2) + c.SetCompressionType(compiler.GZip) + _, errs := c.CompileParallel(false, compiler.NewLuetCompilationspecs(spec, spec2, spec3)) + + Expect(errs).To(BeEmpty()) + + repo, err := GenerateRepository("test", tmpdir, "local", 1, tmpdir, "../../tests/fixtures/upgrade", pkg.NewInMemoryDatabase(false)) + Expect(err).ToNot(HaveOccurred()) + Expect(repo.GetName()).To(Equal("test")) + Expect(helpers.Exists(spec.Rel("repository.yaml"))).ToNot(BeTrue()) + Expect(helpers.Exists(spec.Rel("tree.tar"))).ToNot(BeTrue()) + err = repo.Write(tmpdir) + Expect(err).ToNot(HaveOccurred()) + Expect(helpers.Exists(spec.Rel("b-test-1.1.package.tar.gz"))).To(BeTrue()) + Expect(helpers.Exists(spec.Rel("b-test-1.1.package.tar"))).ToNot(BeTrue()) + + Expect(helpers.Exists(spec.Rel("repository.yaml"))).To(BeTrue()) + Expect(helpers.Exists(spec.Rel("tree.tar"))).To(BeTrue()) + Expect(repo.GetUri()).To(Equal(tmpdir)) + Expect(repo.GetType()).To(Equal("local")) + + fakeroot, err := ioutil.TempDir("", "fakeroot") + Expect(err).ToNot(HaveOccurred()) + defer os.RemoveAll(fakeroot) // clean up + + inst := NewLuetInstaller(1) + repo2, err := NewLuetRepositoryFromYaml([]byte(` +name: "test" +type: "local" +uri: "`+tmpdir+`" +`), pkg.NewInMemoryDatabase(false)) + Expect(err).ToNot(HaveOccurred()) + + inst.Repositories(Repositories{repo2}) + Expect(repo.GetUri()).To(Equal(tmpdir)) + Expect(repo.GetType()).To(Equal("local")) + + bolt, err := ioutil.TempDir("", "db") + Expect(err).ToNot(HaveOccurred()) + defer os.RemoveAll(bolt) // clean up + + systemDB := pkg.NewBoltDatabase(filepath.Join(bolt, "db.db")) + system := &System{Database: systemDB, Target: fakeroot} + err = inst.Install([]pkg.Package{&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}}, system) + Expect(err).ToNot(HaveOccurred()) + + Expect(helpers.Exists(filepath.Join(fakeroot, "test5"))).To(BeTrue()) + Expect(helpers.Exists(filepath.Join(fakeroot, "test6"))).To(BeTrue()) + _, err = systemDB.FindPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) + Expect(err).ToNot(HaveOccurred()) + + Expect(len(system.Database.GetPackages())).To(Equal(1)) + p, err := system.Database.GetPackage(system.Database.GetPackages()[0]) + Expect(err).ToNot(HaveOccurred()) + Expect(p.GetName()).To(Equal("b")) + + files, err := systemDB.GetPackageFiles(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) + Expect(files).To(Equal([]string{"artifact42", "test5", "test6"})) + Expect(err).ToNot(HaveOccurred()) + + err = inst.Upgrade(system) + Expect(err).ToNot(HaveOccurred()) + + // Nothing should be there anymore (files, packagedb entry) + Expect(helpers.Exists(filepath.Join(fakeroot, "test5"))).ToNot(BeTrue()) + Expect(helpers.Exists(filepath.Join(fakeroot, "test6"))).ToNot(BeTrue()) + + // New version - new files + Expect(helpers.Exists(filepath.Join(fakeroot, "newc"))).To(BeTrue()) + _, err = system.Database.GetPackageFiles(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) + Expect(err).To(HaveOccurred()) + _, err = system.Database.FindPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.0"}) + Expect(err).To(HaveOccurred()) + + // New package should be there + _, err = system.Database.FindPackage(&pkg.DefaultPackage{Name: "b", Category: "test", Version: "1.1"}) + Expect(err).ToNot(HaveOccurred()) + + }) + + }) + })