api_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. package guerrilla
  2. import (
  3. "github.com/flashmob/go-guerrilla/backends"
  4. "github.com/flashmob/go-guerrilla/log"
  5. "io/ioutil"
  6. "testing"
  7. "time"
  8. )
  9. // Test Starting smtp without setting up logger / backend
  10. func TestSMTP(t *testing.T) {
  11. d := Daemon{}
  12. err := d.Start()
  13. if err != nil {
  14. t.Error(err)
  15. }
  16. // it should set to stderr automatically
  17. if d.Config.LogFile != log.OutputStderr.String() {
  18. t.Error("smtp.config.LogFile is not", log.OutputStderr.String())
  19. }
  20. if len(d.Config.AllowedHosts) == 0 {
  21. t.Error("smtp.config.AllowedHosts len should be 1, not 0", d.Config.AllowedHosts)
  22. }
  23. if d.Config.LogLevel != "debug" {
  24. t.Error("smtp.config.LogLevel expected'debug', it is", d.Config.LogLevel)
  25. }
  26. if len(d.Config.Servers) != 1 {
  27. t.Error("len(smtp.config.Servers) should be 1, got", len(d.Config.Servers))
  28. }
  29. time.Sleep(time.Second * 2)
  30. d.Shutdown()
  31. }
  32. // Suppressing log output
  33. func TestSMTPNoLog(t *testing.T) {
  34. // configure a default server with no log output
  35. cfg := &AppConfig{LogFile: log.OutputOff.String()}
  36. smtp := Daemon{Config: cfg}
  37. err := smtp.Start()
  38. if err != nil {
  39. t.Error(err)
  40. }
  41. time.Sleep(time.Second * 2)
  42. smtp.Shutdown()
  43. }
  44. // our custom server
  45. func TestSMTPCustomServer(t *testing.T) {
  46. cfg := &AppConfig{LogFile: log.OutputStdout.String()}
  47. sc := ServerConfig{
  48. ListenInterface: "127.0.0.1:2526",
  49. IsEnabled: true,
  50. }
  51. cfg.Servers = append(cfg.Servers, sc)
  52. smtp := Daemon{Config: cfg}
  53. err := smtp.Start()
  54. if err != nil {
  55. t.Error("start error", err)
  56. } else {
  57. time.Sleep(time.Second * 2)
  58. smtp.Shutdown()
  59. }
  60. }
  61. // with a backend config
  62. func TestSMTPCustomBackend(t *testing.T) {
  63. cfg := &AppConfig{LogFile: log.OutputStdout.String()}
  64. sc := ServerConfig{
  65. ListenInterface: "127.0.0.1:2526",
  66. IsEnabled: true,
  67. }
  68. cfg.Servers = append(cfg.Servers, sc)
  69. bcfg := backends.BackendConfig{
  70. "save_workers_size": 3,
  71. "process_stack": "HeadersParser|Header|Hasher|Debugger",
  72. "log_received_mails": true,
  73. "primary_mail_host": "example.com",
  74. }
  75. cfg.BackendConfig = bcfg
  76. d := Daemon{Config: cfg}
  77. err := d.Start()
  78. if err != nil {
  79. t.Error("start error", err)
  80. } else {
  81. time.Sleep(time.Second * 2)
  82. d.Shutdown()
  83. }
  84. }
  85. // with a config from a json file
  86. func TestSMTPLoadFile(t *testing.T) {
  87. json := `{
  88. "log_file" : "./tests/testlog",
  89. "log_level" : "debug",
  90. "pid_file" : "tests/go-guerrilla.pid",
  91. "allowed_hosts": ["spam4.me","grr.la"],
  92. "backend_config" :
  93. {
  94. "log_received_mails" : true,
  95. "process_stack": "HeadersParser|Header|Hasher|Debugger",
  96. "save_workers_size": 3
  97. },
  98. "servers" : [
  99. {
  100. "is_enabled" : true,
  101. "host_name":"mail.guerrillamail.com",
  102. "max_size": 100017,
  103. "private_key_file":"config_test.go",
  104. "public_key_file":"config_test.go",
  105. "timeout":160,
  106. "listen_interface":"127.0.0.1:2526",
  107. "start_tls_on":false,
  108. "tls_always_on":false,
  109. "max_clients": 2
  110. }
  111. ]
  112. }
  113. `
  114. json2 := `{
  115. "log_file" : "./tests/testlog2",
  116. "log_level" : "debug",
  117. "pid_file" : "tests/go-guerrilla2.pid",
  118. "allowed_hosts": ["spam4.me","grr.la"],
  119. "backend_config" :
  120. {
  121. "log_received_mails" : true,
  122. "process_stack": "HeadersParser|Header|Hasher|Debugger",
  123. "save_workers_size": 3
  124. },
  125. "servers" : [
  126. {
  127. "is_enabled" : true,
  128. "host_name":"mail.guerrillamail.com",
  129. "max_size": 100017,
  130. "private_key_file":"config_test.go",
  131. "public_key_file":"config_test.go",
  132. "timeout":160,
  133. "listen_interface":"127.0.0.1:2526",
  134. "start_tls_on":false,
  135. "tls_always_on":false,
  136. "max_clients": 2
  137. }
  138. ]
  139. }
  140. `
  141. err := ioutil.WriteFile("goguerrilla.conf.api", []byte(json), 0644)
  142. if err != nil {
  143. t.Error("could not write guerrilla.conf.api", err)
  144. return
  145. }
  146. d := Daemon{}
  147. err = d.ReadConfig("goguerrilla.conf.api")
  148. if err != nil {
  149. t.Error("ReadConfig error", err)
  150. return
  151. }
  152. err = d.Start()
  153. if err != nil {
  154. t.Error("start error", err)
  155. return
  156. } else {
  157. time.Sleep(time.Second * 2)
  158. if d.Config.LogFile != "./tests/testlog" {
  159. t.Error("d.Config.LogFile != \"./tests/testlog\"")
  160. }
  161. if d.Config.PidFile != "tests/go-guerrilla.pid" {
  162. t.Error("d.Config.LogFile != tests/go-guerrilla.pid")
  163. }
  164. err := ioutil.WriteFile("goguerrilla.conf.api", []byte(json2), 0644)
  165. if err != nil {
  166. t.Error("could not write guerrilla.conf.api", err)
  167. return
  168. }
  169. d.ReloadConfigFile("goguerrilla.conf.api")
  170. if d.Config.LogFile != "./tests/testlog2" {
  171. t.Error("d.Config.LogFile != \"./tests/testlog\"")
  172. }
  173. if d.Config.PidFile != "tests/go-guerrilla2.pid" {
  174. t.Error("d.Config.LogFile != \"go-guerrilla.pid\"")
  175. }
  176. d.Shutdown()
  177. }
  178. }