code.gitea.io/gitea@v1.19.3/modules/log/smtp_test.go (about)

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package log
     5  
     6  import (
     7  	"fmt"
     8  	"net/smtp"
     9  	"strings"
    10  	"testing"
    11  	"time"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func TestSMTPLogger(t *testing.T) {
    17  	prefix := "TestPrefix "
    18  	level := INFO
    19  	flags := LstdFlags | LUTC | Lfuncname
    20  	username := "testuser"
    21  	password := "testpassword"
    22  	host := "testhost"
    23  	subject := "testsubject"
    24  	sendTos := []string{"testto1", "testto2"}
    25  
    26  	logger := NewSMTPLogger()
    27  	smtpLogger, ok := logger.(*SMTPLogger)
    28  	assert.True(t, ok)
    29  
    30  	err := logger.Init(fmt.Sprintf("{\"prefix\":\"%s\",\"level\":\"%s\",\"flags\":%d,\"username\":\"%s\",\"password\":\"%s\",\"host\":\"%s\",\"subject\":\"%s\",\"sendTos\":[\"%s\",\"%s\"]}", prefix, level.String(), flags, username, password, host, subject, sendTos[0], sendTos[1]))
    31  	assert.NoError(t, err)
    32  
    33  	assert.Equal(t, flags, smtpLogger.Flags)
    34  	assert.Equal(t, level, smtpLogger.Level)
    35  	assert.Equal(t, level, logger.GetLevel())
    36  
    37  	location, _ := time.LoadLocation("EST")
    38  
    39  	date := time.Date(2019, time.January, 13, 22, 3, 30, 15, location)
    40  
    41  	dateString := date.UTC().Format("2006/01/02 15:04:05")
    42  
    43  	event := Event{
    44  		level:    INFO,
    45  		msg:      "TEST MSG",
    46  		caller:   "CALLER",
    47  		filename: "FULL/FILENAME",
    48  		line:     1,
    49  		time:     date,
    50  	}
    51  
    52  	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.msg)
    53  
    54  	var envToHost string
    55  	var envFrom string
    56  	var envTo []string
    57  	var envMsg []byte
    58  	smtpLogger.sendMailFn = func(addr string, a smtp.Auth, from string, to []string, msg []byte) error {
    59  		envToHost = addr
    60  		envFrom = from
    61  		envTo = to
    62  		envMsg = msg
    63  		return nil
    64  	}
    65  
    66  	err = logger.LogEvent(&event)
    67  	assert.NoError(t, err)
    68  	assert.Equal(t, host, envToHost)
    69  	assert.Equal(t, username, envFrom)
    70  	assert.Equal(t, sendTos, envTo)
    71  	assert.Contains(t, string(envMsg), expected)
    72  
    73  	logger.Flush()
    74  
    75  	event.level = WARN
    76  	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.msg)
    77  	err = logger.LogEvent(&event)
    78  	assert.NoError(t, err)
    79  	assert.Equal(t, host, envToHost)
    80  	assert.Equal(t, username, envFrom)
    81  	assert.Equal(t, sendTos, envTo)
    82  	assert.Contains(t, string(envMsg), expected)
    83  
    84  	logger.Close()
    85  }