Something went wrong on our end
Select Git revision
-
Volker Schukai authoredVolker Schukai authored
database-6_test.go 2.02 KiB
//go:build !runOnTask
// Copyright 2023 schukai GmbH
// SPDX-License-Identifier: AGPL-3.0
package jobqueue
import (
"fmt"
"github.com/stretchr/testify/assert"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"testing"
"time"
)
func TestWriteToDB6(t *testing.T) {
// it is necessary to have a running mysql server
// docker rm -f mysql-test && \
// docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=testdb -p 3306:3306 -d mysql:latest && \
// docker logs -f mysql-test
//dsn := "root:my-secret-pw@tcp(localhost:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
//db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("an error occurred while opening the database: %v", err)
}
t.Cleanup(func() {
sqlDB, err := gormDB.DB()
if err != nil {
t.Fatalf("failed to get generic database object from GORM DB: %v", err)
}
_ = sqlDB.Close()
})
db := gormDB
manager := NewManager()
manager.SetDB(db)
err = manager.AddWorker(NewLocalWorker(1))
assert.Nil(t, err)
err = manager.Start()
assert.Nil(t, err)
mgr := manager
numJobs := 1000
jobIDs := make([]JobID, numJobs)
for i := 0; i < numJobs; i++ {
jobID := JobID(fmt.Sprintf("burstJobA%d", i))
jobIDs[i] = jobID
runner := &CounterRunnable{}
job := NewJob[CounterResult](jobID, runner)
scheduler := &InstantScheduler{}
err = mgr.ScheduleJob(job, scheduler)
assert.Nil(t, err)
mgr.mu.Lock()
mgr.jobSyncer.Sync(job)
mgr.mu.Unlock()
time.Sleep(10 * time.Millisecond)
}
manager.WaitSync()
time.Sleep(2 * time.Second)
for _, jobID := range jobIDs {
var tmpJob JobPersistence
err = db.First(&tmpJob, "id = ?", jobID).Error
if err != nil {
t.Errorf("Job id %s not found in database: %v", jobID, err)
}
}
// check if all jobs are in the database
var jobCount int64
err = db.Model(&JobPersistence{}).Count(&jobCount).Error
assert.Nil(t, err)
assert.Equal(t, int64(numJobs), jobCount)
}