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