summaryrefslogtreecommitdiff
path: root/test/e2e
diff options
context:
space:
mode:
authorValentin Rothberg <vrothberg@redhat.com>2022-04-26 13:31:10 +0200
committerValentin Rothberg <vrothberg@redhat.com>2022-04-26 14:25:17 +0200
commitfacc009ca070085bb1c32f146f77c2a0a62090b0 (patch)
tree6ebb7b822f1c8b9f12a6ec2440ed7af18e76afd7 /test/e2e
parent913a3a813c168b47f982bb6851a0968858946f85 (diff)
downloadpodman-facc009ca070085bb1c32f146f77c2a0a62090b0.tar.gz
podman-facc009ca070085bb1c32f146f77c2a0a62090b0.tar.bz2
podman-facc009ca070085bb1c32f146f77c2a0a62090b0.zip
benchmarks: add more image benchmarks
Add more benchmarks for the most common and performance-critical image commands. Benchmarks for `podman build` should go into a separate section. Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
Diffstat (limited to 'test/e2e')
-rw-r--r--test/e2e/benchmarks_test.go79
1 files changed, 74 insertions, 5 deletions
diff --git a/test/e2e/benchmarks_test.go b/test/e2e/benchmarks_test.go
index c631b06ee..9653cee3b 100644
--- a/test/e2e/benchmarks_test.go
+++ b/test/e2e/benchmarks_test.go
@@ -11,10 +11,12 @@ import (
"strconv"
"strings"
+ podmanRegistry "github.com/containers/podman/v4/hack/podman-registry-go"
. "github.com/containers/podman/v4/test/utils"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
. "github.com/onsi/gomega/gexec"
+ "github.com/sirupsen/logrus"
)
var (
@@ -30,21 +32,23 @@ type benchmark struct {
name string
// The function to execute.
main func()
- // Function is run before `main`.
- init func()
+ // Allows for extending a benchmark.
+ options newBenchmarkOptions
}
// Allows for customizing the benchnmark in an easy to extend way.
type newBenchmarkOptions struct {
// Sets the benchmark's init function.
init func()
+ // Run a local registry for this benchmark.
+ needsRegistry bool
}
// Queue a new benchmark.
func newBenchmark(name string, main func(), options *newBenchmarkOptions) {
bm := benchmark{name: name, main: main}
if options != nil {
- bm.init = options.init
+ bm.options = *options
}
allBenchmarks = append(allBenchmarks, bm)
}
@@ -109,8 +113,23 @@ var _ = Describe("Podman Benchmark Suite", func() {
for i := range allBenchmarks {
setup()
bm := allBenchmarks[i]
- if bm.init != nil {
- bm.init()
+
+ // Start a local registry if requested.
+ var registry *podmanRegistry.Registry
+ if bm.options.needsRegistry {
+ reg, err := podmanRegistry.Start()
+ if err != nil {
+ logrus.Errorf("Error starting registry: %v", err)
+ os.Exit(1)
+ }
+ registry = reg
+ os.Setenv(podmanRegistry.UserKey, reg.User)
+ os.Setenv(podmanRegistry.PassKey, reg.Password)
+ os.Setenv(podmanRegistry.PortKey, reg.Port)
+ }
+
+ if bm.options.init != nil {
+ bm.options.init()
}
// Set the time dir only for the main() function.
@@ -120,6 +139,18 @@ var _ = Describe("Podman Benchmark Suite", func() {
mem := totalMemoryInKb()
b.RecordValueWithPrecision("[MEM] "+bm.name, float64(mem), "KB", 1)
+
+ // Stop the local registry.
+ if bm.options.needsRegistry {
+ os.Unsetenv(podmanRegistry.UserKey)
+ os.Unsetenv(podmanRegistry.PassKey)
+ os.Unsetenv(podmanRegistry.PortKey)
+ if err := registry.Stop(); err != nil {
+ logrus.Errorf("Error stopping registry: %v", err)
+ os.Exit(1)
+ }
+ }
+
cleanup()
}
}, numBenchmarkSamples)
@@ -142,6 +173,44 @@ var _ = Describe("Podman Benchmark Suite", func() {
Expect(session).Should(Exit(0))
}, nil)
+ newBenchmark("podman load [docker]", func() {
+ session := podmanTest.Podman([]string{"load", "-i", "./testdata/docker-two-images.tar.xz"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ }, nil)
+
+ newBenchmark("podman load [oci]", func() {
+ session := podmanTest.Podman([]string{"load", "-i", "./testdata/oci-registry-name.tar.gz"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ }, nil)
+
+ newBenchmark("podman save", func() {
+ session := podmanTest.Podman([]string{"save", ALPINE, "-o", path.Join(podmanTest.TempDir, "alpine.tar")})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ }, nil)
+
+ newBenchmark("podman image inspect", func() {
+ session := podmanTest.Podman([]string{"inspect", ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ }, nil)
+
+ newBenchmark("podman login + logout", func() {
+ user := os.Getenv(podmanRegistry.UserKey)
+ pass := os.Getenv(podmanRegistry.PassKey)
+ port := os.Getenv(podmanRegistry.PortKey)
+
+ session := podmanTest.Podman([]string{"login", "-u", user, "-p", pass, "--tls-verify=false", "localhost:" + port})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+
+ session = podmanTest.Podman([]string{"logout", "localhost:" + port})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ }, &newBenchmarkOptions{needsRegistry: true})
+
// --------------------------------------------------------------------------
// CONTAINER BENCHMARKS
// --------------------------------------------------------------------------