From f284e452d10fd2835c6b70af115f32acc40d011e Mon Sep 17 00:00:00 2001 From: Paul Pan Date: Thu, 15 Feb 2024 12:54:29 +0800 Subject: [PATCH] feat: add benchmark for ContainerRun{Pool} --- internal/service/runner/container_test.go | 42 +++++++++++++++++++++++ internal/service/runner/service_test.go | 35 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 internal/service/runner/container_test.go create mode 100644 internal/service/runner/service_test.go diff --git a/internal/service/runner/container_test.go b/internal/service/runner/container_test.go new file mode 100644 index 0000000..7ba5ceb --- /dev/null +++ b/internal/service/runner/container_test.go @@ -0,0 +1,42 @@ +package runner + +import ( + "testing" +) + +func BenchmarkContainerRun(b *testing.B) { + srv := GetService(false).(*service) + + args := &RunArgs{ + Program: ProgramArgs{Args: []string{"sh", "-c", "echo hello world"}}, + Runtime: RuntimeArgs{Image: ContainerImageRun}, + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := srv.ContainerRun(args) + if err != nil { + b.Error(err) + } + } +} + +func BenchmarkContainerRunPool(b *testing.B) { + srv := GetService(false).(*service) + + args := &RunArgs{ + Program: ProgramArgs{Args: []string{"sh", "-c", "echo hello world"}}, + Runtime: RuntimeArgs{Image: ContainerImageRun}, + } + + b.ResetTimer() + var ids []uint64 + for i := 0; i < b.N; i++ { + id := srv.ContainerRunPool(args) + ids = append(ids, id) + } + + for _, id := range ids { + srv.pool.WaitForTask(id) + } +} diff --git a/internal/service/runner/service_test.go b/internal/service/runner/service_test.go new file mode 100644 index 0000000..8341ebb --- /dev/null +++ b/internal/service/runner/service_test.go @@ -0,0 +1,35 @@ +package runner + +import ( + "git.0x7f.app/WOJ/woj-server/internal/misc/config" + "git.0x7f.app/WOJ/woj-server/internal/misc/log" + "git.0x7f.app/WOJ/woj-server/internal/model" + "github.com/samber/do" +) + +type FakeConfigService struct { + conf model.Config +} + +func (s *FakeConfigService) GetConfig() *model.Config { + return &s.conf +} + +func (s *FakeConfigService) HealthCheck() error { + return nil +} + +func GetService(dev bool) Service { + injector := do.New() + + cfg := &FakeConfigService{conf: model.Config{ + Runner: model.ConfigRunner{Address: "/run/containerd/containerd.sock"}, + Development: dev, + }} + + do.ProvideValue[config.Service](injector, cfg) + do.Provide(injector, log.NewService) + do.Provide(injector, NewService) + + return do.MustInvoke[Service](injector) +}