2c7844d220
There are a couple of things in here. First, just like auto encrypt, any Cluster.AutoConfig RPC will implicitly use the less secure RPC mechanism. This drastically modifies how the Consul Agent starts up and moves most of the responsibilities (other than signal handling) from the cli command and into the Agent.
198 lines
3.9 KiB
Go
198 lines
3.9 KiB
Go
package logging
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"errors"
|
|
"io"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/consul/sdk/testutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLogger_SetupBasic(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
cfg := &Config{
|
|
LogLevel: "INFO",
|
|
}
|
|
|
|
logger, writer, err := Setup(cfg, nil)
|
|
require.NoError(err)
|
|
require.NotNil(writer)
|
|
require.NotNil(logger)
|
|
}
|
|
|
|
func TestLogger_SetupInvalidLogLevel(t *testing.T) {
|
|
t.Parallel()
|
|
cfg := &Config{}
|
|
|
|
_, _, err := Setup(cfg, nil)
|
|
testutil.RequireErrorContains(t, err, "Invalid log level")
|
|
}
|
|
|
|
func TestLogger_SetupLoggerErrorLevel(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
cases := []struct {
|
|
desc string
|
|
before func(*Config)
|
|
}{
|
|
{
|
|
desc: "ERR log level",
|
|
before: func(cfg *Config) {
|
|
cfg.LogLevel = "ERR"
|
|
},
|
|
},
|
|
{
|
|
desc: "ERROR log level",
|
|
before: func(cfg *Config) {
|
|
cfg.LogLevel = "ERROR"
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, c := range cases {
|
|
t.Run(c.desc, func(t *testing.T) {
|
|
var cfg Config
|
|
|
|
c.before(&cfg)
|
|
require := require.New(t)
|
|
var buf bytes.Buffer
|
|
|
|
logger, _, err := Setup(&cfg, []io.Writer{&buf})
|
|
require.NoError(err)
|
|
require.NotNil(logger)
|
|
|
|
logger.Error("test error msg")
|
|
logger.Info("test info msg")
|
|
|
|
output := buf.String()
|
|
|
|
require.Contains(output, "[ERROR] test error msg")
|
|
require.NotContains(output, "[INFO] test info msg")
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLogger_SetupLoggerDebugLevel(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
cfg := &Config{
|
|
LogLevel: "DEBUG",
|
|
}
|
|
var buf bytes.Buffer
|
|
|
|
logger, _, err := Setup(cfg, []io.Writer{&buf})
|
|
require.NoError(err)
|
|
require.NotNil(logger)
|
|
|
|
logger.Info("test info msg")
|
|
logger.Debug("test debug msg")
|
|
|
|
output := buf.String()
|
|
|
|
require.Contains(output, "[INFO] test info msg")
|
|
require.Contains(output, "[DEBUG] test debug msg")
|
|
}
|
|
|
|
func TestLogger_SetupLoggerWithName(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
cfg := &Config{
|
|
LogLevel: "DEBUG",
|
|
Name: "test-system",
|
|
}
|
|
var buf bytes.Buffer
|
|
|
|
logger, _, err := Setup(cfg, []io.Writer{&buf})
|
|
require.NoError(err)
|
|
require.NotNil(logger)
|
|
|
|
logger.Warn("test warn msg")
|
|
|
|
require.Contains(buf.String(), "[WARN] test-system: test warn msg")
|
|
}
|
|
|
|
func TestLogger_SetupLoggerWithJSON(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
cfg := &Config{
|
|
LogLevel: "DEBUG",
|
|
LogJSON: true,
|
|
Name: "test-system",
|
|
}
|
|
var buf bytes.Buffer
|
|
|
|
logger, _, err := Setup(cfg, []io.Writer{&buf})
|
|
require.NoError(err)
|
|
require.NotNil(logger)
|
|
|
|
logger.Warn("test warn msg")
|
|
|
|
var jsonOutput map[string]string
|
|
err = json.Unmarshal(buf.Bytes(), &jsonOutput)
|
|
require.NoError(err)
|
|
require.Contains(jsonOutput, "@level")
|
|
require.Equal(jsonOutput["@level"], "warn")
|
|
require.Contains(jsonOutput, "@message")
|
|
require.Equal(jsonOutput["@message"], "test warn msg")
|
|
}
|
|
|
|
func TestLogger_SetupLoggerWithValidLogPath(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
|
|
tmpDir := testutil.TempDir(t, t.Name())
|
|
defer os.RemoveAll(tmpDir)
|
|
|
|
cfg := &Config{
|
|
LogLevel: "INFO",
|
|
LogFilePath: tmpDir + "/",
|
|
}
|
|
var buf bytes.Buffer
|
|
|
|
logger, _, err := Setup(cfg, []io.Writer{&buf})
|
|
require.NoError(err)
|
|
require.NotNil(logger)
|
|
}
|
|
|
|
func TestLogger_SetupLoggerWithInValidLogPath(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
|
|
cfg := &Config{
|
|
LogLevel: "INFO",
|
|
LogFilePath: "nonexistentdir/",
|
|
}
|
|
var buf bytes.Buffer
|
|
|
|
logger, _, err := Setup(cfg, []io.Writer{&buf})
|
|
require.Error(err)
|
|
require.True(errors.Is(err, os.ErrNotExist))
|
|
require.Nil(logger)
|
|
}
|
|
|
|
func TestLogger_SetupLoggerWithInValidLogPathPermission(t *testing.T) {
|
|
t.Parallel()
|
|
require := require.New(t)
|
|
|
|
tmpDir := "/tmp/" + t.Name()
|
|
|
|
os.Mkdir(tmpDir, 0000)
|
|
defer os.RemoveAll(tmpDir)
|
|
|
|
cfg := &Config{
|
|
LogLevel: "INFO",
|
|
LogFilePath: tmpDir + "/",
|
|
}
|
|
var buf bytes.Buffer
|
|
|
|
logger, _, err := Setup(cfg, []io.Writer{&buf})
|
|
require.Error(err)
|
|
require.True(errors.Is(err, os.ErrPermission))
|
|
require.Nil(logger)
|
|
}
|