3x-ui/xray/log_writer_test.go
Sora39831 09f84782b0 test: add unit tests for critical modules and fix flaky redirect middleware
- Add tests for config, database, model, util/common, util/crypto,
  util/random, web/middleware, web/service, and xray packages
- Fix redirect middleware using slice instead of map to guarantee
  deterministic longest-prefix-first matching order
2026-04-03 08:44:51 +08:00

91 lines
2.1 KiB
Go

package xray
import (
"testing"
"github.com/mhsanaei/3x-ui/v2/logger"
"github.com/op/go-logging"
)
func init() {
// Initialize logger for tests that use LogWriter (which calls logger.Debug/Error/etc.)
logger.InitLogger(logging.DEBUG)
}
func TestNewLogWriter(t *testing.T) {
lw := NewLogWriter()
if lw == nil {
t.Fatal("NewLogWriter should not return nil")
}
}
func TestLogWriter_Write_CrashDetection(t *testing.T) {
lw := NewLogWriter()
msg := []byte("panic: runtime error: index out of range")
n, err := lw.Write(msg)
if err != nil {
t.Fatalf("Write should not return error: %v", err)
}
if n != len(msg) {
t.Errorf("Write returned %d, expected %d", n, len(msg))
}
}
func TestLogWriter_Write_FatalError(t *testing.T) {
lw := NewLogWriter()
msg := []byte("fatal error: concurrent map writes")
n, err := lw.Write(msg)
if err != nil {
t.Fatalf("Write should not return error: %v", err)
}
if n != len(msg) {
t.Errorf("Write returned %d, expected %d", n, len(msg))
}
}
func TestLogWriter_Write_Exception(t *testing.T) {
lw := NewLogWriter()
msg := []byte("unhandled exception occurred")
n, err := lw.Write(msg)
if err != nil {
t.Fatalf("Write should not return error: %v", err)
}
if n != len(msg) {
t.Errorf("Write returned %d, expected %d", n, len(msg))
}
}
func TestLogWriter_Write_EmptyMessage(t *testing.T) {
lw := NewLogWriter()
n, err := lw.Write([]byte(""))
if err != nil {
t.Fatalf("Write should not error: %v", err)
}
if n != 0 {
t.Errorf("Write returned %d, expected 0", n)
}
}
func TestLogWriter_Write_TLSErrorSuppressed(t *testing.T) {
lw := NewLogWriter()
msg := []byte("some tls handshake error occurred")
n, err := lw.Write(msg)
if err != nil {
t.Fatalf("Write should not return error: %v", err)
}
if n != len(msg) {
t.Errorf("Write returned %d, expected %d", n, len(msg))
}
}
func TestLogWriter_Write_FailedKeyword(t *testing.T) {
lw := NewLogWriter()
msg := []byte("connection failed to remote")
n, err := lw.Write(msg)
if err != nil {
t.Fatalf("Write should not return error: %v", err)
}
if n != len(msg) {
t.Errorf("Write returned %d, expected %d", n, len(msg))
}
}