Skip to content
Snippets Groups Projects
Select Git revision
  • ea2b52f293662a7920d5b72cfbe5dd69b44ab040
  • master default protected
  • 1.31
  • 4.38.6
  • 4.38.5
  • 4.38.4
  • 4.38.3
  • 4.38.2
  • 4.38.1
  • 4.38.0
  • 4.37.2
  • 4.37.1
  • 4.37.0
  • 4.36.0
  • 4.35.0
  • 4.34.1
  • 4.34.0
  • 4.33.1
  • 4.33.0
  • 4.32.2
  • 4.32.1
  • 4.32.0
  • 4.31.0
23 results

resourcemanager.mjs

Blame
  • database-2_test.go 2.59 KiB
    //go:build !runOnTask
    
    // Copyright 2023 schukai GmbH
    // SPDX-License-Identifier: AGPL-3.0
    package jobqueue
    
    import (
    	"github.com/stretchr/testify/assert"
    	"gorm.io/driver/sqlite"
    	"gorm.io/gorm"
    	"runtime"
    	"testing"
    	"time"
    )
    
    func TestWriteToDB2(t *testing.T) {
    	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()
    	})
    
    	gormDB.Logger = gormDB.Logger.LogMode(4)
    	manager := &Manager{database: gormDB}
    
    	// Starte den DBSaver
    	NewJobSyncer(manager)
    
    	db := gormDB
    	mgr := NewManager()
    	mgr.SetDB(gormDB)
    
    	worker := NewLocalWorker(1)
    	err = mgr.AddWorker(worker)
    	assert.Nil(t, err)
    
    	err = mgr.Start()
    	assert.Nil(t, err)
    
    	runner := &CounterRunnable{}
    	job := NewJob[CounterResult]("job1", runner)
    
    	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)
    
    	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)
    
    	scheduler3 := &InstantScheduler{}
    	err = mgr.ScheduleJob(job, scheduler3)
    	assert.Nil(t, err)
    	_ = manager.WaitSync()
    
    	//	time.Sleep(1 * time.Second)
    
    	if mgr.jobSyncer == nil {
    		t.Error("mgr.JobSyncer == nil")
    		return
    	}
    
    	//	time.Sleep(1 * time.Second)
    
    	_ = mgr.jobSyncer.Sync(job)
    	_ = manager.WaitSync()
    
    	runtime.Gosched()
    	//	time.Sleep(1 * time.Second)
    	err = mgr.CancelJobSchedule("job1")
    	assert.Nil(t, err)
    
    	runtime.Gosched()
    	//	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)
    
    	_ = mgr.jobSyncer.Sync(job)
    	_ = manager.WaitSync()
    
    	//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)
    
    	}
    
    	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)
    
    }