Files
CLIProxyAPI/examples/plugin/jshandler/engine_test.go
Luis Pater 2aeb41cecf feat(pluginhost, jshandler): integrate HostCallbackID with interceptors and JS engine logging
- Added `HostCallbackID` to request, response, and stream chunk interceptors for enhanced context tracking.
- Updated JavaScript engine to support custom console logging with `HostCallbackID` forwarding.
- Introduced tests verifying proper integration of `HostCallbackID` in all interceptor flows and engine logging.
- Enhanced logging and error handling for consistent callback-related logic implementation.
2026-06-09 14:36:42 +08:00

75 lines
1.8 KiB
Go

package main
import (
"bytes"
"strings"
"testing"
"time"
log "github.com/sirupsen/logrus"
)
func TestConsoleLogWritesToLogger(t *testing.T) {
var out bytes.Buffer
logger := log.StandardLogger()
originalOut := logger.Out
originalFormatter := logger.Formatter
originalLevel := logger.Level
log.SetOutput(&out)
log.SetFormatter(&log.TextFormatter{
DisableColors: true,
DisableTimestamp: true,
})
log.SetLevel(log.InfoLevel)
defer func() {
log.SetOutput(originalOut)
log.SetFormatter(originalFormatter)
log.SetLevel(originalLevel)
}()
engine := newJSEngine()
_, errRun := engine.vm.RunString(`console.log("alpha", 42, true);`)
if errRun != nil {
t.Fatalf("RunString() error = %v", errRun)
}
got := out.String()
if !strings.Contains(got, "JS console log: alpha 42 true") {
t.Fatalf("console.log output = %q, want logger output with JS message", got)
}
}
func TestConsoleLogUsesConfiguredLogger(t *testing.T) {
var messages []string
engine := newJSEngine(func(message string) error {
messages = append(messages, message)
return nil
})
_, errRun := engine.vm.RunString(`console.log("alpha", 42, true);`)
if errRun != nil {
t.Fatalf("RunString() error = %v", errRun)
}
if len(messages) != 1 || messages[0] != "alpha 42 true" {
t.Fatalf("console log messages = %#v, want formatted message", messages)
}
}
func TestStopInterruptTimerClearsExpiredInterrupt(t *testing.T) {
engine := newJSEngine()
timer, done := engine.startInterruptTimer(time.Nanosecond)
select {
case <-done:
case <-time.After(time.Second):
t.Fatal("interrupt timer did not fire")
}
engine.stopInterruptTimer(timer, done)
value, errRun := engine.vm.RunString("1 + 1")
if errRun != nil {
t.Fatalf("RunString() error after clearing interrupt = %v", errRun)
}
if got := value.ToInteger(); got != 2 {
t.Fatalf("RunString() = %d, want 2", got)
}
}