This PR will allow consul to throw log error if provided
log directory has permission issues for writing or is non existent.

Signed-off-by: Deepjyoti Mondal djmdeveloper060796@gmail.com
This commit is contained in:
Deepjyoti Mondal 2020-04-19 14:44:54 +05:30
parent 7f03949424
commit 0b3af0e070
2 changed files with 67 additions and 0 deletions

View File

@ -130,6 +130,10 @@ func Setup(config *Config, ui cli.Ui) (hclog.InterceptLogger, *GatedWriter, io.W
MaxBytes: logRotateBytes, MaxBytes: logRotateBytes,
MaxFiles: config.LogRotateMaxFiles, MaxFiles: config.LogRotateMaxFiles,
} }
if err := logFile.openNew(); err != nil {
ui.Error(fmt.Sprintf("Failed to setup logging: %v", err))
return nil, nil, nil, false
}
writers = append(writers, logFile) writers = append(writers, logFile)
} }

View File

@ -2,8 +2,10 @@ package logging
import ( import (
"encoding/json" "encoding/json"
"os"
"testing" "testing"
"github.com/hashicorp/consul/sdk/testutil"
"github.com/mitchellh/cli" "github.com/mitchellh/cli"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@ -149,3 +151,64 @@ func TestLogger_SetupLoggerWithJSON(t *testing.T) {
require.Contains(jsonOutput, "@message") require.Contains(jsonOutput, "@message")
require.Equal(jsonOutput["@message"], "test warn msg") 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)
}