github.heygears.com/openimsdk/tools@v0.0.49/mq/memamq/queue_test.go (about) 1 package memamq 2 3 import ( 4 "sync" 5 "sync/atomic" 6 "testing" 7 "time" 8 ) 9 10 //func TestNewMemoryQueue(t *testing.T) { 11 // workerCount := 3 12 // bufferSize := 10 13 // queue := NewMemoryQueue(workerCount, bufferSize) 14 // 15 // if cap(queue.taskChan) != bufferSize { 16 // t.Errorf("Expected buffer size %d, got %d", bufferSize, cap(queue.taskChan)) 17 // } 18 // 19 // if queue.isStopped { 20 // t.Errorf("New queue is prematurely stopped") 21 // } 22 // 23 // if len(queue.taskChan) != 0 { 24 // t.Errorf("New queue should be empty, found %d items", len(queue.taskChan)) 25 // } 26 //} 27 28 func TestPushAndStop(t *testing.T) { 29 queue := NewMemoryQueue(1, 5) 30 31 var wg sync.WaitGroup 32 wg.Add(1) 33 queue.Push(func() { 34 time.Sleep(50 * time.Millisecond) // Simulate task delay 35 wg.Done() 36 }) 37 38 queue.Stop() 39 wg.Wait() 40 41 if err := queue.Push(func() {}); err == nil { 42 t.Error("Expected error when pushing to stopped queue, got none") 43 } 44 } 45 46 func TestPushTimeout(t *testing.T) { 47 queue := NewMemoryQueue(1, 1) // Small buffer and worker to force full queue 48 49 done := make(chan bool) 50 go func() { 51 queue.Push(func() { 52 time.Sleep(200 * time.Millisecond) // Long enough to cause the second push to timeout 53 }) 54 done <- true 55 }() 56 57 <-done // Ensure first task is pushed 58 59 if err := queue.Push(func() {}); err != nil { 60 t.Error("Expected timeout error, got nil") 61 } 62 } 63 64 func TestName(t *testing.T) { 65 queue := NewMemoryQueue(16, 1024) 66 var count atomic.Int64 67 for i := 0; i < 128; i++ { 68 go func() { 69 for { 70 queue.Push(func() { 71 count.Add(1) 72 }) 73 } 74 }() 75 } 76 77 <-time.After(time.Second * 2) 78 t.Log("stop 1", time.Now()) 79 queue.Stop() 80 t.Log("stop 2", time.Now()) 81 t.Log(count.Load(), time.Now()) 82 }