package task_queue import ( "fmt" "github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper" "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util" "github.com/allanpk716/ChineseSubFinder/internal/pkg/settings" "github.com/allanpk716/ChineseSubFinder/internal/types/common" "github.com/allanpk716/ChineseSubFinder/internal/types/task_queue" "testing" ) func TestTaskQueue_AddAndGetAndDel(t *testing.T) { defer func() { DelDb() }() DelDb() taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester()) for i := taskPriorityCount; i >= 0; i-- { bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, my_util.RandStringBytesMaskImprSrcSB(10), i)) if err != nil { t.Fatal("TestTaskQueue.Add", err) } if bok == false { t.Fatal("TestTaskQueue.Add == false") } } bok, waitingJobs, err := taskQueue.GetJobsByStatus(task_queue.Waiting) if err != nil { t.Fatal("TestTaskQueue.Get", err) } if bok == false { t.Fatal("TestTaskQueue.Get == false") } if len(waitingJobs) != taskPriorityCount+1 { t.Fatal("len(waitingJobs) != taskPriorityCount") } for i := 0; i <= taskPriorityCount; i++ { if waitingJobs[i].TaskPriority != i { t.Fatalf("TestTaskQueue.TaskPriority pop error, want = %d, got = %d", i, waitingJobs[i].TaskPriority) } } for _, waitingJob := range waitingJobs { bok, err = taskQueue.Del(waitingJob.Id) if err != nil { t.Fatal("TestTaskQueue.Del", err) } if bok == false { t.Fatal("TestTaskQueue.Del == false") } } if taskQueue.Size() != 0 { t.Fatal("taskQueue.Size() != 0") } } func TestTaskQueue_AddAndClear(t *testing.T) { defer func() { DelDb() }() DelDb() taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester()) for i := taskPriorityCount; i >= 0; i-- { bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, my_util.RandStringBytesMaskImprSrcSB(10), i)) if err != nil { t.Fatal("TestTaskQueue.Add", err) } if bok == false { t.Fatal("TestTaskQueue.Add == false") } } err := taskQueue.Clear() if err != nil { t.Fatal("TestTaskQueue.Clear", err) } if taskQueue.Size() != 0 { t.Fatal("taskQueue.Size() != 0") } } func TestTaskQueue_Update(t *testing.T) { defer func() { DelDb() }() DelDb() taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester()) for i := taskPriorityCount; i >= 0; i-- { bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, my_util.RandStringBytesMaskImprSrcSB(10), i)) if err != nil { t.Fatal("TestTaskQueue.Add", err) } if bok == false { t.Fatal("TestTaskQueue.Add == false") } } bok, waitingJobs, err := taskQueue.GetJobsByStatus(task_queue.Waiting) if err != nil { t.Fatal("TestTaskQueue.Get", err) } if bok == false { t.Fatal("TestTaskQueue.Get == false") } if len(waitingJobs) != taskPriorityCount+1 { t.Fatal("len(waitingJobs) != taskPriorityCount") } for i := 0; i <= taskPriorityCount; i++ { if waitingJobs[i].TaskPriority != i { t.Fatalf("TestTaskQueue.TaskPriority pop error, want = %d, got = %d", i, waitingJobs[i].TaskPriority) } } for _, waitingJob := range waitingJobs { waitingJob.JobStatus = task_queue.Committed bok, err = taskQueue.Update(waitingJob) if err != nil { t.Fatal("TestTaskQueue.Update", err) } if bok == false { t.Fatal("TestTaskQueue.Update == false") } } bok, committedJobs, err := taskQueue.GetJobsByStatus(task_queue.Committed) if err != nil { t.Fatal("TestTaskQueue.Get", err) } if bok == false { t.Fatal("TestTaskQueue.Get == false") } if len(committedJobs) != taskPriorityCount+1 { t.Fatal("len(committedJobs) != taskPriorityCount") } } func TestTaskQueue_UpdateAdGetOneWaiting(t *testing.T) { defer func() { DelDb() }() DelDb() taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester()) for i := taskPriorityCount; i >= 0; i-- { bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, fmt.Sprintf("%d", i), i)) if err != nil { t.Fatal("TestTaskQueue.Add", err) } if bok == false { t.Fatal("TestTaskQueue.Add == false") } } bok, waitingJob, err := taskQueue.GetOneWaitingJob() if err != nil { t.Fatal("TestTaskQueue.GetOneWaitingJob", err) } if bok == false { t.Fatal("TestTaskQueue.GetOneWaitingJob == false") } if waitingJob.TaskPriority != 0 { t.Fatal("waitingJob.TaskPriority != 0") } waitingJob.JobStatus = task_queue.Committed bok, err = taskQueue.Update(waitingJob) if err != nil { t.Fatal("TestTaskQueue.Update", err) } if bok == false { t.Fatal("TestTaskQueue.Update == false") } bok, waitingJob, err = taskQueue.GetOneWaitingJob() if err != nil { t.Fatal("TestTaskQueue.GetOneWaitingJob", err) } if bok == false { t.Fatal("TestTaskQueue.GetOneWaitingJob == false") } if waitingJob.TaskPriority != 1 { t.Fatal("waitingJob.TaskPriority != 0") } } func TestTaskQueue_UpdatePriority(t *testing.T) { defer func() { DelDb() }() DelDb() taskQueue := NewTaskQueue("testQueue", settings.NewSettings(), log_helper.GetLogger4Tester()) for i := taskPriorityCount; i >= 0; i-- { bok, err := taskQueue.Add(*task_queue.NewOneJob(common.Movie, fmt.Sprintf("%d", i), i)) if err != nil { t.Fatal("TestTaskQueue.Add", err) } if bok == false { t.Fatal("TestTaskQueue.Add == false") } } bok, waitingJob, err := taskQueue.GetOneWaitingJob() if err != nil { t.Fatal("TestTaskQueue.GetOneWaitingJob", err) } if bok == false { t.Fatal("TestTaskQueue.GetOneWaitingJob == false") } if waitingJob.TaskPriority != 0 { t.Fatal("waitingJob.TaskPriority != 0") } waitingJob.TaskPriority = 1 bok, err = taskQueue.Update(waitingJob) if err != nil { t.Fatal("TestTaskQueue.Update", err) } if bok == false { t.Fatal("TestTaskQueue.Update == false") } bok, waitingJobs, err := taskQueue.GetJobsByPriorityAndStatus(0, task_queue.Waiting) if err != nil { t.Fatal("TestTaskQueue.GetJobsByPriorityAndStatus", err) } if bok == false { t.Fatal("TestTaskQueue.GetJobsByPriorityAndStatus == false") } if len(waitingJobs) != 0 { t.Fatal("len(waitingJobs) != 0") } bok, waitingJobs, err = taskQueue.GetJobsByPriorityAndStatus(1, task_queue.Waiting) if err != nil { t.Fatal("TestTaskQueue.GetJobsByPriorityAndStatus", err) } if bok == false { t.Fatal("TestTaskQueue.GetJobsByPriorityAndStatus == false") } if len(waitingJobs) != 2 { t.Fatal("len(waitingJobs) != 2") } }