mirror of
https://github.com/mudler/luet.git
synced 2025-09-07 18:20:19 +00:00
Add install benchmark test for solver
This commit is contained in:
@@ -17,10 +17,12 @@ package solver_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
pkg "github.com/mudler/luet/pkg/package"
|
pkg "github.com/mudler/luet/pkg/package"
|
||||||
|
"github.com/mudler/luet/tests/helpers"
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
|
|
||||||
@@ -144,13 +146,17 @@ var _ = Describe("Solver Benchmarks", func() {
|
|||||||
Context("Complex data sets - Parallel Upgrades", func() {
|
Context("Complex data sets - Parallel Upgrades", func() {
|
||||||
BeforeEach(func() {
|
BeforeEach(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)
|
||||||
s = NewSolver(Options{Type: ParallelSimple, Concurrency: 100}, dbInstalled, dbDefinitions, db)
|
s = NewSolver(Options{Type: ParallelSimple, Concurrency: 100}, dbInstalled, dbDefinitions, db)
|
||||||
if os.Getenv("BENCHMARK_TESTS") != "true" {
|
if os.Getenv("BENCHMARK_TESTS") != "true" {
|
||||||
Skip("BENCHMARK_TESTS not enabled")
|
Skip("BENCHMARK_TESTS not enabled")
|
||||||
}
|
}
|
||||||
|
tmpfile, _ := ioutil.TempFile(os.TempDir(), "tests")
|
||||||
|
defer os.Remove(tmpfile.Name()) // clean up
|
||||||
|
dbInstalled = pkg.NewBoltDatabase(tmpfile.Name())
|
||||||
})
|
})
|
||||||
|
|
||||||
Measure("it should be fast in resolution from a 10000*8 dataset", func(b Benchmarker) {
|
Measure("it should be fast in resolution from a 10000*8 dataset", func(b Benchmarker) {
|
||||||
runtime := b.Time("runtime", func() {
|
runtime := b.Time("runtime", func() {
|
||||||
for i := 2; i < 10000; i++ {
|
for i := 2; i < 10000; i++ {
|
||||||
@@ -206,6 +212,48 @@ 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.")
|
||||||
}, 1)
|
}, 1)
|
||||||
|
|
||||||
|
Measure("it should be fast in installation with 12000 packages installed and 2000*8 available", func(b Benchmarker) {
|
||||||
|
runtime := b.Time("runtime", func() {
|
||||||
|
for i := 0; i < 2000; i++ {
|
||||||
|
C := pkg.NewPackage("C", strconv.Itoa(i), []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
|
E := pkg.NewPackage("E", strconv.Itoa(i), []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
|
F := pkg.NewPackage("F", 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{})
|
||||||
|
D := pkg.NewPackage("D", strconv.Itoa(i), []*pkg.DefaultPackage{H}, []*pkg.DefaultPackage{})
|
||||||
|
B := pkg.NewPackage("B", strconv.Itoa(i), []*pkg.DefaultPackage{D}, []*pkg.DefaultPackage{})
|
||||||
|
A := pkg.NewPackage("A", strconv.Itoa(i), []*pkg.DefaultPackage{B}, []*pkg.DefaultPackage{})
|
||||||
|
for _, p := range []pkg.Package{A, B, C, D, E, F, G} {
|
||||||
|
_, err := dbDefinitions.CreatePackage(p)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
}
|
||||||
|
fmt.Println("Creating package, run", i)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < 12000; i++ {
|
||||||
|
x := helpers.RandomPackage()
|
||||||
|
_, err := dbInstalled.CreatePackage(x)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
}
|
||||||
|
|
||||||
|
G := pkg.NewPackage("G", strconv.Itoa(50000), []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
|
H := pkg.NewPackage("H", strconv.Itoa(50000), []*pkg.DefaultPackage{G}, []*pkg.DefaultPackage{})
|
||||||
|
D := pkg.NewPackage("D", strconv.Itoa(50000), []*pkg.DefaultPackage{H}, []*pkg.DefaultPackage{})
|
||||||
|
B := pkg.NewPackage("B", strconv.Itoa(50000), []*pkg.DefaultPackage{D}, []*pkg.DefaultPackage{})
|
||||||
|
A := pkg.NewPackage("A", strconv.Itoa(50000), []*pkg.DefaultPackage{B}, []*pkg.DefaultPackage{})
|
||||||
|
|
||||||
|
ass, err := s.Install([]pkg.Package{A})
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
Expect(ass).To(ContainElement(PackageAssert{Package: pkg.NewPackage("A", "50000", []*pkg.DefaultPackage{B}, []*pkg.DefaultPackage{}), Value: true}))
|
||||||
|
//Expect(ass).To(Equal(5))
|
||||||
|
// Expect(len(solution)).To(Equal(6))
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
Ω(runtime.Seconds()).Should(BeNumerically("<", 70), "Install() shouldn't take too long.")
|
||||||
|
}, 1)
|
||||||
|
|
||||||
PMeasure("it should be fast in resolution from a 50000 dataset with upgrade universe", func(b Benchmarker) {
|
PMeasure("it should be fast in resolution from a 50000 dataset with upgrade universe", func(b Benchmarker) {
|
||||||
runtime := b.Time("runtime", func() {
|
runtime := b.Time("runtime", func() {
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
|
31
tests/helpers/package.go
Normal file
31
tests/helpers/package.go
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package helpers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"math/rand"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
pkg "github.com/mudler/luet/pkg/package"
|
||||||
|
)
|
||||||
|
|
||||||
|
const charset = "abcdefghijklmnopqrstuvwxyz" +
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||||
|
|
||||||
|
var seededRand *rand.Rand = rand.New(
|
||||||
|
rand.NewSource(time.Now().UnixNano()))
|
||||||
|
|
||||||
|
func StringWithCharset(length int, charset string) string {
|
||||||
|
b := make([]byte, length)
|
||||||
|
for i := range b {
|
||||||
|
b[i] = charset[seededRand.Intn(len(charset))]
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func String(length int) string {
|
||||||
|
return StringWithCharset(length, charset)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RandomPackage() pkg.Package {
|
||||||
|
return pkg.NewPackage(String(5), strconv.Itoa(rand.Intn(100)), []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
|
}
|
Reference in New Issue
Block a user