gelf_test.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. //go:build linux
  2. package gelf // import "github.com/docker/docker/daemon/logger/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. "labels-regex": "testlabel-regex",
  88. "env": "testenv",
  89. "env-regex": "testenv-regex",
  90. "gelf-compression-level": "9",
  91. "gelf-compression-type": "gzip",
  92. })
  93. if err != nil {
  94. t.Fatal(err)
  95. }
  96. err = ValidateLogOpt(map[string]string{
  97. "gelf-address": "udp://127.0.0.1:12201",
  98. "gelf-compression-level": "ultra",
  99. "gelf-compression-type": "zlib",
  100. })
  101. if err == nil {
  102. t.Fatal("Expected compression level error")
  103. }
  104. err = ValidateLogOpt(map[string]string{
  105. "gelf-address": "udp://127.0.0.1:12201",
  106. "gelf-compression-type": "rar",
  107. })
  108. if err == nil {
  109. t.Fatal("Expected compression type error")
  110. }
  111. err = ValidateLogOpt(map[string]string{
  112. "invalid": "invalid",
  113. })
  114. if err == nil {
  115. t.Fatal("Expected unknown option error")
  116. }
  117. err = ValidateLogOpt(map[string]string{})
  118. if err == nil {
  119. t.Fatal("Expected required parameter error")
  120. }
  121. }
  122. // Validate newGELFTCPWriter
  123. func TestNewGELFTCPWriter(t *testing.T) {
  124. address := "127.0.0.1:0"
  125. tcpAddr, err := net.ResolveTCPAddr("tcp", address)
  126. if err != nil {
  127. t.Fatal(err)
  128. }
  129. listener, err := net.ListenTCP("tcp", tcpAddr)
  130. if err != nil {
  131. t.Fatal(err)
  132. }
  133. url := "tcp://" + listener.Addr().String()
  134. info := logger.Info{
  135. Config: map[string]string{
  136. "gelf-address": url,
  137. "gelf-tcp-max-reconnect": "0",
  138. "gelf-tcp-reconnect-delay": "0",
  139. "tag": "{{.ID}}",
  140. },
  141. ContainerID: "12345678901234567890",
  142. }
  143. writer, err := newGELFTCPWriter(listener.Addr().String(), info)
  144. if err != nil {
  145. t.Fatal(err)
  146. }
  147. err = writer.Close()
  148. if err != nil {
  149. t.Fatal(err)
  150. }
  151. err = listener.Close()
  152. if err != nil {
  153. t.Fatal(err)
  154. }
  155. }
  156. // Validate newGELFUDPWriter
  157. func TestNewGELFUDPWriter(t *testing.T) {
  158. address := "127.0.0.1:0"
  159. info := logger.Info{
  160. Config: map[string]string{
  161. "gelf-address": "udp://127.0.0.1:0",
  162. "gelf-compression-level": "5",
  163. "gelf-compression-type": "gzip",
  164. },
  165. }
  166. writer, err := newGELFUDPWriter(address, info)
  167. if err != nil {
  168. t.Fatal(err)
  169. }
  170. writer.Close()
  171. if err != nil {
  172. t.Fatal(err)
  173. }
  174. }
  175. // Validate New for TCP
  176. func TestNewTCP(t *testing.T) {
  177. address := "127.0.0.1:0"
  178. tcpAddr, err := net.ResolveTCPAddr("tcp", address)
  179. if err != nil {
  180. t.Fatal(err)
  181. }
  182. listener, err := net.ListenTCP("tcp", tcpAddr)
  183. if err != nil {
  184. t.Fatal(err)
  185. }
  186. url := "tcp://" + listener.Addr().String()
  187. info := logger.Info{
  188. Config: map[string]string{
  189. "gelf-address": url,
  190. "gelf-tcp-max-reconnect": "0",
  191. "gelf-tcp-reconnect-delay": "0",
  192. },
  193. ContainerID: "12345678901234567890",
  194. }
  195. gelfLogger, err := New(info)
  196. if err != nil {
  197. t.Fatal(err)
  198. }
  199. err = gelfLogger.Close()
  200. if err != nil {
  201. t.Fatal(err)
  202. }
  203. err = listener.Close()
  204. if err != nil {
  205. t.Fatal(err)
  206. }
  207. }
  208. // Validate New for UDP
  209. func TestNewUDP(t *testing.T) {
  210. info := logger.Info{
  211. Config: map[string]string{
  212. "gelf-address": "udp://127.0.0.1:0",
  213. "gelf-compression-level": "5",
  214. "gelf-compression-type": "gzip",
  215. },
  216. ContainerID: "12345678901234567890",
  217. }
  218. gelfLogger, err := New(info)
  219. if err != nil {
  220. t.Fatal(err)
  221. }
  222. err = gelfLogger.Close()
  223. if err != nil {
  224. t.Fatal(err)
  225. }
  226. }