Add tests for panic and fatal log handling
Some checks failed
Go CI/CD / go-ci (push) Has been cancelled
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:
parent
b7202bc141
commit
d126d4ef7a
1
log.go
1
log.go
@ -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]
|
||||||
|
45
log_test.go
45
log_test.go
@ -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
14
tests/main.go
Normal 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")
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user