From e019c6dcccaa4c8b249f8f6674fed3a257ec61ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Sun, 12 Jan 2025 02:05:53 +0800 Subject: [PATCH] feat: optimize --- queue/driver_sync_test.go | 21 +++++++-------------- queue/worker.go | 3 ++- queue/worker_test.go | 26 +++++++++++++------------- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/queue/driver_sync_test.go b/queue/driver_sync_test.go index 81df6f348..d6f15d429 100644 --- a/queue/driver_sync_test.go +++ b/queue/driver_sync_test.go @@ -24,35 +24,28 @@ type DriverSyncTestSuite struct { } func TestDriverSyncTestSuite(t *testing.T) { - mockConfig := mocksconfig.NewConfig(t) - mockQueue := mocksqueue.NewQueue(t) - app := NewApplication(mockConfig) - - app.Register([]queue.Job{&TestSyncJob{}, &TestChainSyncJob{}}) - suite.Run(t, &DriverSyncTestSuite{ - app: app, - mockConfig: mockConfig, - mockQueue: mockQueue, - }) + suite.Run(t, new(DriverSyncTestSuite)) } func (s *DriverSyncTestSuite) SetupTest() { testSyncJob = 0 testChainSyncJob = 0 + s.mockConfig = mocksconfig.NewConfig(s.T()) + s.mockQueue = mocksqueue.NewQueue(s.T()) + s.app = NewApplication(s.mockConfig) + s.app.Register([]queue.Job{&TestSyncJob{}, &TestChainSyncJob{}}) + s.mockConfig.EXPECT().GetString("queue.default").Return("sync").Twice() + s.mockConfig.EXPECT().GetString("queue.connections.sync.queue", "default").Return("default").Once() } func (s *DriverSyncTestSuite) TestSyncQueue() { - s.mockConfig.EXPECT().GetString("queue.default").Return("sync").Twice() s.mockConfig.EXPECT().GetString("app.name").Return("goravel").Once() - s.mockConfig.EXPECT().GetString("queue.connections.sync.queue", "default").Return("default").Once() s.Nil(s.app.Job(&TestSyncJob{}, []any{"TestSyncQueue", 1}).DispatchSync()) s.Equal(1, testSyncJob) } func (s *DriverSyncTestSuite) TestChainSyncQueue() { - s.mockConfig.EXPECT().GetString("queue.default").Return("sync").Twice() s.mockConfig.EXPECT().GetString("app.name").Return("goravel").Twice() - s.mockConfig.EXPECT().GetString("queue.connections.sync.queue", "default").Return("default").Once() s.mockConfig.EXPECT().GetString("queue.connections.sync.driver").Return("sync").Once() s.Nil(s.app.Chain([]queue.Jobs{ diff --git a/queue/worker.go b/queue/worker.go index 12f89236d..59a83b792 100644 --- a/queue/worker.go +++ b/queue/worker.go @@ -84,12 +84,13 @@ func (r *Worker) Run() error { } }() + r.wg.Wait() + return nil } func (r *Worker) Shutdown() error { r.isShutdown.Store(true) - r.wg.Wait() close(r.failedJobChan) return nil } diff --git a/queue/worker_test.go b/queue/worker_test.go index 50322cb18..495023670 100644 --- a/queue/worker_test.go +++ b/queue/worker_test.go @@ -16,6 +16,7 @@ import ( type WorkerTestSuite struct { suite.Suite + app *Application mockConfig *mocksconfig.Config } @@ -25,27 +26,27 @@ func TestWorkerTestSuite(t *testing.T) { func (s *WorkerTestSuite) SetupTest() { s.mockConfig = mocksconfig.NewConfig(s.T()) - s.mockConfig.EXPECT().GetString("queue.default").Return("async").Times(4) - s.mockConfig.EXPECT().GetString("app.name").Return("goravel").Times(3) - s.mockConfig.EXPECT().GetString("queue.connections.async.queue", "default").Return("default").Times(3) + s.mockConfig.EXPECT().GetString("queue.default").Return("async").Times(3) + s.mockConfig.EXPECT().GetString("app.name").Return("goravel").Times(2) + s.mockConfig.EXPECT().GetString("queue.connections.async.queue", "default").Return("default").Times(2) s.mockConfig.EXPECT().GetString("queue.connections.async.driver").Return("async").Twice() s.mockConfig.EXPECT().GetInt("queue.connections.async.size", 100).Return(10).Twice() + s.app = NewApplication(s.mockConfig) } func (s *WorkerTestSuite) TestRun_Success() { - app := NewApplication(s.mockConfig) testJob := new(MockJob) - app.Register([]contractsqueue.Job{testJob}) + s.app.Register([]contractsqueue.Job{testJob}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) go func(ctx context.Context) { - s.NoError(app.Worker().Run()) + s.NoError(s.app.Worker().Run()) <-ctx.Done() - s.NoError(app.Worker().Shutdown()) + s.NoError(s.app.Worker().Shutdown()) }(ctx) time.Sleep(1 * time.Second) - s.NoError(app.Job(testJob, []any{}).Dispatch()) + s.NoError(s.app.Job(testJob, []any{}).Dispatch()) time.Sleep(2 * time.Second) s.True(testJob.called) cancel() @@ -64,19 +65,18 @@ func (s *WorkerTestSuite) TestRun_FailedJob() { mockQuery.EXPECT().Create(mock.Anything).Return(nil) OrmFacade = mockOrm - app := NewApplication(s.mockConfig) testJob := new(MockFailedJob) - app.Register([]contractsqueue.Job{testJob}) + s.app.Register([]contractsqueue.Job{testJob}) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) go func(ctx context.Context) { - s.NoError(app.Worker().Run()) + s.NoError(s.app.Worker().Run()) <-ctx.Done() - s.NoError(app.Worker().Shutdown()) + s.NoError(s.app.Worker().Shutdown()) }(ctx) time.Sleep(1 * time.Second) - s.NoError(app.Job(testJob, []any{}).Dispatch()) + s.NoError(s.app.Job(testJob, []any{}).Dispatch()) time.Sleep(2 * time.Second) s.True(testJob.called) cancel()