Add tests for panic and fatal log handling
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.
This commit is contained in:
Rene Nochebuena 2025-04-10 10:48:34 -06:00
parent b7202bc141
commit d126d4ef7a
Signed by: Rene Nochebuena
GPG Key ID: A9FD83117EA538D8
3 changed files with 52 additions and 8 deletions

1
log.go
View File

@ -223,6 +223,7 @@ func getRandomPrefix(level StoneLevel) string {
WARN: stoneWarnPrefixes, WARN: stoneWarnPrefixes,
ERROR: stoneErrorPrefixes, ERROR: stoneErrorPrefixes,
FATAL: stonePanicPrefixes, FATAL: stonePanicPrefixes,
PANIC: stonePanicPrefixes,
} }
prefixes := prefixMap[level] prefixes := prefixMap[level]

View File

@ -1,6 +1,8 @@
package stonelog package stonelog
import ( import (
"errors"
"os/exec"
"testing" "testing"
) )
@ -46,6 +48,17 @@ func Test_LogLevelColor(t *testing.T) {
} }
} }
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) { func Test_PlainTextLogs(t *testing.T) {
InitStoneLog(TRACE, false, false) InitStoneLog(TRACE, false, false)
Trace("This is a trace log") Trace("This is a trace log")
@ -73,13 +86,29 @@ func Test_MutedPlainTextLogs(t *testing.T) {
Failure("This is a failure log") Failure("This is a failure log")
} }
func Test_JSONLogs(t *testing.T) { func Test_PanicPlainTextLogs(t *testing.T) {
InitStoneLog(TRACE, true, false) defer func() {
Trace("This is a trace log") if r := recover(); r != nil {
Debug("This is a debug log") Observation("Recovered from panic: %v", r)
Observation("This is an observation log") }
Hypothesis("This is a hypothesis log") }()
Failure("This is a failure log")
SetLogLevel(INFO) 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())
}
}
} }

14
tests/main.go Normal file
View File

@ -0,0 +1,14 @@
package main
import (
"os"
"gitstormr.dev/stone-utils/stonelog"
)
func main() {
if os.Getenv("TEST_FATAL") == "1" {
stonelog.InitStoneLog(stonelog.TRACE, false, false)
stonelog.Meltdown("A fatal error occurred")
}
}