Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

queue_channel_test.go 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. )
  10. func TestChannelQueue(t *testing.T) {
  11. handleChan := make(chan *testData)
  12. handle := func(data ...Data) {
  13. for _, datum := range data {
  14. testDatum := datum.(*testData)
  15. handleChan <- testDatum
  16. }
  17. }
  18. nilFn := func(_ func()) {}
  19. queue, err := NewChannelQueue(handle,
  20. ChannelQueueConfiguration{
  21. WorkerPoolConfiguration: WorkerPoolConfiguration{
  22. QueueLength: 0,
  23. MaxWorkers: 10,
  24. BlockTimeout: 1 * time.Second,
  25. BoostTimeout: 5 * time.Minute,
  26. BoostWorkers: 5,
  27. },
  28. Workers: 0,
  29. Name: "TestChannelQueue",
  30. }, &testData{})
  31. assert.NoError(t, err)
  32. assert.Equal(t, 5, queue.(*ChannelQueue).WorkerPool.boostWorkers)
  33. go queue.Run(nilFn, nilFn)
  34. test1 := testData{"A", 1}
  35. go queue.Push(&test1)
  36. result1 := <-handleChan
  37. assert.Equal(t, test1.TestString, result1.TestString)
  38. assert.Equal(t, test1.TestInt, result1.TestInt)
  39. err = queue.Push(test1)
  40. assert.Error(t, err)
  41. }
  42. func TestChannelQueue_Batch(t *testing.T) {
  43. handleChan := make(chan *testData)
  44. handle := func(data ...Data) {
  45. assert.True(t, len(data) == 2)
  46. for _, datum := range data {
  47. testDatum := datum.(*testData)
  48. handleChan <- testDatum
  49. }
  50. }
  51. nilFn := func(_ func()) {}
  52. queue, err := NewChannelQueue(handle,
  53. ChannelQueueConfiguration{
  54. WorkerPoolConfiguration: WorkerPoolConfiguration{
  55. QueueLength: 20,
  56. BatchLength: 2,
  57. BlockTimeout: 0,
  58. BoostTimeout: 0,
  59. BoostWorkers: 0,
  60. MaxWorkers: 10,
  61. },
  62. Workers: 1,
  63. }, &testData{})
  64. assert.NoError(t, err)
  65. go queue.Run(nilFn, nilFn)
  66. test1 := testData{"A", 1}
  67. test2 := testData{"B", 2}
  68. queue.Push(&test1)
  69. go queue.Push(&test2)
  70. result1 := <-handleChan
  71. assert.Equal(t, test1.TestString, result1.TestString)
  72. assert.Equal(t, test1.TestInt, result1.TestInt)
  73. result2 := <-handleChan
  74. assert.Equal(t, test2.TestString, result2.TestString)
  75. assert.Equal(t, test2.TestInt, result2.TestInt)
  76. err = queue.Push(test1)
  77. assert.Error(t, err)
  78. }