Skip to content
Snippets Groups Projects
Verified Commit 7e4fb73e authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

chore: update tests

parent 7b8f45ea
No related branches found
No related tags found
No related merge requests found
......@@ -5,14 +5,20 @@
</component>
<component name="ChangeListManager">
<list default="true" id="9979eb22-471e-4f2f-b624-fd3edb5e8c6e" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/nix/scripts/cleanup.nix" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.back/scripts/hello.nix" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.gitlab-ci.yml" beforeDir="false" afterPath="$PROJECT_DIR$/.gitlab-ci.yml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/flake.nix" beforeDir="false" afterPath="$PROJECT_DIR$/flake.nix" afterDir="false" />
<change beforePath="$PROJECT_DIR$/nix/scripts/check-code.nix" beforeDir="false" afterPath="$PROJECT_DIR$/nix/scripts/check-code.nix" afterDir="false" />
<change beforePath="$PROJECT_DIR$/nix/scripts/deploy.nix" beforeDir="false" afterPath="$PROJECT_DIR$/nix/scripts/deploy.nix" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database-1_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database-1_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database-2_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database-2_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database-3_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database-3_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database-4_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database-4_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database-5_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database-5_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database-7_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database-7_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database-8_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database-8_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database.go" beforeDir="false" afterPath="$PROJECT_DIR$/database.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/database_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/database_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/job-syncer.go" beforeDir="false" afterPath="$PROJECT_DIR$/job-syncer.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/job-syncer_test.go" beforeDir="false" afterPath="$PROJECT_DIR$/job-syncer_test.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/nix/scripts/go-task.nix" beforeDir="false" afterPath="$PROJECT_DIR$/nix/scripts/go-task.nix" afterDir="false" />
<change beforePath="$PROJECT_DIR$/nix/scripts/run-tests.nix" beforeDir="false" afterPath="$PROJECT_DIR$/nix/scripts/run-tests.nix" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
......@@ -50,10 +56,14 @@
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"DefaultGoTemplateProperty": "Go File",
"Go Test.TestDummyRunnable in gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"Go Test.TestResetStats in gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"Go Test.TestScheduleJob in gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"Go Test.TestStructure in gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"Go Test.TestTimeFunctionSame in gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"Go Test.TestWriteToDB1 in gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"Go Test.TestWriteToDB2 in gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"Go Test.go test gitlab.schukai.com/oss/libraries/go/services/job-queues.executor": "Debug",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.go.formatter.settings.were.checked": "true",
"RunOnceActivity.go.migrated.go.modules.settings": "true",
......@@ -80,7 +90,7 @@
<recent name="$PROJECT_DIR$/.back" />
</key>
</component>
<component name="RunManager" selected="Go Test.TestResetStats in gitlab.schukai.com/oss/libraries/go/services/job-queues">
<component name="RunManager" selected="Go Test.TestWriteToDB1 in gitlab.schukai.com/oss/libraries/go/services/job-queues">
<configuration default="true" type="GoApplicationRunConfiguration" factoryName="Go Application">
<module name="job-queues" />
<working_directory value="$PROJECT_DIR$" />
......@@ -90,7 +100,7 @@
<filePath value="$PROJECT_DIR$" />
<method v="2" />
</configuration>
<configuration name="TestResetStats in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<configuration name="TestDummyRunnable in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<module name="job-queues" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
......@@ -98,10 +108,10 @@
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$" />
<framework value="gotest" />
<pattern value="^\QTestResetStats\E$" />
<pattern value="^\QTestDummyRunnable\E$" />
<method v="2" />
</configuration>
<configuration name="TestScheduleJob in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<configuration name="TestResetStats in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<module name="job-queues" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
......@@ -109,10 +119,10 @@
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$" />
<framework value="gotest" />
<pattern value="^\QTestScheduleJob\E$" />
<pattern value="^\QTestResetStats\E$" />
<method v="2" />
</configuration>
<configuration name="TestStructure in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<configuration name="TestWriteToDB1 in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<module name="job-queues" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
......@@ -120,10 +130,10 @@
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$" />
<framework value="gotest" />
<pattern value="^\QTestStructure\E$" />
<pattern value="^\QTestWriteToDB1\E$" />
<method v="2" />
</configuration>
<configuration name="TestTimeFunctionSame in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<configuration name="TestWriteToDB2 in gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<module name="job-queues" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
......@@ -131,7 +141,7 @@
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$" />
<framework value="gotest" />
<pattern value="^\QTestTimeFunctionSame\E$" />
<pattern value="^\QTestWriteToDB2\E$" />
<method v="2" />
</configuration>
<configuration default="true" type="GoTestRunConfiguration" factoryName="Go Test">
......@@ -144,12 +154,23 @@
<framework value="gotest" />
<method v="2" />
</configuration>
<configuration name="go test gitlab.schukai.com/oss/libraries/go/services/job-queues" type="GoTestRunConfiguration" factoryName="Go Test" temporary="true" nameIsGenerated="true">
<module name="job-queues" />
<working_directory value="$PROJECT_DIR$" />
<kind value="PACKAGE" />
<package value="gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<directory value="$PROJECT_DIR$" />
<filePath value="$PROJECT_DIR$" />
<framework value="gotest" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Go Test.TestWriteToDB1 in gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<item itemvalue="Go Test.TestWriteToDB2 in gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<item itemvalue="Go Test.TestDummyRunnable in gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<item itemvalue="Go Test.go test gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<item itemvalue="Go Test.TestResetStats in gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<item itemvalue="Go Test.TestStructure in gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<item itemvalue="Go Test.TestScheduleJob in gitlab.schukai.com/oss/libraries/go/services/job-queues" />
<item itemvalue="Go Test.TestTimeFunctionSame in gitlab.schukai.com/oss/libraries/go/services/job-queues" />
</list>
</recent_temporary>
</component>
......@@ -178,6 +199,21 @@
<line>51</line>
<option name="timeStamp" value="9" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/schedule-time.go</url>
<line>25</line>
<option name="timeStamp" value="18" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/database-2_test.go</url>
<line>25</line>
<option name="timeStamp" value="20" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DlvLineBreakpoint">
<url>file://$PROJECT_DIR$/job-syncer.go</url>
<line>70</line>
<option name="timeStamp" value="21" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
......
......@@ -15,10 +15,17 @@ import (
func TestWriteToDB1(t *testing.T) {
gormDB, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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()
})
gormDB.Logger = gormDB.Logger.LogMode(4)
......@@ -36,18 +43,17 @@ func TestWriteToDB1(t *testing.T) {
}
job.scheduler = scheduler
saver.Sync(job)
saver.Sync(job)
manager.WaitSync()
// check if stats are in database
time.Sleep(1 * time.Second)
var stats JobPersistence
err = gormDB.First(&stats, "id = ?", job.GetID()).Error
assert.Nil(t, err)
assert.Equal(t, job.GetID(), stats.ID)
assert.Equal(t, job.GetID(), stats.ID)
manager.WaitSync()
}
......@@ -9,38 +9,33 @@ import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"runtime"
"sync"
"testing"
"time"
)
func TestWriteToDB2(t *testing.T) {
gormDB, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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()
})
gormDB.Logger = gormDB.Logger.LogMode(4)
manager := &Manager{database: gormDB}
// Starte den DBSaver
NewJobSyncer(manager)
db := gormDB
var wg sync.WaitGroup
wg.Add(1)
defer wg.Done()
mgr := NewManager()
mgr.SetDB(gormDB)
// run sub tests
wg.Add(1)
defer wg.Done()
worker := NewLocalWorker(1)
err = mgr.AddWorker(worker)
assert.Nil(t, err)
......@@ -54,66 +49,73 @@ func TestWriteToDB2(t *testing.T) {
scheduler := &InstantScheduler{}
err = mgr.ScheduleJob(job, scheduler)
assert.Nil(t, err)
_ = manager.WaitSync()
err = mgr.CancelJobSchedule("job1")
assert.Nil(t, err)
_ = manager.WaitSync()
time.Sleep(1 * time.Second)
// time.Sleep(1 * time.Second)
scheduler2 := &InstantScheduler{}
err = mgr.ScheduleJob(job, scheduler2)
assert.Nil(t, err)
_ = manager.WaitSync()
err = mgr.CancelJobSchedule("job1")
assert.Nil(t, err)
time.Sleep(1 * time.Second)
// time.Sleep(1 * time.Second)
scheduler3 := &InstantScheduler{}
err = mgr.ScheduleJob(job, scheduler3)
assert.Nil(t, err)
_ = manager.WaitSync()
time.Sleep(1 * time.Second)
// time.Sleep(1 * time.Second)
if mgr.jobSyncer == nil {
t.Error("mgr.JobSyncer == nil")
return
}
time.Sleep(1 * time.Second)
// time.Sleep(1 * time.Second)
mgr.jobSyncer.Sync(job)
_ = mgr.jobSyncer.Sync(job)
_ = manager.WaitSync()
runtime.Gosched()
time.Sleep(1 * time.Second)
// time.Sleep(1 * time.Second)
err = mgr.CancelJobSchedule("job1")
assert.Nil(t, err)
runtime.Gosched()
time.Sleep(1 * time.Second)
// time.Sleep(1 * time.Second)
_ = manager.WaitSync()
scheduler4 := &InstantScheduler{}
err = mgr.ScheduleJob(job, scheduler4)
assert.Nil(t, err)
_ = manager.WaitSync()
runtime.Gosched()
time.Sleep(1 * time.Second)
//time.Sleep(1 * time.Second)
mgr.jobSyncer.Sync(job)
_ = mgr.jobSyncer.Sync(job)
_ = manager.WaitSync()
time.Sleep(2 * time.Second)
//time.Sleep(2 * time.Second)
err = mgr.CancelJobSchedule("job1")
assert.Nil(t, err)
_ = manager.WaitSync()
tries := 10
for tries > 0 {
var tmpJob JobPersistence
if err := db.First(&tmpJob, "id = ?", "job1").Error; err == nil {
break
}
tries--
time.Sleep(1 * time.Second)
......@@ -121,11 +123,10 @@ func TestWriteToDB2(t *testing.T) {
assert.True(t, tries > 0)
time.Sleep(1 * time.Second)
err = LoadJobsAndScheduleFromDatabase(db, mgr)
assert.Nil(t, err)
_ = manager.WaitSync()
time.Sleep(1 * time.Second)
mgr.jobSyncer.Sync(job)
}
......@@ -14,11 +14,19 @@ import (
func TestWriteToDB3(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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
db.Logger = db.Logger.LogMode(4)
manager := NewManager()
......
......@@ -12,11 +12,19 @@ import (
func TestWriteToDB4(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
//db, err := gorm.Open(sqlite.Open("file:/home/vs/workspaces/alvine/cloud/framework/dummy.sqlite"), &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.Fatalf("a 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)
......
......@@ -11,10 +11,19 @@ import (
func TestWriteToDB5(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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)
......
......@@ -23,8 +23,19 @@ func TestWriteToDB6(t *testing.T) {
//dsn := "root:my-secret-pw@tcp(localhost:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
//db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
assert.NoError(t, err)
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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)
......
......@@ -11,8 +11,19 @@ import (
)
func TestCreateOrUpdateJob(t *testing.T) {
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
assert.NoError(t, err)
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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
// Migrate the schema
assert.NoError(t, db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{}))
......@@ -20,7 +31,7 @@ func TestCreateOrUpdateJob(t *testing.T) {
runner := &CounterRunnable{}
job := NewJob[CounterResult]("job1", runner)
assert.NoError(t, saveJob(job, db))
assert.NoError(t, saveJob(job.GetPersistence(), db))
var jobPersistence JobPersistence
assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
......@@ -29,7 +40,7 @@ func TestCreateOrUpdateJob(t *testing.T) {
assert.Equal(t, "", jobPersistence.Description)
assert.Equal(t, Priority(1), jobPersistence.Priority)
job.description = "Updated description"
assert.NoError(t, saveJob(job, db))
assert.NoError(t, saveJob(job.GetPersistence(), db))
assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
assert.Equal(t, "Updated description", jobPersistence.Description)
......
......@@ -7,31 +7,39 @@ import (
"github.com/stretchr/testify/assert"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"log"
"os"
"testing"
"time"
)
func TestUpdateJob(t *testing.T) {
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
assert.NoError(t, err)
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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
assert.NoError(t, db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{}))
runner := &CounterRunnable{}
job := NewJob[CounterResult]("job1", runner)
assert.NoError(t, saveJob(job, db))
assert.NoError(t, saveJob(job.GetPersistence(), db))
job.SetPriority(PriorityHigh)
assert.NoError(t, updateJob(job, db))
assert.NoError(t, updateJob(job.GetPersistence(), db))
var jobPersistence JobPersistence
assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
assert.Equal(t, PriorityDefault, jobPersistence.Priority) // PriorityDefault because the update should not update the priority
assert.NoError(t, saveJob(job, db))
assert.NoError(t, saveJob(job.GetPersistence(), db))
assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
assert.Equal(t, PriorityHigh, jobPersistence.Priority)
......@@ -43,19 +51,19 @@ func TestUpdateJob(t *testing.T) {
func TestCheckAndSaveOrUpdate(t *testing.T) {
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second,
LogLevel: logger.Info,
Colorful: true,
},
)
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{
Logger: newLogger,
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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()
})
assert.NoError(t, err)
db := gormDB
assert.NoError(t, db.AutoMigrate(&JobPersistence{}, &JobLog{}, &JobStats{}))
......@@ -66,13 +74,13 @@ func TestCheckAndSaveOrUpdate(t *testing.T) {
var jobPersistence JobPersistence
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job))
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
jobPersistence = JobPersistence{}
assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
assert.Equal(t, PriorityDefault, jobPersistence.Priority)
job.SetPriority(PriorityHigh)
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job))
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
jobPersistence = JobPersistence{}
assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
assert.Equal(t, PriorityDefault, jobPersistence.Priority) // second update should not update the priority, because update only update stats and logs
......@@ -94,10 +102,10 @@ func TestCheckAndSaveOrUpdate(t *testing.T) {
JobID: job.GetID(),
}}
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job))
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
job.stats.RunCount = 9
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job))
assert.NoError(t, syncer.CheckAndSaveOrUpdate(job.GetPersistence()))
jobPersistence = JobPersistence{}
assert.NoError(t, db.First(&jobPersistence, "id = ?", job.GetID()).Error)
......
......@@ -5,12 +5,13 @@ package jobqueue
import (
"errors"
"fmt"
"gorm.io/gorm"
"strings"
"time"
)
func (s *JobSyncer) CheckAndSaveOrUpdate(job GenericJob) error {
func (s *JobSyncer) CheckAndSaveOrUpdate(job JobPersistence) error {
s.mu.Lock()
defer s.mu.Unlock()
......@@ -19,7 +20,7 @@ func (s *JobSyncer) CheckAndSaveOrUpdate(job GenericJob) error {
}
db := s.manager.database
fmt.Println("Database: ", db)
var existing JobPersistence
result := db.Where("id = ?", job.GetID()).First(&existing)
......@@ -87,7 +88,7 @@ func (s *JobSyncer) ResetStats(job GenericJob) error {
if s.manager == nil || s.manager.database == nil {
return ErrNoDatabaseConnection
}
return updateJob(job, s.manager.database)
return updateJob(job.GetPersistence(), s.manager.database)
}
......@@ -97,21 +98,19 @@ func (s *JobSyncer) UpdateJob(job GenericJob) error {
if s.manager == nil || s.manager.database == nil {
return ErrNoDatabaseConnection
}
return updateJob(job, s.manager.database)
return updateJob(job.GetPersistence(), s.manager.database)
}
func updateJob(job GenericJob, db *gorm.DB) error {
func updateJob(job JobPersistence, db *gorm.DB) error {
if db == nil {
return ErrNoDatabaseConnection
}
permJob := job.GetPersistence()
maxRetries := 3
var attempt int
for attempt = 0; attempt < maxRetries; attempt++ {
err := update(&permJob, db)
err := update(&job, db)
if err != nil {
if strings.Contains(err.Error(), "lock") {
time.Sleep(time.Millisecond * 100)
......@@ -169,7 +168,7 @@ func (s *JobSyncer) SaveJob(job GenericJob) error {
if s.manager == nil || s.manager.database == nil {
return ErrNoDatabaseConnection
}
return saveJob(job, s.manager.database)
return saveJob(job.GetPersistence(), s.manager.database)
}
func save(job *JobPersistence, db *gorm.DB) error {
......@@ -216,18 +215,16 @@ func save(job *JobPersistence, db *gorm.DB) error {
})
}
func saveJob(job GenericJob, db *gorm.DB) error {
func saveJob(job JobPersistence, db *gorm.DB) error {
if db == nil {
return ErrNoDatabaseConnection
}
permJob := job.GetPersistence()
maxRetries := 3
var attempt int
for attempt = 0; attempt < maxRetries; attempt++ {
err := save(&permJob, db)
err := save(&job, db)
if err != nil {
if strings.Contains(err.Error(), "lock") {
time.Sleep(time.Millisecond * 100)
......
......@@ -12,8 +12,19 @@ import (
)
func TestDeleteJob(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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
db.Logger = db.Logger.LogMode(4)
assert.Nil(t, err)
......@@ -27,7 +38,7 @@ func TestDeleteJob(t *testing.T) {
// Erstelle einen Job zum Löschen
runner := &CounterRunnable{}
job := NewJob[CounterResult]("testJobID", runner)
err = saveJob(job, db)
err = saveJob(job.GetPersistence(), db)
assert.Nil(t, err)
var count int64
......@@ -44,8 +55,19 @@ func TestDeleteJob(t *testing.T) {
}
func TestResetLogs(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
assert.Nil(t, err)
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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
db.Logger = db.Logger.LogMode(4)
......@@ -60,7 +82,7 @@ func TestResetLogs(t *testing.T) {
// Erstelle einen Job und füge einige Logs hinzu
runner := &CounterRunnable{}
job := NewJob[CounterResult]("testJobID", runner)
err = saveJob(job, db)
err = saveJob(job.GetPersistence(), db)
assert.Nil(t, err)
// Füge Logs zum Job hinzu
......@@ -85,8 +107,19 @@ func TestResetLogs(t *testing.T) {
}
func TestResetStats(t *testing.T) {
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
assert.Nil(t, err)
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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
db.Logger = db.Logger.LogMode(4)
......@@ -101,7 +134,7 @@ func TestResetStats(t *testing.T) {
// Erstelle einen Job und setze einige Statistiken
runner := &CounterRunnable{}
job := NewJob[CounterResult]("testJobID", runner)
err = saveJob(job, db)
err = saveJob(job.GetPersistence(), db)
assert.Nil(t, err)
// Aktualisiere die Job-Statistiken
......
......@@ -60,11 +60,13 @@ func (js *JobSyncer) Sync(job GenericJob) error {
js.mu.Lock()
defer js.mu.Unlock()
persistenceJob := job.GetPersistence()
js.running.Add(1)
go func() {
defer js.running.Done()
err := js.CheckAndSaveOrUpdate(job)
err := js.CheckAndSaveOrUpdate(persistenceJob)
if err != nil {
Error("Error while creating or updating the job", err)
}
......
......@@ -15,10 +15,17 @@ import (
func TestSaveJobWithSQLite(t *testing.T) {
gormDB, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{})
gormDB, err := gorm.Open(sqlite.Open("file:unique_id?mode=memory&cache=shared"), &gorm.Config{})
if err != nil {
t.Fatalf("a 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()
})
manager := &Manager{database: gormDB}
//saver := NewJobSyncer(manager)
......
......@@ -13,6 +13,7 @@
- rt
env:
TEST_BY_TASK: true
USER_WORKING_DIR: "{{.USER_WORKING_DIR}}"
cmds:
- run-tests
silent: true
......
......@@ -11,8 +11,7 @@ in
echo_header "Running tests"
selection=$(${pkgs.gum}/bin/gum choose "run specific test" "run all tests" "Cancel")
selection=$(${pkgs.gum}/bin/gum choose "run all tests" "run specific test" "Cancel")
if [[ "$selection" == "Cancel" ]]; then
echo_ok "Exiting."
......@@ -21,6 +20,7 @@ in
download_test_images
setup_go_env
cd_working_dir
if [[ "$selection" == "run all tests" ]]; then
echo_ok "Running all tests"
......@@ -53,7 +53,6 @@ in
exit 0
fi
if ! ${pkgs.go}/bin/go test -run "$(echo $selected_tests | tr '\n' "")"
then
echo_fail "ERROR: Tests failed, check your Go!"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment