Some checks failed
Go CI/CD / go-ci (push) Has been cancelled
Introduce tests for handling panic and fatal log scenarios, including recovery from panics and execution of external processes to test fatal behavior. Adjusted logging levels and prefixes to ensure consistency for PANIC logs.
115 lines
2.3 KiB
Go
115 lines
2.3 KiB
Go
package stonelog
|
|
|
|
import (
|
|
"errors"
|
|
"os/exec"
|
|
"testing"
|
|
)
|
|
|
|
func Test_LogLevelString(t *testing.T) {
|
|
levelTests := []struct {
|
|
level StoneLevel
|
|
expected string
|
|
}{
|
|
{TRACE, "TRACE"},
|
|
{DEBUG, "DEBUG"},
|
|
{INFO, "INFO"},
|
|
{WARN, "WARN"},
|
|
{ERROR, "ERROR"},
|
|
{FATAL, "FATAL"},
|
|
{PANIC, "PANIC"},
|
|
}
|
|
|
|
for _, tt := range levelTests {
|
|
if tt.level.String() != tt.expected {
|
|
t.Errorf("Expected %s, got %s", tt.expected, tt.level.String())
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_LogLevelColor(t *testing.T) {
|
|
levelTests := []struct {
|
|
level StoneLevel
|
|
expected string
|
|
}{
|
|
{TRACE, colorWhite},
|
|
{DEBUG, colorCyan},
|
|
{INFO, colorGreen},
|
|
{WARN, colorYellow},
|
|
{ERROR, colorRed},
|
|
{FATAL, colorMagenta},
|
|
{PANIC, colorRed + "\033[1m"},
|
|
}
|
|
|
|
for _, tt := range levelTests {
|
|
if tt.level.Color() != tt.expected {
|
|
t.Errorf("Expected %s, got %s", tt.expected, tt.level.Color())
|
|
}
|
|
}
|
|
}
|
|
|
|
func Test_JSONLogs(t *testing.T) {
|
|
InitStoneLog(TRACE, true, false)
|
|
Trace("This is a trace log")
|
|
Debug("This is a debug log")
|
|
Observation("This is an observation log")
|
|
Hypothesis("This is a hypothesis log")
|
|
Failure("This is a failure log")
|
|
|
|
SetLogLevel(INFO)
|
|
}
|
|
|
|
func Test_PlainTextLogs(t *testing.T) {
|
|
InitStoneLog(TRACE, false, false)
|
|
Trace("This is a trace log")
|
|
Debug("This is a debug log")
|
|
Observation("This is an observation log")
|
|
Hypothesis("This is a hypothesis log")
|
|
Failure("This is a failure log")
|
|
|
|
SetLogLevel(INFO)
|
|
}
|
|
|
|
func Test_MutedPlainTextLogs(t *testing.T) {
|
|
InitStoneLog(ERROR, false, true)
|
|
|
|
// This won't change the log level
|
|
SetLogLevel(-1)
|
|
|
|
// Following won't appear
|
|
Trace("This is a trace log")
|
|
Debug("This is a debug log")
|
|
Observation("This is an observation log")
|
|
Hypothesis("This is a hypothesis log")
|
|
|
|
// Until this one
|
|
Failure("This is a failure log")
|
|
}
|
|
|
|
func Test_PanicPlainTextLogs(t *testing.T) {
|
|
defer func() {
|
|
if r := recover(); r != nil {
|
|
Observation("Recovered from panic: %v", r)
|
|
}
|
|
}()
|
|
|
|
InitStoneLog(TRACE, false, true)
|
|
Panic("This is a panic log")
|
|
}
|
|
|
|
func Test_FatalPlainTextLogs(t *testing.T) {
|
|
cmd := exec.Command(
|
|
"go", "run", "./test/main.go",
|
|
)
|
|
cmd.Env = append(cmd.Env, "TEST_FATAL=1")
|
|
|
|
err := cmd.Run()
|
|
|
|
var exitErr *exec.ExitError
|
|
if errors.As(err, &exitErr) {
|
|
if exitErr.ExitCode() != 1 {
|
|
t.Errorf("Expected exit code 1, got %d", exitErr.ExitCode())
|
|
}
|
|
}
|
|
}
|