code.gitea.io/gitea@v1.22.3/modules/queue/manager_test.go (about) 1 // Copyright 2023 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package queue 5 6 import ( 7 "context" 8 "path/filepath" 9 "testing" 10 11 "code.gitea.io/gitea/modules/setting" 12 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func TestManager(t *testing.T) { 17 oldAppDataPath := setting.AppDataPath 18 setting.AppDataPath = t.TempDir() 19 defer func() { 20 setting.AppDataPath = oldAppDataPath 21 }() 22 23 newQueueFromConfig := func(name, cfg string) (*WorkerPoolQueue[int], error) { 24 cfgProvider, err := setting.NewConfigProviderFromData(cfg) 25 if err != nil { 26 return nil, err 27 } 28 qs, err := setting.GetQueueSettings(cfgProvider, name) 29 if err != nil { 30 return nil, err 31 } 32 return newWorkerPoolQueueForTest(name, qs, func(s ...int) (unhandled []int) { return nil }, false) 33 } 34 35 // test invalid CONN_STR 36 _, err := newQueueFromConfig("default", ` 37 [queue] 38 DATADIR = temp-dir 39 CONN_STR = redis:// 40 `) 41 assert.ErrorContains(t, err, "invalid leveldb connection string") 42 43 // test default config 44 q, err := newQueueFromConfig("default", "") 45 assert.NoError(t, err) 46 assert.Equal(t, "default", q.GetName()) 47 assert.Equal(t, "level", q.GetType()) 48 assert.Equal(t, filepath.Join(setting.AppDataPath, "queues/common"), q.baseConfig.DataFullDir) 49 assert.Equal(t, 100000, q.baseConfig.Length) 50 assert.Equal(t, 20, q.batchLength) 51 assert.Equal(t, "", q.baseConfig.ConnStr) 52 assert.Equal(t, "default_queue", q.baseConfig.QueueFullName) 53 assert.Equal(t, "default_queue_unique", q.baseConfig.SetFullName) 54 assert.NotZero(t, q.GetWorkerMaxNumber()) 55 assert.Equal(t, 0, q.GetWorkerNumber()) 56 assert.Equal(t, 0, q.GetWorkerActiveNumber()) 57 assert.Equal(t, 0, q.GetQueueItemNumber()) 58 assert.Equal(t, "int", q.GetItemTypeName()) 59 60 // test inherited config 61 cfgProvider, err := setting.NewConfigProviderFromData(` 62 [queue] 63 TYPE = channel 64 DATADIR = queues/dir1 65 LENGTH = 100 66 BATCH_LENGTH = 20 67 CONN_STR = "addrs=127.0.0.1:6379 db=0" 68 QUEUE_NAME = _queue1 69 70 [queue.sub] 71 TYPE = level 72 DATADIR = queues/dir2 73 LENGTH = 102 74 BATCH_LENGTH = 22 75 CONN_STR = 76 QUEUE_NAME = _q2 77 SET_NAME = _u2 78 MAX_WORKERS = 123 79 `) 80 81 assert.NoError(t, err) 82 83 q1 := createWorkerPoolQueue[string](context.Background(), "no-such", cfgProvider, nil, false) 84 assert.Equal(t, "no-such", q1.GetName()) 85 assert.Equal(t, "dummy", q1.GetType()) // no handler, so it becomes dummy 86 assert.Equal(t, filepath.Join(setting.AppDataPath, "queues/dir1"), q1.baseConfig.DataFullDir) 87 assert.Equal(t, 100, q1.baseConfig.Length) 88 assert.Equal(t, 20, q1.batchLength) 89 assert.Equal(t, "addrs=127.0.0.1:6379 db=0", q1.baseConfig.ConnStr) 90 assert.Equal(t, "no-such_queue1", q1.baseConfig.QueueFullName) 91 assert.Equal(t, "no-such_queue1_unique", q1.baseConfig.SetFullName) 92 assert.NotZero(t, q1.GetWorkerMaxNumber()) 93 assert.Equal(t, 0, q1.GetWorkerNumber()) 94 assert.Equal(t, 0, q1.GetWorkerActiveNumber()) 95 assert.Equal(t, 0, q1.GetQueueItemNumber()) 96 assert.Equal(t, "string", q1.GetItemTypeName()) 97 qid1 := GetManager().qidCounter 98 99 q2 := createWorkerPoolQueue(context.Background(), "sub", cfgProvider, func(s ...int) (unhandled []int) { return nil }, false) 100 assert.Equal(t, "sub", q2.GetName()) 101 assert.Equal(t, "level", q2.GetType()) 102 assert.Equal(t, filepath.Join(setting.AppDataPath, "queues/dir2"), q2.baseConfig.DataFullDir) 103 assert.Equal(t, 102, q2.baseConfig.Length) 104 assert.Equal(t, 22, q2.batchLength) 105 assert.Equal(t, "", q2.baseConfig.ConnStr) 106 assert.Equal(t, "sub_q2", q2.baseConfig.QueueFullName) 107 assert.Equal(t, "sub_q2_u2", q2.baseConfig.SetFullName) 108 assert.Equal(t, 123, q2.GetWorkerMaxNumber()) 109 assert.Equal(t, 0, q2.GetWorkerNumber()) 110 assert.Equal(t, 0, q2.GetWorkerActiveNumber()) 111 assert.Equal(t, 0, q2.GetQueueItemNumber()) 112 assert.Equal(t, "int", q2.GetItemTypeName()) 113 qid2 := GetManager().qidCounter 114 115 assert.Equal(t, q1, GetManager().ManagedQueues()[qid1]) 116 117 GetManager().GetManagedQueue(qid1).SetWorkerMaxNumber(120) 118 assert.Equal(t, 120, q1.workerMaxNum) 119 120 stop := runWorkerPoolQueue(q2) 121 assert.NoError(t, GetManager().GetManagedQueue(qid2).FlushWithContext(context.Background(), 0)) 122 assert.NoError(t, GetManager().FlushAll(context.Background(), 0)) 123 stop() 124 }