github.com/LazyboyChen7/engine@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  }