manager_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package plugins
  2. import (
  3. "errors"
  4. "fmt"
  5. "net/http"
  6. "net/http/httptest"
  7. "os"
  8. "path"
  9. "reflect"
  10. "testing"
  11. )
  12. func TestManager_Register(t *testing.T) {
  13. s := httptest.NewServer(
  14. http.FileServer(http.Dir("testzips")),
  15. )
  16. defer s.Close()
  17. endpoint := s.URL
  18. data := []struct {
  19. t PluginType
  20. n string
  21. u string
  22. err error
  23. }{
  24. {
  25. t: SOURCE,
  26. n: "",
  27. u: "",
  28. err: errors.New("invalid name : should not be empty"),
  29. }, {
  30. t: SOURCE,
  31. n: "zipMissConf",
  32. u: endpoint + "/sources/zipMissConf.zip",
  33. err: errors.New("fail to unzip file " + endpoint + "/sources/zipMissConf.zip: invalid zip file: so file or conf file is missing"),
  34. }, {
  35. t: SINK,
  36. n: "urlerror",
  37. u: endpoint + "/sinks/nozip",
  38. err: errors.New("invalid uri " + endpoint + "/sinks/nozip"),
  39. }, {
  40. t: SINK,
  41. n: "zipWrongname",
  42. u: endpoint + "/sinks/zipWrongName.zip",
  43. err: errors.New("fail to unzip file " + endpoint + "/sinks/zipWrongName.zip: invalid zip file: so file or conf file is missing"),
  44. }, {
  45. t: FUNCTION,
  46. n: "zipMissSo",
  47. u: endpoint + "/functions/zipMissSo.zip",
  48. err: errors.New("fail to unzip file " + endpoint + "/functions/zipMissSo.zip: invalid zip file: so file or conf file is missing"),
  49. }, {
  50. t: SOURCE,
  51. n: "random2",
  52. u: endpoint + "/sources/random2.zip",
  53. }, {
  54. t: SINK,
  55. n: "file",
  56. u: endpoint + "/sinks/file.zip",
  57. }, {
  58. t: FUNCTION,
  59. n: "echo",
  60. u: endpoint + "/functions/echo.zip",
  61. }, {
  62. t: FUNCTION,
  63. n: "echo",
  64. u: endpoint + "/functions/echo.zip",
  65. err: errors.New("invalid name echo: duplicate"),
  66. },
  67. }
  68. manager, err := NewPluginManager()
  69. if err != nil {
  70. t.Error(err)
  71. }
  72. fmt.Printf("The test bucket size is %d.\n\n", len(data))
  73. for i, tt := range data {
  74. err = manager.Register(tt.t, &Plugin{
  75. Name: tt.n,
  76. File: tt.u,
  77. Callback: "",
  78. })
  79. if !reflect.DeepEqual(tt.err, err) {
  80. t.Errorf("%d: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.err, err)
  81. } else if tt.err == nil {
  82. err := checkFile(manager.pluginDir, manager.etcDir, tt.t, tt.n)
  83. if err != nil {
  84. t.Errorf("%d: error : %s\n\n", i, err)
  85. }
  86. }
  87. }
  88. }
  89. func TestManager_Delete(t *testing.T) {
  90. data := []struct {
  91. t PluginType
  92. n string
  93. err error
  94. }{
  95. {
  96. t: SOURCE,
  97. n: "random2",
  98. }, {
  99. t: SINK,
  100. n: "file",
  101. }, {
  102. t: FUNCTION,
  103. n: "echo",
  104. },
  105. }
  106. manager, err := NewPluginManager()
  107. if err != nil {
  108. t.Error(err)
  109. }
  110. fmt.Printf("The test bucket size is %d.\n\n", len(data))
  111. for i, p := range data {
  112. err = manager.Delete(p.t, p.n)
  113. if err != nil {
  114. t.Errorf("%d: delete error : %s\n\n", i, err)
  115. }
  116. }
  117. }
  118. func checkFile(pluginDir string, etcDir string, t PluginType, name string) error {
  119. soPath := path.Join(pluginDir, PluginTypes[t], ucFirst(name)+".so")
  120. _, err := os.Stat(soPath)
  121. if err != nil {
  122. return err
  123. }
  124. if t == SOURCE {
  125. etcPath := path.Join(etcDir, PluginTypes[t], name+".yaml")
  126. _, err = os.Stat(etcPath)
  127. if err != nil {
  128. return err
  129. }
  130. }
  131. return nil
  132. }