gelf_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. // +build linux
  2. package gelf
  3. import (
  4. "net"
  5. "testing"
  6. "github.com/docker/docker/daemon/logger"
  7. )
  8. // Validate parseAddress
  9. func TestParseAddress(t *testing.T) {
  10. url, err := parseAddress("udp://127.0.0.1:12201")
  11. if err != nil {
  12. t.Fatal(err)
  13. }
  14. if url.String() != "udp://127.0.0.1:12201" {
  15. t.Fatalf("Expected address udp://127.0.0.1:12201, got %s", url.String())
  16. }
  17. _, err = parseAddress("127.0.0.1:12201")
  18. if err == nil {
  19. t.Fatal("Expected error requiring protocol")
  20. }
  21. _, err = parseAddress("http://127.0.0.1:12201")
  22. if err == nil {
  23. t.Fatal("Expected error restricting protocol")
  24. }
  25. }
  26. // Validate TCP options
  27. func TestTCPValidateLogOpt(t *testing.T) {
  28. err := ValidateLogOpt(map[string]string{
  29. "gelf-address": "tcp://127.0.0.1:12201",
  30. })
  31. if err != nil {
  32. t.Fatal("Expected TCP to be supported")
  33. }
  34. err = ValidateLogOpt(map[string]string{
  35. "gelf-address": "tcp://127.0.0.1:12201",
  36. "gelf-compression-level": "9",
  37. })
  38. if err == nil {
  39. t.Fatal("Expected TCP to reject compression level")
  40. }
  41. err = ValidateLogOpt(map[string]string{
  42. "gelf-address": "tcp://127.0.0.1:12201",
  43. "gelf-compression-type": "gzip",
  44. })
  45. if err == nil {
  46. t.Fatal("Expected TCP to reject compression type")
  47. }
  48. err = ValidateLogOpt(map[string]string{
  49. "gelf-address": "tcp://127.0.0.1:12201",
  50. "gelf-tcp-max-reconnect": "5",
  51. "gelf-tcp-reconnect-delay": "10",
  52. })
  53. if err != nil {
  54. t.Fatal("Expected TCP reconnect to be a valid parameters")
  55. }
  56. err = ValidateLogOpt(map[string]string{
  57. "gelf-address": "tcp://127.0.0.1:12201",
  58. "gelf-tcp-max-reconnect": "-1",
  59. "gelf-tcp-reconnect-delay": "-3",
  60. })
  61. if err == nil {
  62. t.Fatal("Expected negative TCP reconnect to be rejected")
  63. }
  64. err = ValidateLogOpt(map[string]string{
  65. "gelf-address": "tcp://127.0.0.1:12201",
  66. "gelf-tcp-max-reconnect": "invalid",
  67. "gelf-tcp-reconnect-delay": "invalid",
  68. })
  69. if err == nil {
  70. t.Fatal("Expected TCP reconnect to be required to be an int")
  71. }
  72. err = ValidateLogOpt(map[string]string{
  73. "gelf-address": "udp://127.0.0.1:12201",
  74. "gelf-tcp-max-reconnect": "1",
  75. "gelf-tcp-reconnect-delay": "3",
  76. })
  77. if err == nil {
  78. t.Fatal("Expected TCP reconnect to be invalid for UDP")
  79. }
  80. }
  81. // Validate UDP options
  82. func TestUDPValidateLogOpt(t *testing.T) {
  83. err := ValidateLogOpt(map[string]string{
  84. "gelf-address": "udp://127.0.0.1:12201",
  85. "tag": "testtag",
  86. "labels": "testlabel",
  87. "env": "testenv",
  88. "env-regex": "testenv-regex",
  89. "gelf-compression-level": "9",
  90. "gelf-compression-type": "gzip",
  91. })
  92. if err != nil {
  93. t.Fatal(err)
  94. }
  95. err = ValidateLogOpt(map[string]string{
  96. "gelf-address": "udp://127.0.0.1:12201",
  97. "gelf-compression-level": "ultra",
  98. "gelf-compression-type": "zlib",
  99. })
  100. if err == nil {
  101. t.Fatal("Expected compression level error")
  102. }
  103. err = ValidateLogOpt(map[string]string{
  104. "gelf-address": "udp://127.0.0.1:12201",
  105. "gelf-compression-type": "rar",
  106. })
  107. if err == nil {
  108. t.Fatal("Expected compression type error")
  109. }
  110. err = ValidateLogOpt(map[string]string{
  111. "invalid": "invalid",
  112. })
  113. if err == nil {
  114. t.Fatal("Expected unknown option error")
  115. }
  116. err = ValidateLogOpt(map[string]string{})
  117. if err == nil {
  118. t.Fatal("Expected required parameter error")
  119. }
  120. }
  121. // Validate newGELFTCPWriter
  122. func TestNewGELFTCPWriter(t *testing.T) {
  123. address := "127.0.0.1:0"
  124. tcpAddr, err := net.ResolveTCPAddr("tcp", address)
  125. if err != nil {
  126. t.Fatal(err)
  127. }
  128. listener, err := net.ListenTCP("tcp", tcpAddr)
  129. if err != nil {
  130. t.Fatal(err)
  131. }
  132. url := "tcp://" + listener.Addr().String()
  133. info := logger.Info{
  134. Config: map[string]string{
  135. "gelf-address": url,
  136. "gelf-tcp-max-reconnect": "0",
  137. "gelf-tcp-reconnect-delay": "0",
  138. "tag": "{{.ID}}",
  139. },
  140. ContainerID: "12345678901234567890",
  141. }
  142. writer, err := newGELFTCPWriter(listener.Addr().String(), info)
  143. if err != nil {
  144. t.Fatal(err)
  145. }
  146. err = writer.Close()
  147. if err != nil {
  148. t.Fatal(err)
  149. }
  150. err = listener.Close()
  151. if err != nil {
  152. t.Fatal(err)
  153. }
  154. }
  155. // Validate newGELFUDPWriter
  156. func TestNewGELFUDPWriter(t *testing.T) {
  157. address := "127.0.0.1:0"
  158. info := logger.Info{
  159. Config: map[string]string{
  160. "gelf-address": "udp://127.0.0.1:0",
  161. "gelf-compression-level": "5",
  162. "gelf-compression-type": "gzip",
  163. },
  164. }
  165. writer, err := newGELFUDPWriter(address, info)
  166. if err != nil {
  167. t.Fatal(err)
  168. }
  169. writer.Close()
  170. if err != nil {
  171. t.Fatal(err)
  172. }
  173. }
  174. // Validate New for TCP
  175. func TestNewTCP(t *testing.T) {
  176. address := "127.0.0.1:0"
  177. tcpAddr, err := net.ResolveTCPAddr("tcp", address)
  178. if err != nil {
  179. t.Fatal(err)
  180. }
  181. listener, err := net.ListenTCP("tcp", tcpAddr)
  182. if err != nil {
  183. t.Fatal(err)
  184. }
  185. url := "tcp://" + listener.Addr().String()
  186. info := logger.Info{
  187. Config: map[string]string{
  188. "gelf-address": url,
  189. "gelf-tcp-max-reconnect": "0",
  190. "gelf-tcp-reconnect-delay": "0",
  191. },
  192. ContainerID: "12345678901234567890",
  193. }
  194. logger, err := New(info)
  195. if err != nil {
  196. t.Fatal(err)
  197. }
  198. err = logger.Close()
  199. if err != nil {
  200. t.Fatal(err)
  201. }
  202. err = listener.Close()
  203. if err != nil {
  204. t.Fatal(err)
  205. }
  206. }
  207. // Validate New for UDP
  208. func TestNewUDP(t *testing.T) {
  209. info := logger.Info{
  210. Config: map[string]string{
  211. "gelf-address": "udp://127.0.0.1:0",
  212. "gelf-compression-level": "5",
  213. "gelf-compression-type": "gzip",
  214. },
  215. ContainerID: "12345678901234567890",
  216. }
  217. logger, err := New(info)
  218. if err != nil {
  219. t.Fatal(err)
  220. }
  221. err = logger.Close()
  222. if err != nil {
  223. t.Fatal(err)
  224. }
  225. }