You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

queue_channel_test.go 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package queue
  5. import (
  6. "context"
  7. "testing"
  8. "time"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestChannelQueue(t *testing.T) {
  12. handleChan := make(chan *testData)
  13. handle := func(data ...Data) {
  14. for _, datum := range data {
  15. testDatum := datum.(*testData)
  16. handleChan <- testDatum
  17. }
  18. }
  19. nilFn := func(_ context.Context, _ func()) {}
  20. queue, err := NewChannelQueue(handle,
  21. ChannelQueueConfiguration{
  22. WorkerPoolConfiguration: WorkerPoolConfiguration{
  23. QueueLength: 0,
  24. MaxWorkers: 10,
  25. BlockTimeout: 1 * time.Second,
  26. BoostTimeout: 5 * time.Minute,
  27. BoostWorkers: 5,
  28. },
  29. Workers: 0,
  30. Name: "TestChannelQueue",
  31. }, &testData{})
  32. assert.NoError(t, err)
  33. assert.Equal(t, queue.(*ChannelQueue).WorkerPool.boostWorkers, 5)
  34. go queue.Run(nilFn, nilFn)
  35. test1 := testData{"A", 1}
  36. go queue.Push(&test1)
  37. result1 := <-handleChan
  38. assert.Equal(t, test1.TestString, result1.TestString)
  39. assert.Equal(t, test1.TestInt, result1.TestInt)
  40. err = queue.Push(test1)
  41. assert.Error(t, err)
  42. }
  43. func TestChannelQueue_Batch(t *testing.T) {
  44. handleChan := make(chan *testData)
  45. handle := func(data ...Data) {
  46. assert.True(t, len(data) == 2)
  47. for _, datum := range data {
  48. testDatum := datum.(*testData)
  49. handleChan <- testDatum
  50. }
  51. }
  52. nilFn := func(_ context.Context, _ func()) {}
  53. queue, err := NewChannelQueue(handle,
  54. ChannelQueueConfiguration{
  55. WorkerPoolConfiguration: WorkerPoolConfiguration{
  56. QueueLength: 20,
  57. BatchLength: 2,
  58. BlockTimeout: 1 * time.Second,
  59. BoostTimeout: 5 * time.Minute,
  60. BoostWorkers: 5,
  61. MaxWorkers: 10,
  62. },
  63. Workers: 1,
  64. }, &testData{})
  65. assert.NoError(t, err)
  66. go queue.Run(nilFn, nilFn)
  67. test1 := testData{"A", 1}
  68. test2 := testData{"B", 2}
  69. queue.Push(&test1)
  70. go queue.Push(&test2)
  71. result1 := <-handleChan
  72. assert.Equal(t, test1.TestString, result1.TestString)
  73. assert.Equal(t, test1.TestInt, result1.TestInt)
  74. result2 := <-handleChan
  75. assert.Equal(t, test2.TestString, result2.TestString)
  76. assert.Equal(t, test2.TestInt, result2.TestInt)
  77. err = queue.Push(test1)
  78. assert.Error(t, err)
  79. }