mirror of
https://github.com/sipeed/NanoKVM.git
synced 2026-09-11 00:22:56 -05:00
Add an MCP Streamable HTTP server with token authentication, screenshot capture, keyboard, and mouse tools. Introduce shared control-mode and input-control coordination so MCP, PicoClaw, and local HID paths serialize ownership safely. Integrate PicoClaw gateway/runtime control handoff with PID-managed startup and focused unit coverage.
51 lines
1.4 KiB
Go
51 lines
1.4 KiB
Go
package picoclaw
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"NanoKVM-Server/service/controlmode"
|
|
)
|
|
|
|
func TestControlModeChangedPayloadIncludesControlMetadata(t *testing.T) {
|
|
changedAt := time.Now().UTC()
|
|
payload := controlModeChangedPayload(controlmode.Status{
|
|
Mode: controlmode.ModeMCP,
|
|
Transitioning: true,
|
|
LastError: "switch failed",
|
|
ChangedAt: changedAt,
|
|
}, "mcp_config")
|
|
|
|
if payload["mode"] != string(controlmode.ModeMCP) {
|
|
t.Fatalf("mode = %v, want %q", payload["mode"], controlmode.ModeMCP)
|
|
}
|
|
if payload["transitioning"] != true {
|
|
t.Fatalf("transitioning = %v, want true", payload["transitioning"])
|
|
}
|
|
if payload["can_control"] != false {
|
|
t.Fatalf("can_control = %v, want false", payload["can_control"])
|
|
}
|
|
if payload["last_error"] != "switch failed" {
|
|
t.Fatalf("last_error = %v, want switch failed", payload["last_error"])
|
|
}
|
|
if payload["changed_at"] != changedAt {
|
|
t.Fatalf("changed_at = %v, want %v", payload["changed_at"], changedAt)
|
|
}
|
|
if payload["source"] != "mcp_config" {
|
|
t.Fatalf("source = %v, want mcp_config", payload["source"])
|
|
}
|
|
}
|
|
|
|
func TestControlModeChangedPayloadAllowsPicoclawControlWhenStable(t *testing.T) {
|
|
payload := controlModeChangedPayload(controlmode.Status{
|
|
Mode: controlmode.ModePicoclaw,
|
|
}, "")
|
|
|
|
if payload["can_control"] != true {
|
|
t.Fatalf("can_control = %v, want true", payload["can_control"])
|
|
}
|
|
if _, ok := payload["source"]; ok {
|
|
t.Fatalf("source = %v, want omitted", payload["source"])
|
|
}
|
|
}
|