Go-based FM stereo transmitter with RDS, Windows-first and cross-platform
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

108 строки
2.4KB

  1. package app
  2. import (
  3. "testing"
  4. "github.com/jan/fm-rds-tx/internal/output"
  5. )
  6. func TestRuntimeIndicator(t *testing.T) {
  7. cases := []struct {
  8. name string
  9. queueHealth output.QueueHealth
  10. lateBuffers uint64
  11. want RuntimeIndicator
  12. }{
  13. {
  14. name: "normal",
  15. queueHealth: output.QueueHealthNormal,
  16. lateBuffers: 0,
  17. want: RuntimeIndicatorNormal,
  18. },
  19. {
  20. name: "degradedLateBuffers",
  21. queueHealth: output.QueueHealthNormal,
  22. lateBuffers: 1,
  23. want: RuntimeIndicatorDegraded,
  24. },
  25. {
  26. name: "degradedQueueLow",
  27. queueHealth: output.QueueHealthLow,
  28. lateBuffers: 0,
  29. want: RuntimeIndicatorDegraded,
  30. },
  31. {
  32. name: "queueCritical",
  33. queueHealth: output.QueueHealthCritical,
  34. lateBuffers: 0,
  35. want: RuntimeIndicatorQueueCritical,
  36. },
  37. {
  38. name: "criticalLateBuffers",
  39. queueHealth: output.QueueHealthCritical,
  40. lateBuffers: 3,
  41. want: RuntimeIndicatorQueueCritical,
  42. },
  43. }
  44. for _, tc := range cases {
  45. tc := tc
  46. t.Run(tc.name, func(t *testing.T) {
  47. if got := runtimeIndicator(tc.queueHealth, tc.lateBuffers); got != tc.want {
  48. t.Fatalf("runtime indicator mismatch: queue=%s late=%d want=%s got=%s",
  49. tc.queueHealth, tc.lateBuffers, tc.want, got)
  50. }
  51. })
  52. }
  53. }
  54. func TestRuntimeAlert(t *testing.T) {
  55. cases := []struct {
  56. name string
  57. queueHealth output.QueueHealth
  58. lateBuffers uint64
  59. want string
  60. }{
  61. {
  62. name: "normal",
  63. queueHealth: output.QueueHealthNormal,
  64. lateBuffers: 0,
  65. want: "",
  66. },
  67. {
  68. name: "lateBuffers",
  69. queueHealth: output.QueueHealthNormal,
  70. lateBuffers: 1,
  71. want: "late buffers",
  72. },
  73. {
  74. name: "queueLow",
  75. queueHealth: output.QueueHealthLow,
  76. lateBuffers: 0,
  77. want: "queue health low",
  78. },
  79. {
  80. name: "queueCritical",
  81. queueHealth: output.QueueHealthCritical,
  82. lateBuffers: 0,
  83. want: "queue health critical",
  84. },
  85. {
  86. name: "criticalLateBuffers",
  87. queueHealth: output.QueueHealthCritical,
  88. lateBuffers: 5,
  89. want: "queue health critical",
  90. },
  91. }
  92. for _, tc := range cases {
  93. tc := tc
  94. t.Run(tc.name, func(t *testing.T) {
  95. if got := runtimeAlert(tc.queueHealth, tc.lateBuffers); got != tc.want {
  96. t.Fatalf("runtime alert mismatch: queue=%s late=%d want=%q got=%q",
  97. tc.queueHealth, tc.lateBuffers, tc.want, got)
  98. }
  99. })
  100. }
  101. }