mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2024-11-14 02:37:25 +01:00
165 lines
3.5 KiB
Go
165 lines
3.5 KiB
Go
// Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg.
|
|
// All rights reserved.
|
|
// Use of this source code is governed by a MIT-style
|
|
// license that can be found in the LICENSE file.
|
|
package repository
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/ClusterCockpit/cc-backend/internal/graph/model"
|
|
"github.com/ClusterCockpit/cc-backend/pkg/log"
|
|
"github.com/ClusterCockpit/cc-backend/pkg/schema"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func TestPragma(t *testing.T) {
|
|
t.Run("sets up a new DB", func(t *testing.T) {
|
|
db := setup(t)
|
|
|
|
for _, pragma := range []string{"synchronous", "journal_mode", "busy_timeout", "auto_vacuum", "foreign_keys"} {
|
|
t.Log("PRAGMA", pragma, getPragma(db, pragma))
|
|
}
|
|
})
|
|
}
|
|
|
|
func getPragma(db *JobRepository, name string) string {
|
|
var s string
|
|
if err := db.DB.QueryRow(`PRAGMA ` + name).Scan(&s); err != nil {
|
|
panic(err)
|
|
}
|
|
return s
|
|
}
|
|
|
|
func BenchmarkSelect1(b *testing.B) {
|
|
db := setup(b)
|
|
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
_, err := db.DB.Exec(`select 1`)
|
|
noErr(b, err)
|
|
}
|
|
})
|
|
}
|
|
|
|
func BenchmarkDB_FindJobById(b *testing.B) {
|
|
var jobId int64 = 1677322
|
|
|
|
b.Run("FindJobById", func(b *testing.B) {
|
|
db := setup(b)
|
|
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
_, err := db.FindById(jobId)
|
|
noErr(b, err)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
func BenchmarkDB_FindJob(b *testing.B) {
|
|
var jobId int64 = 107266
|
|
var startTime int64 = 1657557241
|
|
var cluster = "fritz"
|
|
|
|
b.Run("FindJob", func(b *testing.B) {
|
|
db := setup(b)
|
|
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
_, err := db.Find(&jobId, &cluster, &startTime)
|
|
noErr(b, err)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
func BenchmarkDB_CountJobs(b *testing.B) {
|
|
filter := &model.JobFilter{}
|
|
filter.State = append(filter.State, "running")
|
|
cluster := "fritz"
|
|
filter.Cluster = &model.StringInput{Eq: &cluster}
|
|
user := "mppi133h"
|
|
filter.User = &model.StringInput{Eq: &user}
|
|
|
|
b.Run("CountJobs", func(b *testing.B) {
|
|
db := setup(b)
|
|
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
_, err := db.CountJobs(getContext(b), []*model.JobFilter{filter})
|
|
noErr(b, err)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
func BenchmarkDB_QueryJobs(b *testing.B) {
|
|
filter := &model.JobFilter{}
|
|
filter.State = append(filter.State, "running")
|
|
cluster := "fritz"
|
|
filter.Cluster = &model.StringInput{Eq: &cluster}
|
|
user := "mppi133h"
|
|
filter.User = &model.StringInput{Eq: &user}
|
|
page := &model.PageRequest{ItemsPerPage: 50, Page: 1}
|
|
order := &model.OrderByInput{Field: "startTime", Order: model.SortDirectionEnumDesc}
|
|
|
|
b.Run("QueryJobs", func(b *testing.B) {
|
|
db := setup(b)
|
|
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
_, err := db.QueryJobs(getContext(b), []*model.JobFilter{filter}, page, order)
|
|
noErr(b, err)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
func getContext(tb testing.TB) context.Context {
|
|
tb.Helper()
|
|
|
|
var roles []string
|
|
roles = append(roles, schema.GetRoleString(schema.RoleAdmin))
|
|
projects := make([]string, 0)
|
|
|
|
user := &schema.User{
|
|
Username: "demo",
|
|
Name: "The man",
|
|
Roles: roles,
|
|
Projects: projects,
|
|
AuthSource: schema.AuthViaLDAP,
|
|
}
|
|
ctx := context.Background()
|
|
return context.WithValue(ctx, ContextUserKey, user)
|
|
}
|
|
|
|
func setup(tb testing.TB) *JobRepository {
|
|
tb.Helper()
|
|
log.Init("warn", true)
|
|
dbfile := "testdata/job.db"
|
|
err := MigrateDB("sqlite3", dbfile)
|
|
noErr(tb, err)
|
|
Connect("sqlite3", dbfile)
|
|
return GetJobRepository()
|
|
}
|
|
|
|
func noErr(tb testing.TB, err error) {
|
|
tb.Helper()
|
|
|
|
if err != nil {
|
|
tb.Fatal("Error is not nil:", err)
|
|
}
|
|
}
|