| // +build linux |
| |
| package gelf |
| |
| import ( |
| "net" |
| "testing" |
| |
| "github.com/docker/docker/daemon/logger" |
| ) |
| |
| // Validate parseAddress |
| func TestParseAddress(t *testing.T) { |
| url, err := parseAddress("udp://127.0.0.1:12201") |
| if err != nil { |
| t.Fatal(err) |
| } |
| if url.String() != "udp://127.0.0.1:12201" { |
| t.Fatalf("Expected address udp://127.0.0.1:12201, got %s", url.String()) |
| } |
| |
| _, err = parseAddress("127.0.0.1:12201") |
| if err == nil { |
| t.Fatal("Expected error requiring protocol") |
| } |
| |
| _, err = parseAddress("http://127.0.0.1:12201") |
| if err == nil { |
| t.Fatal("Expected error restricting protocol") |
| } |
| } |
| |
| // Validate TCP options |
| func TestTCPValidateLogOpt(t *testing.T) { |
| err := ValidateLogOpt(map[string]string{ |
| "gelf-address": "tcp://127.0.0.1:12201", |
| }) |
| if err != nil { |
| t.Fatal("Expected TCP to be supported") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "tcp://127.0.0.1:12201", |
| "gelf-compression-level": "9", |
| }) |
| if err == nil { |
| t.Fatal("Expected TCP to reject compression level") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "tcp://127.0.0.1:12201", |
| "gelf-compression-type": "gzip", |
| }) |
| if err == nil { |
| t.Fatal("Expected TCP to reject compression type") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "tcp://127.0.0.1:12201", |
| "gelf-tcp-max-reconnect": "5", |
| "gelf-tcp-reconnect-delay": "10", |
| }) |
| if err != nil { |
| t.Fatal("Expected TCP reconnect to be a valid parameters") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "tcp://127.0.0.1:12201", |
| "gelf-tcp-max-reconnect": "-1", |
| "gelf-tcp-reconnect-delay": "-3", |
| }) |
| if err == nil { |
| t.Fatal("Expected negative TCP reconnect to be rejected") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "tcp://127.0.0.1:12201", |
| "gelf-tcp-max-reconnect": "invalid", |
| "gelf-tcp-reconnect-delay": "invalid", |
| }) |
| if err == nil { |
| t.Fatal("Expected TCP reconnect to be required to be an int") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "udp://127.0.0.1:12201", |
| "gelf-tcp-max-reconnect": "1", |
| "gelf-tcp-reconnect-delay": "3", |
| }) |
| if err == nil { |
| t.Fatal("Expected TCP reconnect to be invalid for UDP") |
| } |
| } |
| |
| // Validate UDP options |
| func TestUDPValidateLogOpt(t *testing.T) { |
| err := ValidateLogOpt(map[string]string{ |
| "gelf-address": "udp://127.0.0.1:12201", |
| "tag": "testtag", |
| "labels": "testlabel", |
| "env": "testenv", |
| "env-regex": "testenv-regex", |
| "gelf-compression-level": "9", |
| "gelf-compression-type": "gzip", |
| }) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "udp://127.0.0.1:12201", |
| "gelf-compression-level": "ultra", |
| "gelf-compression-type": "zlib", |
| }) |
| if err == nil { |
| t.Fatal("Expected compression level error") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "gelf-address": "udp://127.0.0.1:12201", |
| "gelf-compression-type": "rar", |
| }) |
| if err == nil { |
| t.Fatal("Expected compression type error") |
| } |
| |
| err = ValidateLogOpt(map[string]string{ |
| "invalid": "invalid", |
| }) |
| if err == nil { |
| t.Fatal("Expected unknown option error") |
| } |
| |
| err = ValidateLogOpt(map[string]string{}) |
| if err == nil { |
| t.Fatal("Expected required parameter error") |
| } |
| } |
| |
| // Validate newGELFTCPWriter |
| func TestNewGELFTCPWriter(t *testing.T) { |
| address := "127.0.0.1:0" |
| tcpAddr, err := net.ResolveTCPAddr("tcp", address) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| listener, err := net.ListenTCP("tcp", tcpAddr) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| url := "tcp://" + listener.Addr().String() |
| info := logger.Info{ |
| Config: map[string]string{ |
| "gelf-address": url, |
| "gelf-tcp-max-reconnect": "0", |
| "gelf-tcp-reconnect-delay": "0", |
| "tag": "{{.ID}}", |
| }, |
| ContainerID: "12345678901234567890", |
| } |
| |
| writer, err := newGELFTCPWriter(listener.Addr().String(), info) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = writer.Close() |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = listener.Close() |
| if err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| // Validate newGELFUDPWriter |
| func TestNewGELFUDPWriter(t *testing.T) { |
| address := "127.0.0.1:0" |
| info := logger.Info{ |
| Config: map[string]string{ |
| "gelf-address": "udp://127.0.0.1:0", |
| "gelf-compression-level": "5", |
| "gelf-compression-type": "gzip", |
| }, |
| } |
| |
| writer, err := newGELFUDPWriter(address, info) |
| if err != nil { |
| t.Fatal(err) |
| } |
| writer.Close() |
| if err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| // Validate New for TCP |
| func TestNewTCP(t *testing.T) { |
| address := "127.0.0.1:0" |
| tcpAddr, err := net.ResolveTCPAddr("tcp", address) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| listener, err := net.ListenTCP("tcp", tcpAddr) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| url := "tcp://" + listener.Addr().String() |
| info := logger.Info{ |
| Config: map[string]string{ |
| "gelf-address": url, |
| "gelf-tcp-max-reconnect": "0", |
| "gelf-tcp-reconnect-delay": "0", |
| }, |
| ContainerID: "12345678901234567890", |
| } |
| |
| logger, err := New(info) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = logger.Close() |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = listener.Close() |
| if err != nil { |
| t.Fatal(err) |
| } |
| } |
| |
| // Validate New for UDP |
| func TestNewUDP(t *testing.T) { |
| info := logger.Info{ |
| Config: map[string]string{ |
| "gelf-address": "udp://127.0.0.1:0", |
| "gelf-compression-level": "5", |
| "gelf-compression-type": "gzip", |
| }, |
| ContainerID: "12345678901234567890", |
| } |
| |
| logger, err := New(info) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| err = logger.Close() |
| if err != nil { |
| t.Fatal(err) |
| } |
| } |