github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/daemon/logger/gelf/gelf_test.go (about)

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