github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/model/job/broker_test.go (about) 1 package job_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/cozy/cozy-stack/model/job" 8 "github.com/cozy/cozy-stack/pkg/config/config" 9 "github.com/cozy/cozy-stack/tests/testutils" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestBrokerImplems(t *testing.T) { 14 assert.Implements(t, (*job.Broker)(nil), new(job.BrokerMock)) 15 } 16 17 func TestBroker(t *testing.T) { 18 if testing.Short() { 19 t.Skip("an instance is required for this test: test skipped due to the use of --short flag") 20 } 21 22 config.UseTestFile(t) 23 setup := testutils.NewSetup(t, t.Name()) 24 testInstance := setup.GetTestInstance() 25 26 t.Run("GetJobsBeforeDate", func(t *testing.T) { 27 // Create jobs 28 utc, err := time.LoadLocation("") 29 assert.NoError(t, err) 30 31 date1 := time.Date(2000, time.January, 1, 1, 1, 1, 1, utc) 32 job1 := &job.Job{ 33 Domain: testInstance.Domain, 34 Prefix: testInstance.DBPrefix(), 35 WorkerType: "thumbnail", 36 TriggerID: "foobar", 37 Manual: false, 38 State: job.Queued, 39 QueuedAt: date1, 40 } 41 err = job1.Create() 42 assert.NoError(t, err) 43 44 date2 := time.Now() 45 job2 := &job.Job{ 46 Domain: testInstance.Domain, 47 Prefix: testInstance.DBPrefix(), 48 WorkerType: "thumbnail", 49 TriggerID: "foobar", 50 Manual: false, 51 State: job.Queued, 52 QueuedAt: date2, 53 } 54 err = job2.Create() 55 assert.NoError(t, err) 56 57 date3 := time.Date(2100, time.January, 1, 1, 1, 1, 1, utc) 58 job3 := &job.Job{ 59 Domain: testInstance.Domain, 60 Prefix: testInstance.DBPrefix(), 61 WorkerType: "thumbnail", 62 TriggerID: "foobar", 63 Manual: false, 64 State: job.Queued, 65 QueuedAt: date3, 66 } 67 err = job3.Create() 68 assert.NoError(t, err) 69 70 allJobs, err := job.GetAllJobs(testInstance) 71 assert.NoError(t, err) 72 assert.Equal(t, 3, len(allJobs)) 73 74 jobs := job.FilterJobsBeforeDate(allJobs, time.Now()) 75 76 // We should have only 2 jobs : 77 // The first has been queued in the past: OK 78 // The second has just been queued: OK 79 // The third is queued in the future: NOK 80 assert.Equal(t, 2, len(jobs)) 81 }) 82 83 t.Run("GetLastsJobs", func(t *testing.T) { 84 allJobs, err := job.GetAllJobs(testInstance) 85 assert.NoError(t, err) 86 j, err := job.GetLastsJobs(allJobs, "thumbnail") 87 assert.NoError(t, err) 88 assert.Equal(t, 3, len(j)) 89 90 // Add a job 91 myJob := &job.Job{ 92 Domain: testInstance.Domain, 93 Prefix: testInstance.DBPrefix(), 94 WorkerType: "thumbnail", 95 TriggerID: "foobar", 96 Manual: false, 97 State: job.Running, 98 QueuedAt: time.Now(), 99 } 100 err = myJob.Create() 101 assert.NoError(t, err) 102 allJobs, err = job.GetAllJobs(testInstance) 103 assert.NoError(t, err) 104 j, err = job.GetLastsJobs(allJobs, "thumbnail") 105 assert.NoError(t, err) 106 assert.Equal(t, 4, len(j)) 107 108 // Add a job in another queue 109 myJob = &job.Job{ 110 Domain: testInstance.Domain, 111 Prefix: testInstance.DBPrefix(), 112 WorkerType: "konnector", 113 TriggerID: "foobar", 114 Manual: false, 115 State: job.Errored, 116 QueuedAt: time.Now(), 117 } 118 err = myJob.Create() 119 assert.NoError(t, err) 120 allJobs, err = job.GetAllJobs(testInstance) 121 assert.NoError(t, err) 122 j, err = job.GetLastsJobs(allJobs, "thumbnail") 123 assert.NoError(t, err) 124 assert.Equal(t, 4, len(j)) 125 allJobs, err = job.GetAllJobs(testInstance) 126 assert.NoError(t, err) 127 j, err = job.GetLastsJobs(allJobs, "konnector") 128 assert.NoError(t, err) 129 assert.Equal(t, 1, len(j)) 130 131 // No jobs 132 allJobs, err = job.GetAllJobs(testInstance) 133 assert.NoError(t, err) 134 j, err = job.GetLastsJobs(allJobs, "foobar") 135 assert.NoError(t, err) 136 assert.Equal(t, 0, len(j)) 137 138 // Add a job in the future and assert it is the first one returned 139 utc, err := time.LoadLocation("") 140 assert.NoError(t, err) 141 futureDate := time.Date(2200, time.January, 1, 1, 1, 1, 1, utc) 142 myJob = &job.Job{ 143 Domain: testInstance.Domain, 144 Prefix: testInstance.DBPrefix(), 145 WorkerType: "thumbnail", 146 TriggerID: "foobar", 147 Manual: false, 148 State: job.Errored, 149 QueuedAt: futureDate, 150 } 151 err = myJob.Create() 152 assert.NoError(t, err) 153 154 allJobs, err = job.GetAllJobs(testInstance) 155 assert.NoError(t, err) 156 j, err = job.GetLastsJobs(allJobs, "thumbnail") 157 assert.NoError(t, err) 158 159 // One running, one errored, three queued 160 assert.Equal(t, 5, len(j)) 161 assert.Equal(t, futureDate.String(), j[len(j)-1].QueuedAt.String()) 162 assert.Equal(t, job.Errored, j[len(j)-1].State) 163 }) 164 }