mirror of
https://github.com/mudler/luet.git
synced 2025-08-22 17:16:00 +00:00
Add boltDB test and fixup range over interface cast
This commit is contained in:
parent
99c59643a1
commit
39bc74fc73
@ -40,6 +40,9 @@ var _ = Describe("Database benchmark", func() {
|
|||||||
tmpfile, _ = ioutil.TempFile(os.TempDir(), "tests")
|
tmpfile, _ = ioutil.TempFile(os.TempDir(), "tests")
|
||||||
defer os.Remove(tmpfile.Name()) // clean up
|
defer os.Remove(tmpfile.Name()) // clean up
|
||||||
db = NewBoltDatabase(tmpfile.Name())
|
db = NewBoltDatabase(tmpfile.Name())
|
||||||
|
if os.Getenv("BENCHMARK_TESTS") != "true" {
|
||||||
|
Skip("BENCHMARK_TESTS not enabled")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
Measure("it should be fast in computing world from a 50000 dataset", func(b Benchmarker) {
|
Measure("it should be fast in computing world from a 50000 dataset", func(b Benchmarker) {
|
||||||
@ -54,9 +57,9 @@ var _ = Describe("Database benchmark", func() {
|
|||||||
Expect(len(packs)).To(Equal(50000))
|
Expect(len(packs)).To(Equal(50000))
|
||||||
})
|
})
|
||||||
|
|
||||||
Ω(runtime.Seconds()).Should(BeNumerically("<", 5), "World() shouldn't take too long.")
|
Ω(runtime.Seconds()).Should(BeNumerically("<", 30), "World() shouldn't take too long.")
|
||||||
|
|
||||||
}, 10)
|
}, 1)
|
||||||
|
|
||||||
Measure("it should be fast in computing world from a 100000 dataset", func(b Benchmarker) {
|
Measure("it should be fast in computing world from a 100000 dataset", func(b Benchmarker) {
|
||||||
for i := 0; i < 100000; i++ {
|
for i := 0; i < 100000; i++ {
|
||||||
@ -70,9 +73,9 @@ var _ = Describe("Database benchmark", func() {
|
|||||||
Expect(len(packs)).To(Equal(100000))
|
Expect(len(packs)).To(Equal(100000))
|
||||||
})
|
})
|
||||||
|
|
||||||
Ω(runtime.Seconds()).Should(BeNumerically("<", 5), "World() shouldn't take too long.")
|
Ω(runtime.Seconds()).Should(BeNumerically("<", 30), "World() shouldn't take too long.")
|
||||||
|
|
||||||
}, 2)
|
}, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("InMemory", func() {
|
Context("InMemory", func() {
|
||||||
@ -88,6 +91,9 @@ var _ = Describe("Database benchmark", func() {
|
|||||||
tmpfile, _ = ioutil.TempFile(os.TempDir(), "tests")
|
tmpfile, _ = ioutil.TempFile(os.TempDir(), "tests")
|
||||||
defer os.Remove(tmpfile.Name()) // clean up
|
defer os.Remove(tmpfile.Name()) // clean up
|
||||||
db = NewInMemoryDatabase(false)
|
db = NewInMemoryDatabase(false)
|
||||||
|
if os.Getenv("BENCHMARK_TESTS") != "true" {
|
||||||
|
Skip("BENCHMARK_TESTS not enabled")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
Measure("it should be fast in computing world from a 100000 dataset", func(b Benchmarker) {
|
Measure("it should be fast in computing world from a 100000 dataset", func(b Benchmarker) {
|
||||||
@ -103,8 +109,8 @@ var _ = Describe("Database benchmark", func() {
|
|||||||
Expect(len(packs)).To(Equal(100000))
|
Expect(len(packs)).To(Equal(100000))
|
||||||
})
|
})
|
||||||
|
|
||||||
Ω(runtime.Seconds()).Should(BeNumerically("<", 5), "World() shouldn't take too long.")
|
Ω(runtime.Seconds()).Should(BeNumerically("<", 10), "World() shouldn't take too long.")
|
||||||
|
|
||||||
}, 10)
|
}, 2)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -319,8 +319,8 @@ func (db *BoltDatabase) World() Packages {
|
|||||||
return Packages([]Package{})
|
return Packages([]Package{})
|
||||||
}
|
}
|
||||||
models := make([]Package, len(packs))
|
models := make([]Package, len(packs))
|
||||||
for i, v := range packs {
|
for i, _ := range packs {
|
||||||
models[i] = &v
|
models[i] = &packs[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
return Packages(models)
|
return Packages(models)
|
||||||
|
152
pkg/package/database_boltdb_test.go
Normal file
152
pkg/package/database_boltdb_test.go
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
// Copyright © 2019 Ettore Di Giacinto <mudler@gentoo.org>
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation; either version 2 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or ItNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License along
|
||||||
|
// with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
package pkg_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
|
. "github.com/mudler/luet/pkg/package"
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("BoltDB Database", func() {
|
||||||
|
|
||||||
|
tmpfile, _ := ioutil.TempFile(os.TempDir(), "tests")
|
||||||
|
defer os.Remove(tmpfile.Name()) // clean up
|
||||||
|
var db PackageDatabase
|
||||||
|
|
||||||
|
BeforeEach(func() {
|
||||||
|
tmpfile, _ = ioutil.TempFile(os.TempDir(), "tests")
|
||||||
|
defer os.Remove(tmpfile.Name()) // clean up
|
||||||
|
db = NewBoltDatabase(tmpfile.Name())
|
||||||
|
})
|
||||||
|
Context("Simple package", func() {
|
||||||
|
a := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
It("Find packages", func() {
|
||||||
|
ID, err := db.CreatePackage(a)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
pack, err := db.GetPackage(ID)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
Expect(pack).To(Equal(a))
|
||||||
|
ids := db.GetPackages()
|
||||||
|
|
||||||
|
Expect(ids).To(Equal([]string{"1"}))
|
||||||
|
|
||||||
|
pack, err = db.FindPackage(a)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(pack).To(Equal(a))
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
It("Expands correctly", func() {
|
||||||
|
|
||||||
|
a := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a1 := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a11 := NewPackage("A", "1.1", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
a01 := NewPackage("A", "0.1", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
re := regexp.MustCompile("project[0-9][=].*")
|
||||||
|
for _, p := range []Package{a1, a11, a01} {
|
||||||
|
_, err := db.CreatePackage(p)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
}
|
||||||
|
lst, err := a.Expand(db)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(lst).To(ContainElement(a11))
|
||||||
|
Expect(lst).To(ContainElement(a1))
|
||||||
|
Expect(lst).ToNot(ContainElement(a01))
|
||||||
|
Expect(len(lst)).To(Equal(2))
|
||||||
|
p := lst.Best(nil)
|
||||||
|
Expect(p).To(Equal(a11))
|
||||||
|
// Test annotation with null map
|
||||||
|
Expect(a.MatchAnnotation(re)).To(Equal(false))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("Find best package candidate", 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())
|
||||||
|
s := NewPackage("A", ">=1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
pack, err := db.FindPackageCandidate(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(pack).To(Equal(a3))
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
It("Find specific package candidate", 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())
|
||||||
|
s := NewPackage("A", "=1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
pack, err := db.FindPackageCandidate(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(pack).To(Equal(a))
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
It("Provides replaces definitions", 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{})
|
||||||
|
|
||||||
|
a3.SetProvides([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}})
|
||||||
|
Expect(a3.GetProvides()).To(Equal([]*DefaultPackage{{Name: "A", Category: "", Version: "1.0"}}))
|
||||||
|
|
||||||
|
_, err := db.CreatePackage(a)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = db.CreatePackage(a1)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = db.CreatePackage(a3)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
s := NewPackage("A", "1.0", []*DefaultPackage{}, []*DefaultPackage{})
|
||||||
|
|
||||||
|
pack, err := db.FindPackage(s)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(pack).To(Equal(a3))
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
@ -16,17 +16,16 @@
|
|||||||
package solver_test
|
package solver_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strconv"
|
|
||||||
|
|
||||||
pkg "github.com/mudler/luet/pkg/package"
|
pkg "github.com/mudler/luet/pkg/package"
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
. "github.com/mudler/luet/pkg/solver"
|
. "github.com/mudler/luet/pkg/solver"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = Describe("Solver Benchmarks", func() {
|
var _ = Describe("Solver Benchmarks", func() {
|
||||||
|
|
||||||
db := pkg.NewInMemoryDatabase(false)
|
db := pkg.NewInMemoryDatabase(false)
|
||||||
dbInstalled := pkg.NewInMemoryDatabase(false)
|
dbInstalled := pkg.NewInMemoryDatabase(false)
|
||||||
dbDefinitions := pkg.NewInMemoryDatabase(false)
|
dbDefinitions := pkg.NewInMemoryDatabase(false)
|
||||||
@ -38,6 +37,9 @@ var _ = Describe("Solver Benchmarks", func() {
|
|||||||
dbInstalled = pkg.NewInMemoryDatabase(false)
|
dbInstalled = pkg.NewInMemoryDatabase(false)
|
||||||
dbDefinitions = pkg.NewInMemoryDatabase(false)
|
dbDefinitions = pkg.NewInMemoryDatabase(false)
|
||||||
s = NewSolver(Options{Type: SingleCoreSimple}, dbInstalled, dbDefinitions, db)
|
s = NewSolver(Options{Type: SingleCoreSimple}, dbInstalled, dbDefinitions, db)
|
||||||
|
if os.Getenv("BENCHMARK_TESTS") != "true" {
|
||||||
|
Skip("BENCHMARK_TESTS not enabled")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
Measure("it should be fast in resolution from a 50000 dataset", func(b Benchmarker) {
|
Measure("it should be fast in resolution from a 50000 dataset", func(b Benchmarker) {
|
||||||
|
|
||||||
@ -59,7 +61,7 @@ var _ = Describe("Solver Benchmarks", func() {
|
|||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 1; i++ {
|
||||||
C := pkg.NewPackage("C"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
C := pkg.NewPackage("C"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
G := pkg.NewPackage("G"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
G := pkg.NewPackage("G"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
H := pkg.NewPackage("H"+strconv.Itoa(i), "", []*pkg.DefaultPackage{G}, []*pkg.DefaultPackage{})
|
H := pkg.NewPackage("H"+strconv.Itoa(i), "", []*pkg.DefaultPackage{G}, []*pkg.DefaultPackage{})
|
||||||
@ -80,7 +82,7 @@ var _ = Describe("Solver Benchmarks", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Ω(runtime.Seconds()).Should(BeNumerically("<", 120), "Install() shouldn't take too long.")
|
Ω(runtime.Seconds()).Should(BeNumerically("<", 120), "Install() shouldn't take too long.")
|
||||||
}, 5)
|
}, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("Complex data sets - Parallel", func() {
|
Context("Complex data sets - Parallel", func() {
|
||||||
@ -89,6 +91,9 @@ var _ = Describe("Solver Benchmarks", func() {
|
|||||||
dbInstalled = pkg.NewInMemoryDatabase(false)
|
dbInstalled = pkg.NewInMemoryDatabase(false)
|
||||||
dbDefinitions = pkg.NewInMemoryDatabase(false)
|
dbDefinitions = pkg.NewInMemoryDatabase(false)
|
||||||
s = NewSolver(Options{Type: ParallelSimple, Concurrency: 10}, dbInstalled, dbDefinitions, db)
|
s = NewSolver(Options{Type: ParallelSimple, Concurrency: 10}, dbInstalled, dbDefinitions, db)
|
||||||
|
if os.Getenv("BENCHMARK_TESTS") != "true" {
|
||||||
|
Skip("BENCHMARK_TESTS not enabled")
|
||||||
|
}
|
||||||
})
|
})
|
||||||
Measure("it should be fast in resolution from a 50000 dataset", func(b Benchmarker) {
|
Measure("it should be fast in resolution from a 50000 dataset", func(b Benchmarker) {
|
||||||
runtime := b.Time("runtime", func() {
|
runtime := b.Time("runtime", func() {
|
||||||
@ -108,7 +113,7 @@ var _ = Describe("Solver Benchmarks", func() {
|
|||||||
_, err := dbInstalled.CreatePackage(C)
|
_, err := dbInstalled.CreatePackage(C)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
}
|
}
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 1; i++ {
|
||||||
C := pkg.NewPackage("C"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
C := pkg.NewPackage("C"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
G := pkg.NewPackage("G"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
G := pkg.NewPackage("G"+strconv.Itoa(i), "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
H := pkg.NewPackage("H"+strconv.Itoa(i), "", []*pkg.DefaultPackage{G}, []*pkg.DefaultPackage{})
|
H := pkg.NewPackage("H"+strconv.Itoa(i), "", []*pkg.DefaultPackage{G}, []*pkg.DefaultPackage{})
|
||||||
@ -131,7 +136,7 @@ var _ = Describe("Solver Benchmarks", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Ω(runtime.Seconds()).Should(BeNumerically("<", 70), "Install() shouldn't take too long.")
|
Ω(runtime.Seconds()).Should(BeNumerically("<", 70), "Install() shouldn't take too long.")
|
||||||
}, 5)
|
}, 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -117,7 +117,7 @@ var _ = Describe("Recipe", func() {
|
|||||||
}) // Note: the definition depends on pinentry-base without an explicit version
|
}) // Note: the definition depends on pinentry-base without an explicit version
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
s := solver.NewSolver(pkg.NewInMemoryDatabase(false), tree, tree)
|
s := solver.NewSolver(solver.Options{Type: solver.SingleCoreSimple}, pkg.NewInMemoryDatabase(false), tree, tree)
|
||||||
solution, err := s.Install([]pkg.Package{pack})
|
solution, err := s.Install([]pkg.Package{pack})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(len(solution)).To(Equal(33))
|
Expect(len(solution)).To(Equal(33))
|
||||||
|
@ -59,7 +59,7 @@ var _ = Describe("Tree", func() {
|
|||||||
Expect(len(CfromD.GetRequires()) != 0).To(BeTrue())
|
Expect(len(CfromD.GetRequires()) != 0).To(BeTrue())
|
||||||
Expect(CfromD.GetRequires()[0].GetName()).To(Equal("b"))
|
Expect(CfromD.GetRequires()[0].GetName()).To(Equal("b"))
|
||||||
|
|
||||||
s := solver.NewSolver(pkg.NewInMemoryDatabase(false), generalRecipe.GetDatabase(), db)
|
s := solver.NewSolver(solver.Options{Type: solver.SingleCoreSimple}, pkg.NewInMemoryDatabase(false), generalRecipe.GetDatabase(), db)
|
||||||
pack, err := generalRecipe.GetDatabase().FindPackage(&pkg.DefaultPackage{Name: "d", Category: "test", Version: "1.0"})
|
pack, err := generalRecipe.GetDatabase().FindPackage(&pkg.DefaultPackage{Name: "d", Category: "test", Version: "1.0"})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ var _ = Describe("Tree", func() {
|
|||||||
Expect(len(CfromD.GetRequires()) != 0).To(BeTrue())
|
Expect(len(CfromD.GetRequires()) != 0).To(BeTrue())
|
||||||
Expect(CfromD.GetRequires()[0].GetName()).To(Equal("b"))
|
Expect(CfromD.GetRequires()[0].GetName()).To(Equal("b"))
|
||||||
|
|
||||||
s := solver.NewSolver(pkg.NewInMemoryDatabase(false), generalRecipe.GetDatabase(), db)
|
s := solver.NewSolver(solver.Options{Type: solver.SingleCoreSimple}, pkg.NewInMemoryDatabase(false), generalRecipe.GetDatabase(), db)
|
||||||
|
|
||||||
Dd, err := generalRecipe.GetDatabase().FindPackage(&pkg.DefaultPackage{Name: "d", Category: "test", Version: "1.0"})
|
Dd, err := generalRecipe.GetDatabase().FindPackage(&pkg.DefaultPackage{Name: "d", Category: "test", Version: "1.0"})
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Loading…
Reference in New Issue
Block a user