| package logger |
|
|
| import ( |
| "os" |
| "path/filepath" |
| "testing" |
|
|
| "go.uber.org/zap" |
| "go.uber.org/zap/zapcore" |
| ) |
|
|
| func TestResolveLogFilePath_Default(t *testing.T) { |
| t.Setenv("DATA_DIR", "") |
| got := resolveLogFilePath("") |
| if got != DefaultContainerLogPath { |
| t.Fatalf("resolveLogFilePath() = %q, want %q", got, DefaultContainerLogPath) |
| } |
| } |
|
|
| func TestResolveLogFilePath_WithDataDir(t *testing.T) { |
| t.Setenv("DATA_DIR", "/tmp/sub2api-data") |
| got := resolveLogFilePath("") |
| want := filepath.Join("/tmp/sub2api-data", "logs", "sub2api.log") |
| if got != want { |
| t.Fatalf("resolveLogFilePath() = %q, want %q", got, want) |
| } |
| } |
|
|
| func TestResolveLogFilePath_ExplicitPath(t *testing.T) { |
| t.Setenv("DATA_DIR", "/tmp/ignore") |
| got := resolveLogFilePath("/var/log/custom.log") |
| if got != "/var/log/custom.log" { |
| t.Fatalf("resolveLogFilePath() = %q, want explicit path", got) |
| } |
| } |
|
|
| func TestNormalizedOptions_InvalidFallback(t *testing.T) { |
| t.Setenv("DATA_DIR", "") |
| opts := InitOptions{ |
| Level: "TRACE", |
| Format: "TEXT", |
| ServiceName: "", |
| Environment: "", |
| StacktraceLevel: "panic", |
| Output: OutputOptions{ |
| ToStdout: false, |
| ToFile: false, |
| }, |
| Rotation: RotationOptions{ |
| MaxSizeMB: 0, |
| MaxBackups: -1, |
| MaxAgeDays: -1, |
| }, |
| Sampling: SamplingOptions{ |
| Enabled: true, |
| Initial: 0, |
| Thereafter: 0, |
| }, |
| } |
| out := opts.normalized() |
| if out.Level != "trace" { |
| |
| t.Fatalf("normalized level should preserve value for upstream validation, got %q", out.Level) |
| } |
| if !out.Output.ToStdout { |
| t.Fatalf("normalized output should fallback to stdout") |
| } |
| if out.Output.FilePath != DefaultContainerLogPath { |
| t.Fatalf("normalized file path = %q", out.Output.FilePath) |
| } |
| if out.Rotation.MaxSizeMB != 100 { |
| t.Fatalf("normalized max_size_mb = %d", out.Rotation.MaxSizeMB) |
| } |
| if out.Rotation.MaxBackups != 10 { |
| t.Fatalf("normalized max_backups = %d", out.Rotation.MaxBackups) |
| } |
| if out.Rotation.MaxAgeDays != 7 { |
| t.Fatalf("normalized max_age_days = %d", out.Rotation.MaxAgeDays) |
| } |
| if out.Sampling.Initial != 100 || out.Sampling.Thereafter != 100 { |
| t.Fatalf("normalized sampling defaults invalid: %+v", out.Sampling) |
| } |
| } |
|
|
| func TestBuildFileCore_InvalidPathFallback(t *testing.T) { |
| t.Setenv("DATA_DIR", "") |
| opts := bootstrapOptions() |
| opts.Output.ToFile = true |
| opts.Output.FilePath = filepath.Join(os.DevNull, "logs", "sub2api.log") |
| encoderCfg := zapcore.EncoderConfig{ |
| TimeKey: "time", |
| LevelKey: "level", |
| MessageKey: "msg", |
| EncodeTime: zapcore.ISO8601TimeEncoder, |
| EncodeLevel: zapcore.CapitalLevelEncoder, |
| } |
| encoder := zapcore.NewJSONEncoder(encoderCfg) |
| _, _, err := buildFileCore(encoder, zap.NewAtomicLevel(), opts) |
| if err == nil { |
| t.Fatalf("buildFileCore() expected error for invalid path") |
| } |
| } |
|
|