- Add console emitter interface for event-driven console output - Implement persistent cancel reason and explicit completion tracking - Add profile proto message definitions - Update edge and node transport layers with adapter execution terminology - Add new packages/events module - Update architecture documentation and README files
173 lines
4.4 KiB
Go
173 lines
4.4 KiB
Go
package transport
|
|
|
|
import (
|
|
"testing"
|
|
|
|
toki "git.toki-labs.com/toki/common-proto-socket/go"
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
iop "iop/proto/gen/iop"
|
|
)
|
|
|
|
func TestNodeParserMap_RunRequest(t *testing.T) {
|
|
parsers := nodeParserMap()
|
|
original := &iop.RunRequest{
|
|
RunId: "run-1",
|
|
Adapter: "mock",
|
|
Target: "v1",
|
|
SessionId: "session-a",
|
|
Background: true,
|
|
SessionMode: iop.RunSessionMode_RUN_SESSION_MODE_REQUIRE_EXISTING,
|
|
}
|
|
payload, err := proto.Marshal(original)
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
|
|
key := toki.TypeNameOf(original)
|
|
parser, ok := parsers[key]
|
|
if !ok {
|
|
t.Fatalf("parser not found for key: %s", key)
|
|
}
|
|
|
|
parsed, err := parser(payload)
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
got := parsed.(*iop.RunRequest)
|
|
if got.GetRunId() != original.GetRunId() ||
|
|
got.GetAdapter() != original.GetAdapter() ||
|
|
got.GetTarget() != original.GetTarget() ||
|
|
got.GetSessionId() != original.GetSessionId() ||
|
|
got.GetBackground() != original.GetBackground() ||
|
|
got.GetSessionMode() != original.GetSessionMode() {
|
|
t.Fatalf("unexpected run request: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestNodeParserMap_CancelRequest(t *testing.T) {
|
|
parsers := nodeParserMap()
|
|
original := &iop.CancelRequest{
|
|
RunId: "run-1",
|
|
Adapter: "cli",
|
|
Target: "codex",
|
|
SessionId: "session-a",
|
|
Action: iop.CancelAction_CANCEL_ACTION_TERMINATE_SESSION,
|
|
}
|
|
payload, err := proto.Marshal(original)
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
|
|
key := toki.TypeNameOf(original)
|
|
parser, ok := parsers[key]
|
|
if !ok {
|
|
t.Fatalf("parser not found for key: %s", key)
|
|
}
|
|
|
|
parsed, err := parser(payload)
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
got := parsed.(*iop.CancelRequest)
|
|
if got.GetRunId() != original.GetRunId() ||
|
|
got.GetAdapter() != original.GetAdapter() ||
|
|
got.GetTarget() != original.GetTarget() ||
|
|
got.GetSessionId() != original.GetSessionId() ||
|
|
got.GetAction() != original.GetAction() {
|
|
t.Fatalf("unexpected cancel request: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestNodeParserMap_EdgeNodeEvent(t *testing.T) {
|
|
parsers := nodeParserMap()
|
|
original := &iop.EdgeNodeEvent{
|
|
Type: "edge.disconnected",
|
|
Source: "node",
|
|
NodeId: "node-1",
|
|
Alias: "local-node",
|
|
Reason: "transport_closed",
|
|
}
|
|
payload, err := proto.Marshal(original)
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
|
|
key := toki.TypeNameOf(original)
|
|
parser, ok := parsers[key]
|
|
if !ok {
|
|
t.Fatalf("parser not found for key: %s", key)
|
|
}
|
|
|
|
parsed, err := parser(payload)
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
got := parsed.(*iop.EdgeNodeEvent)
|
|
if got.GetType() != original.GetType() ||
|
|
got.GetSource() != original.GetSource() ||
|
|
got.GetNodeId() != original.GetNodeId() ||
|
|
got.GetAlias() != original.GetAlias() ||
|
|
got.GetReason() != original.GetReason() {
|
|
t.Fatalf("unexpected edge node event: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestNodeParserMap_NodeCommandRequest(t *testing.T) {
|
|
parsers := nodeParserMap()
|
|
original := &iop.NodeCommandRequest{
|
|
Type: iop.NodeCommandType_NODE_COMMAND_TYPE_USAGE_STATUS,
|
|
Adapter: "cli",
|
|
Target: "codex",
|
|
SessionId: "default",
|
|
}
|
|
payload, err := proto.Marshal(original)
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
|
|
key := toki.TypeNameOf(original)
|
|
parser, ok := parsers[key]
|
|
if !ok {
|
|
t.Fatalf("parser not found for key: %s", key)
|
|
}
|
|
|
|
parsed, err := parser(payload)
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
got := parsed.(*iop.NodeCommandRequest)
|
|
if got.GetType() != original.GetType() ||
|
|
got.GetAdapter() != original.GetAdapter() ||
|
|
got.GetTarget() != original.GetTarget() ||
|
|
got.GetSessionId() != original.GetSessionId() {
|
|
t.Fatalf("unexpected node command request: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestNodeParserMap_RegisterResponse(t *testing.T) {
|
|
parsers := nodeParserMap()
|
|
original := &iop.RegisterResponse{Accepted: true, NodeId: "node-1", Alias: "local-node"}
|
|
payload, err := proto.Marshal(original)
|
|
if err != nil {
|
|
t.Fatalf("marshal: %v", err)
|
|
}
|
|
|
|
key := toki.TypeNameOf(original)
|
|
parser, ok := parsers[key]
|
|
if !ok {
|
|
t.Fatalf("parser not found for key: %s", key)
|
|
}
|
|
|
|
parsed, err := parser(payload)
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
got, ok := parsed.(*iop.RegisterResponse)
|
|
if !ok {
|
|
t.Fatalf("unexpected register response type: %T", parsed)
|
|
}
|
|
if !got.GetAccepted() || got.GetNodeId() != original.GetNodeId() || got.GetAlias() != original.GetAlias() {
|
|
t.Fatalf("unexpected register response: %+v", got)
|
|
}
|
|
}
|