129 lines
3.4 KiB
Go
129 lines
3.4 KiB
Go
|
package logging
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"os"
|
||
|
"testing"
|
||
|
|
||
|
log "github.com/hashicorp/go-hclog"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestLogger_SetupBasic(t *testing.T) {
|
||
|
cfg := NewLogConfig("test-system", log.Info, StandardFormat, t.TempDir()+"test.log")
|
||
|
|
||
|
logger, err := Setup(cfg, nil)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, logger)
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupInvalidLogLevel(t *testing.T) {
|
||
|
cfg := NewLogConfig("test-system", 999, StandardFormat, t.TempDir()+"test.log")
|
||
|
|
||
|
_, err := Setup(cfg, nil)
|
||
|
assert.Containsf(t, err.Error(), "invalid log level", "expected error %s", err)
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupLoggerErrorLevel(t *testing.T) {
|
||
|
cfg := NewLogConfig("test-system", log.Error, StandardFormat, t.TempDir()+"test.log")
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
logger, err := Setup(cfg, &buf)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, logger)
|
||
|
|
||
|
logger.Error("test error msg")
|
||
|
logger.Info("test info msg")
|
||
|
|
||
|
output := buf.String()
|
||
|
|
||
|
require.Contains(t, output, "[ERROR] test-system: test error msg")
|
||
|
require.NotContains(t, output, "[INFO] test-system: test info msg")
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupLoggerDebugLevel(t *testing.T) {
|
||
|
cfg := NewLogConfig("test-system", log.Debug, StandardFormat, t.TempDir()+"test.log")
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
logger, err := Setup(cfg, &buf)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, logger)
|
||
|
|
||
|
logger.Info("test info msg")
|
||
|
logger.Debug("test debug msg")
|
||
|
|
||
|
output := buf.String()
|
||
|
|
||
|
require.Contains(t, output, "[INFO] test-system: test info msg")
|
||
|
require.Contains(t, output, "[DEBUG] test-system: test debug msg")
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupLoggerWithName(t *testing.T) {
|
||
|
cfg := NewLogConfig("test-system", log.Debug, StandardFormat, t.TempDir()+"test.log")
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
logger, err := Setup(cfg, &buf)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, logger)
|
||
|
|
||
|
logger.Warn("test warn msg")
|
||
|
|
||
|
require.Contains(t, buf.String(), "[WARN] test-system: test warn msg")
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupLoggerWithJSON(t *testing.T) {
|
||
|
cfg := NewLogConfig("test-system", log.Debug, JSONFormat, t.TempDir()+"test.log")
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
logger, err := Setup(cfg, &buf)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, logger)
|
||
|
|
||
|
logger.Warn("test warn msg")
|
||
|
|
||
|
var jsonOutput map[string]string
|
||
|
err = json.Unmarshal(buf.Bytes(), &jsonOutput)
|
||
|
require.NoError(t, err)
|
||
|
require.Contains(t, jsonOutput, "@level")
|
||
|
require.Equal(t, jsonOutput["@level"], "warn")
|
||
|
require.Contains(t, jsonOutput, "@message")
|
||
|
require.Equal(t, jsonOutput["@message"], "test warn msg")
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupLoggerWithValidLogPath(t *testing.T) {
|
||
|
tmpDir := t.TempDir()
|
||
|
cfg := NewLogConfig("test-system", log.Info, StandardFormat, tmpDir+"/")
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
logger, err := Setup(cfg, &buf)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, logger)
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupLoggerWithInValidLogPath(t *testing.T) {
|
||
|
cfg := NewLogConfig("test-system", log.Info, StandardFormat, "nonexistentdir/")
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
logger, err := Setup(cfg, &buf)
|
||
|
require.Error(t, err)
|
||
|
require.True(t, errors.Is(err, os.ErrNotExist))
|
||
|
require.Nil(t, logger)
|
||
|
}
|
||
|
|
||
|
func TestLogger_SetupLoggerWithInValidLogPathPermission(t *testing.T) {
|
||
|
tmpDir := "/tmp/" + t.Name()
|
||
|
|
||
|
os.Mkdir(tmpDir, 0o000)
|
||
|
defer os.RemoveAll(tmpDir)
|
||
|
cfg := NewLogConfig("test-system", log.Info, StandardFormat, tmpDir+"/")
|
||
|
var buf bytes.Buffer
|
||
|
|
||
|
logger, err := Setup(cfg, &buf)
|
||
|
require.Error(t, err)
|
||
|
require.True(t, errors.Is(err, os.ErrPermission))
|
||
|
require.Nil(t, logger)
|
||
|
}
|