mirror of https://github.com/hashicorp/consul
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
4.4 KiB
214 lines
4.4 KiB
package logging |
|
|
|
import ( |
|
"encoding/json" |
|
"os" |
|
"testing" |
|
|
|
"github.com/hashicorp/consul/sdk/testutil" |
|
"github.com/mitchellh/cli" |
|
"github.com/stretchr/testify/require" |
|
) |
|
|
|
func TestLogger_SetupBasic(t *testing.T) { |
|
t.Parallel() |
|
require := require.New(t) |
|
cfg := &Config{ |
|
LogLevel: "INFO", |
|
} |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, writer, ok := Setup(cfg, ui) |
|
require.True(ok) |
|
require.NotNil(gatedWriter) |
|
require.NotNil(writer) |
|
require.NotNil(logger) |
|
} |
|
|
|
func TestLogger_SetupInvalidLogLevel(t *testing.T) { |
|
t.Parallel() |
|
require := require.New(t) |
|
cfg := &Config{} |
|
ui := cli.NewMockUi() |
|
|
|
_, _, _, ok := Setup(cfg, ui) |
|
require.False(ok) |
|
require.Contains(ui.ErrorWriter.String(), "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) |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, _, ok := Setup(&cfg, ui) |
|
require.True(ok) |
|
require.NotNil(logger) |
|
require.NotNil(gatedWriter) |
|
|
|
gatedWriter.Flush() |
|
|
|
logger.Error("test error msg") |
|
logger.Info("test info msg") |
|
|
|
require.Contains(ui.OutputWriter.String(), "[ERROR] test error msg") |
|
require.NotContains(ui.OutputWriter.String(), "[INFO] test info msg") |
|
}) |
|
} |
|
} |
|
|
|
func TestLogger_SetupLoggerDebugLevel(t *testing.T) { |
|
t.Parallel() |
|
require := require.New(t) |
|
cfg := &Config{ |
|
LogLevel: "DEBUG", |
|
} |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, _, ok := Setup(cfg, ui) |
|
require.True(ok) |
|
require.NotNil(logger) |
|
require.NotNil(gatedWriter) |
|
|
|
gatedWriter.Flush() |
|
|
|
logger.Info("test info msg") |
|
logger.Debug("test debug msg") |
|
|
|
require.Contains(ui.OutputWriter.String(), "[INFO] test info msg") |
|
require.Contains(ui.OutputWriter.String(), "[DEBUG] test debug msg") |
|
} |
|
|
|
func TestLogger_SetupLoggerWithName(t *testing.T) { |
|
t.Parallel() |
|
require := require.New(t) |
|
cfg := &Config{ |
|
LogLevel: "DEBUG", |
|
Name: "test-system", |
|
} |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, _, ok := Setup(cfg, ui) |
|
require.True(ok) |
|
require.NotNil(logger) |
|
require.NotNil(gatedWriter) |
|
|
|
gatedWriter.Flush() |
|
|
|
logger.Warn("test warn msg") |
|
|
|
require.Contains(ui.OutputWriter.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", |
|
} |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, _, ok := Setup(cfg, ui) |
|
require.True(ok) |
|
require.NotNil(logger) |
|
require.NotNil(gatedWriter) |
|
|
|
gatedWriter.Flush() |
|
|
|
logger.Warn("test warn msg") |
|
|
|
var jsonOutput map[string]string |
|
err := json.Unmarshal(ui.OutputWriter.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 + "/", |
|
} |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, writer, ok := Setup(cfg, ui) |
|
require.True(ok) |
|
require.NotNil(logger) |
|
require.NotNil(gatedWriter) |
|
require.NotNil(writer) |
|
} |
|
|
|
func TestLogger_SetupLoggerWithInValidLogPath(t *testing.T) { |
|
t.Parallel() |
|
require := require.New(t) |
|
|
|
cfg := &Config{ |
|
LogLevel: "INFO", |
|
LogFilePath: "nonexistentdir/", |
|
} |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, writer, ok := Setup(cfg, ui) |
|
require.Contains(ui.ErrorWriter.String(), "no such file or directory") |
|
require.False(ok) |
|
require.Nil(logger) |
|
require.Nil(gatedWriter) |
|
require.Nil(writer) |
|
} |
|
|
|
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 + "/", |
|
} |
|
ui := cli.NewMockUi() |
|
|
|
logger, gatedWriter, writer, ok := Setup(cfg, ui) |
|
require.Contains(ui.ErrorWriter.String(), "permission denied") |
|
require.False(ok) |
|
require.Nil(logger) |
|
require.Nil(gatedWriter) |
|
require.Nil(writer) |
|
}
|
|
|