databricks-cli/libs/flags/log_file_flag_test.go

127 lines
2.7 KiB
Go
Raw Normal View History

package flags
import (
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLogFileFlagDefault(t *testing.T) {
f := NewLogFileFlag()
assert.Equal(t, os.Stderr, f.Writer())
assert.Equal(t, "stderr", f.String())
}
func TestLogFileFlagSetStdout(t *testing.T) {
var err error
f := NewLogFileFlag()
err = f.Set("stdout")
require.NoError(t, err)
assert.Equal(t, os.Stdout, f.Writer())
assert.Equal(t, "stdout", f.String())
err = f.Set("STDOUT")
require.NoError(t, err)
assert.Equal(t, os.Stdout, f.Writer())
assert.Equal(t, "stdout", f.String())
}
func TestLogFileFlagSetStderr(t *testing.T) {
var err error
f := NewLogFileFlag()
err = f.Set("stderr")
require.NoError(t, err)
assert.Equal(t, os.Stderr, f.Writer())
assert.Equal(t, "stderr", f.String())
err = f.Set("STDERR")
require.NoError(t, err)
assert.Equal(t, os.Stderr, f.Writer())
assert.Equal(t, "stderr", f.String())
}
func TestLogFileFlagSetNewFile(t *testing.T) {
var err error
// Synthesize path to logfile.
dir := t.TempDir()
path := filepath.Join(dir, "logfile")
// Configure flag.
f := NewLogFileFlag()
err = f.Set(path)
require.NoError(t, err)
err = f.Open()
require.NoError(t, err)
defer f.Close()
// Writer must be the underlying file.
w := f.Writer()
file, ok := w.(*os.File)
require.True(t, ok)
assert.Equal(t, path, file.Name())
// String must be equal to the path.
assert.Equal(t, path, f.String())
}
func TestLogFileFlagSetExistingFile(t *testing.T) {
var err error
// Synthesize path to logfile.
dir := t.TempDir()
path := filepath.Join(dir, "logfile")
// Add some contents to temporary file.
file, err := os.Create(path)
require.NoError(t, err)
_, err = file.WriteString("a\n")
require.NoError(t, err)
err = file.Close()
require.NoError(t, err)
// Configure flag.
f := NewLogFileFlag()
err = f.Set(path)
require.NoError(t, err)
err = f.Open()
require.NoError(t, err)
defer f.Close()
// Writer must be the underlying file.
w := f.Writer()
file, ok := w.(*os.File)
require.True(t, ok)
assert.Equal(t, path, file.Name())
// String must be equal to the path.
assert.Equal(t, path, f.String())
// Write more contents.
_, err = w.Write([]byte("b\n"))
require.NoError(t, err)
// Verify that the contents was appended to the file.
buf, err := os.ReadFile(path)
require.NoError(t, err)
assert.Equal(t, "a\nb\n", string(buf))
}
func TestLogFileFlagSetBadPath(t *testing.T) {
var err error
// Synthesize path that doesn't exist.
dir := t.TempDir()
path := filepath.Join(dir, "invalid/logfile")
// Configure flag.
f := NewLogFileFlag()
err = f.Set(path)
require.NoError(t, err)
err = f.Open()
assert.Error(t, err)
}