Select Git revision
database_test.go

Volker Schukai authored
database_test.go 3.66 KiB
package jobqueue
import (
"github.com/stretchr/testify/assert"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"testing"
"time"
)
func TestDeleteJob(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
db.Logger = db.Logger.LogMode(4)
assert.Nil(t, err)
err = db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{})
assert.Nil(t, err)
manager := NewManager()
manager.SetDB(db)
jobSyncer := NewJobSyncer(manager)
// Erstelle einen Job zum Löschen
runner := &CounterRunnable{}
job := NewJob[CounterResult]("testJobID", runner)
err = createOrUpdateJob(job, db)
assert.Nil(t, err)
var count int64
db.Model(&JobPersistence{}).Where("id = ?", "testJobID").Count(&count)
assert.Equal(t, int64(1), count)
// Lösche den Job
err = jobSyncer.DeleteJob(job)
assert.Nil(t, err)
// Überprüfe, ob der Job gelöscht wurde
db.Model(&JobPersistence{}).Where("id = ?", "testJobID").Count(&count)
assert.Equal(t, int64(0), count)
}
func TestResetLogs(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
assert.Nil(t, err)
db.Logger = db.Logger.LogMode(4)
// Automatische Migration für benötigte Strukturen
err = db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{})
assert.Nil(t, err)
manager := NewManager()
manager.SetDB(db)
jobSyncer := NewJobSyncer(manager)
// Erstelle einen Job und füge einige Logs hinzu
runner := &CounterRunnable{}
job := NewJob[CounterResult]("testJobID", runner)
err = createOrUpdateJob(job, db)
assert.Nil(t, err)
// Füge Logs zum Job hinzu
for i := 0; i < 5; i++ {
log := JobLog{JobID: job.GetID(), Result: "Test Message"}
err = db.Create(&log).Error
assert.Nil(t, err)
}
var logCount int64
db.Model(&JobLog{}).Where("job_id = ?", job.GetID()).Count(&logCount)
assert.Equal(t, int64(5), logCount)
// Setze die Logs zurück
err = jobSyncer.ResetLogs(job)
assert.Nil(t, err)
// Überprüfe, ob die Logs gelöscht wurden
db.Model(&JobLog{}).Where("job_id = ?", job.GetID()).Count(&logCount)
assert.Equal(t, int64(0), logCount)
}
func TestResetStats(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
assert.Nil(t, err)
db.Logger = db.Logger.LogMode(4)
// Automatische Migration für benötigte Strukturen
err = db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{})
assert.Nil(t, err)
manager := NewManager()
manager.SetDB(db)
jobSyncer := NewJobSyncer(manager)
// Erstelle einen Job und setze einige Statistiken
runner := &CounterRunnable{}
job := NewJob[CounterResult]("testJobID", runner)
err = createOrUpdateJob(job, db)
assert.Nil(t, err)
// Aktualisiere die Job-Statistiken
jobStats := &JobStats{
JobID: job.GetID(),
RunCount: 5,
SuccessCount: 3,
ErrorCount: 2,
TimeMetrics: TimeMetrics{
AvgRunTime: 10 * time.Second,
MaxRunTime: 15 * time.Second,
MinRunTime: 5 * time.Second,
TotalRunTime: 50 * time.Second,
},
}
err = db.Save(jobStats).Error
assert.Nil(t, err)
// Setze die Statistiken zurück
err = jobSyncer.ResetStats(job)
assert.Nil(t, err)
// Überprüfe, ob die Statistiken zurückgesetzt wurden
var resetStats JobStats
err = db.First(&resetStats, "job_id = ?", job.GetID()).Error
assert.Nil(t, err)
assert.Equal(t, int(0), resetStats.RunCount)
assert.Equal(t, int(0), resetStats.SuccessCount)
assert.Equal(t, int(0), resetStats.ErrorCount)
assert.Equal(t, time.Duration(0), resetStats.TimeMetrics.AvgRunTime)
assert.Equal(t, time.Duration(0), resetStats.TimeMetrics.MaxRunTime)
assert.Equal(t, time.Duration(0), resetStats.TimeMetrics.MinRunTime)
assert.Equal(t, time.Duration(0), resetStats.TimeMetrics.TotalRunTime)
}