Files
clawgo/pkg/nodes/transport_test.go

72 lines
1.5 KiB
Go

package nodes
import (
"context"
"testing"
"time"
)
type captureWireSender struct {
send func(msg WireMessage) error
}
func (c *captureWireSender) Send(msg WireMessage) error {
if c.send != nil {
return c.send(msg)
}
return nil
}
func TestWebsocketP2PTransportSend(t *testing.T) {
t.Parallel()
manager := NewManager()
manager.Upsert(NodeInfo{
ID: "edge-dev",
Online: true,
Capabilities: Capabilities{
Run: true,
},
})
manager.RegisterWireSender("edge-dev", &captureWireSender{
send: func(msg WireMessage) error {
if msg.Type != "node_request" || msg.Request == nil || msg.Request.Action != "run" {
t.Fatalf("unexpected wire request: %+v", msg)
}
go func() {
time.Sleep(20 * time.Millisecond)
manager.HandleWireMessage(WireMessage{
Type: "node_response",
ID: msg.ID,
Response: &Response{
OK: true,
Code: "ok",
Node: "edge-dev",
Action: "run",
Payload: map[string]interface{}{
"status": "done",
},
},
})
}()
return nil
},
})
transport := &WebsocketP2PTransport{Manager: manager}
resp, err := transport.Send(context.Background(), Request{
Action: "run",
Node: "edge-dev",
Args: map[string]interface{}{"command": []string{"echo", "ok"}},
})
if err != nil {
t.Fatalf("transport send failed: %v", err)
}
if !resp.OK || resp.Node != "edge-dev" || resp.Action != "run" {
t.Fatalf("unexpected response: %+v", resp)
}
if resp.Payload["status"] != "done" {
t.Fatalf("unexpected payload: %+v", resp.Payload)
}
}