Skip to content
Snippets Groups Projects
Select Git revision
  • 9e4f7dc34d470a34272ab3f7eb89a8b18d5f8d3e
  • master default protected
  • v1.23.2
  • v1.23.1
  • v1.23.0
  • v1.22.0
  • v1.21.1
  • v1.21.0
  • v1.20.3
  • v1.20.2
  • v1.20.1
  • v1.20.0
  • v1.19.4
  • v1.19.3
  • v1.19.2
  • v1.19.1
  • v1.19.0
  • v1.18.2
  • v1.18.1
  • v1.18.0
  • v1.17.0
  • v1.16.1
22 results

database_test.go

Blame
  • Volker Schukai's avatar
    4c1153bc
    History
    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)
    }