manager_load_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package leakybucket
  2. import (
  3. "fmt"
  4. "testing"
  5. "gopkg.in/tomb.v2"
  6. )
  7. type cfgTest struct {
  8. cfg BucketFactory
  9. loadable bool
  10. valid bool
  11. }
  12. func runTest(tests []cfgTest) error {
  13. var tomb = &tomb.Tomb{}
  14. for idx, cfg := range tests {
  15. err := LoadBucket(&cfg.cfg, tomb)
  16. if cfg.loadable && err != nil {
  17. return fmt.Errorf("expected loadable result (%d/%d), got: %s", idx+1, len(tests), err)
  18. }
  19. if !cfg.loadable && err == nil {
  20. return fmt.Errorf("expected unloadable result (%d/%d)", idx+1, len(tests))
  21. }
  22. err = ValidateFactory(&cfg.cfg)
  23. if cfg.valid && err != nil {
  24. return fmt.Errorf("expected valid result (%d/%d), got: %s", idx+1, len(tests), err)
  25. }
  26. if !cfg.valid && err == nil {
  27. return fmt.Errorf("expected invalid result (%d/%d)", idx+1, len(tests))
  28. }
  29. }
  30. return nil
  31. }
  32. func TestBadBucketsConfig(t *testing.T) {
  33. var CfgTests = []cfgTest{
  34. //empty
  35. {BucketFactory{}, false, false},
  36. //missing description
  37. {BucketFactory{Name: "test"}, false, false},
  38. //missing type
  39. {BucketFactory{Name: "test", Description: "test1"}, false, false},
  40. //bad type
  41. {BucketFactory{Name: "test", Description: "test1", Type: "ratata"}, false, false},
  42. }
  43. if err := runTest(CfgTests); err != nil {
  44. t.Fatalf("%s", err)
  45. }
  46. }
  47. func TestLeakyBucketsConfig(t *testing.T) {
  48. var CfgTests = []cfgTest{
  49. //leaky with bad capacity
  50. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 0}, false, false},
  51. //leaky with empty leakspeed
  52. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 1}, false, false},
  53. //leaky with missing filter
  54. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 1, LeakSpeed: "1s"}, false, true},
  55. //leaky with invalid leakspeed
  56. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 1, LeakSpeed: "abs", Filter: "true"}, false, false},
  57. //leaky with valid filter
  58. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 1, LeakSpeed: "1s", Filter: "true"}, true, true},
  59. //leaky with invalid filter
  60. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 1, LeakSpeed: "1s", Filter: "xu"}, false, true},
  61. //leaky with valid filter
  62. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 1, LeakSpeed: "1s", Filter: "true"}, true, true},
  63. //leaky with bad overflow filter
  64. {BucketFactory{Name: "test", Description: "test1", Type: "leaky", Capacity: 1, LeakSpeed: "1s", Filter: "true", OverflowFilter: "xu"}, false, true},
  65. }
  66. if err := runTest(CfgTests); err != nil {
  67. t.Fatalf("%s", err)
  68. }
  69. }
  70. func TestBlackholeConfig(t *testing.T) {
  71. var CfgTests = []cfgTest{
  72. //basic bh
  73. {BucketFactory{Name: "test", Description: "test1", Type: "trigger", Filter: "true", Blackhole: "15s"}, true, true},
  74. //bad bh
  75. {BucketFactory{Name: "test", Description: "test1", Type: "trigger", Filter: "true", Blackhole: "abc"}, false, true},
  76. }
  77. if err := runTest(CfgTests); err != nil {
  78. t.Fatalf("%s", err)
  79. }
  80. }
  81. func TestTriggerBucketsConfig(t *testing.T) {
  82. var CfgTests = []cfgTest{
  83. //basic valid counter
  84. {BucketFactory{Name: "test", Description: "test1", Type: "trigger", Filter: "true"}, true, true},
  85. }
  86. if err := runTest(CfgTests); err != nil {
  87. t.Fatalf("%s", err)
  88. }
  89. }
  90. func TestCounterBucketsConfig(t *testing.T) {
  91. var CfgTests = []cfgTest{
  92. //basic valid counter
  93. {BucketFactory{Name: "test", Description: "test1", Type: "counter", Capacity: -1, Duration: "5s", Filter: "true"}, true, true},
  94. //missing duration
  95. {BucketFactory{Name: "test", Description: "test1", Type: "counter", Capacity: -1, Filter: "true"}, false, false},
  96. //bad duration
  97. {BucketFactory{Name: "test", Description: "test1", Type: "counter", Capacity: -1, Duration: "abc", Filter: "true"}, false, false},
  98. //capacity must be -1
  99. {BucketFactory{Name: "test", Description: "test1", Type: "counter", Capacity: 0, Duration: "5s", Filter: "true"}, false, false},
  100. }
  101. if err := runTest(CfgTests); err != nil {
  102. t.Fatalf("%s", err)
  103. }
  104. }