stonelog/log_test.go
Rene Nochebuena d126d4ef7a
Some checks failed
Go CI/CD / go-ci (push) Has been cancelled
Add tests for panic and fatal log handling
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.
2025-04-10 10:48:34 -06:00

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())
}
}
}