code.gitea.io/gitea@v1.22.3/modules/log/event_writer_conn_test.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package log
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  	"io"
    10  	"net"
    11  	"strings"
    12  	"sync"
    13  	"testing"
    14  	"time"
    15  
    16  	"github.com/stretchr/testify/assert"
    17  )
    18  
    19  func listenReadAndClose(t *testing.T, l net.Listener, expected string) {
    20  	conn, err := l.Accept()
    21  	assert.NoError(t, err)
    22  	defer conn.Close()
    23  	written, err := io.ReadAll(conn)
    24  
    25  	assert.NoError(t, err)
    26  	assert.Equal(t, expected, string(written))
    27  }
    28  
    29  func TestConnLogger(t *testing.T) {
    30  	protocol := "tcp"
    31  	address := ":3099"
    32  
    33  	l, err := net.Listen(protocol, address)
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  	defer l.Close()
    38  
    39  	prefix := "TestPrefix "
    40  	level := INFO
    41  	flags := LstdFlags | LUTC | Lfuncname
    42  
    43  	logger := NewLoggerWithWriters(context.Background(), "test", NewEventWriterConn("test-conn", WriterMode{
    44  		Level:        level,
    45  		Prefix:       prefix,
    46  		Flags:        FlagsFromBits(flags),
    47  		WriterOption: WriterConnOption{Addr: address, Protocol: protocol, Reconnect: true, ReconnectOnMsg: true},
    48  	}))
    49  
    50  	location, _ := time.LoadLocation("EST")
    51  
    52  	date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location)
    53  
    54  	dateString := date.UTC().Format("2006/01/02 15:04:05")
    55  
    56  	event := Event{
    57  		Level:         INFO,
    58  		MsgSimpleText: "TEST MSG",
    59  		Caller:        "CALLER",
    60  		Filename:      "FULL/FILENAME",
    61  		Line:          1,
    62  		Time:          date,
    63  	}
    64  	expected := fmt.Sprintf("%s%s %s:%d:%s [%c] %s\n", prefix, dateString, event.Filename, event.Line, event.Caller, strings.ToUpper(event.Level.String())[0], event.MsgSimpleText)
    65  	var wg sync.WaitGroup
    66  	wg.Add(1)
    67  	go func() {
    68  		defer wg.Done()
    69  		listenReadAndClose(t, l, expected)
    70  	}()
    71  	logger.SendLogEvent(&event)
    72  	wg.Wait()
    73  
    74  	logger.Close()
    75  }