Files
OpenFlare/plugins/drivers/driver_asynq_worker/meta_test.go
T
ryan 416603b616 fix(persistence): migrate all pkg/persistence imports to plugins/infra/database and plugins/infra/cache
- Replace db.DB(ctx) with database.DB(ctx) from plugins/infra/database
- Replace db.Redis/db.PrefixedKey/db.GetJSON/db.SetJSON with cachepkg.* from plugins/infra/cache
- Replace pkg/persistence/idgen with pkg/idgen (already exists)
- Replace pkg/persistence/batchwriter with pkg/batchwriter (already exists)
- Replace pkg/persistence/migrator with pkg/migrator (already exists)
- Replace pkg/persistence/logstore with plugins/domain/risk_control/logstore
- Delete defunct pkg/{persistence,cap,message_gateway,push,shared,task}
- Fix vet issues: db alias in domain_test.go, driver_asynq_worker.TaskHandler reference
- Update Makefile architecture guard
- Update docs and skill references
- Update go.mod: gorilla/sessions promotion to direct dependency
2026-08-28 10:59:24 +08:00

99 lines
2.0 KiB
Go

// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
package driver_asynq_worker
import (
"sync"
"testing"
)
func resetDispatchableTasks() {
dispatchableTasksMutex.Lock()
defer dispatchableTasksMutex.Unlock()
dispatchableTasks = nil
}
func TestRegisterTaskMeta_ThreadSafe(t *testing.T) {
resetDispatchableTasks()
defer resetDispatchableTasks()
var wg sync.WaitGroup
workers := 20
iterations := 100
for i := 0; i < workers; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
for j := 0; j < iterations; j++ {
RegisterTaskMeta(TaskMeta{
Type: "task_type_a",
AsynqTask: "asynq_task_a",
Name: "Task A",
})
RegisterTaskMeta(TaskMeta{
Type: "task_type_b",
AsynqTask: "asynq_task_b",
Name: "Task B",
})
}
}(i)
}
wg.Wait()
tasks := GetDispatchableTasks()
if len(tasks) != 2 {
t.Fatalf("expected 2 unique tasks, got %d", len(tasks))
}
}
func TestGetTaskMeta_Isolation(t *testing.T) {
resetDispatchableTasks()
defer resetDispatchableTasks()
RegisterTaskMeta(TaskMeta{
Type: "task_isolated",
AsynqTask: "asynq_isolated",
Name: "Original Name",
})
meta := GetTaskMeta("task_isolated")
if meta == nil {
t.Fatal("expected task to be found")
}
// Modify returned struct
meta.Name = "Modified Name"
// Fetch again and verify original data is unaffected
meta2 := GetTaskMeta("task_isolated")
if meta2.Name != "Original Name" {
t.Fatalf("expected name to be 'Original Name', got %s", meta2.Name)
}
}
func TestGetTaskMetaByAsynqTask_Isolation(t *testing.T) {
resetDispatchableTasks()
defer resetDispatchableTasks()
RegisterTaskMeta(TaskMeta{
Type: "task_isolated",
AsynqTask: "asynq_isolated",
Name: "Original Name",
})
meta := GetTaskMetaByAsynqTask("asynq_isolated")
if meta == nil {
t.Fatal("expected task to be found")
}
meta.Name = "Modified Name"
meta2 := GetTaskMetaByAsynqTask("asynq_isolated")
if meta2.Name != "Original Name" {
t.Fatalf("expected name to be 'Original Name', got %s", meta2.Name)
}
}