code wiki / (root) / nx_mcp_envelope_gate.nx

nx_mcp_envelope_gate.nx source

↩ module page · 30 lines · 2771 B

1import "nx_mcp_envelope.nx" 2import "nx_gate_verdict.nx" 3func nmeg_len(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n=n+1 }; return n } 4func nmeg_case(name: *u8, src: *u8, expected: i64, id: *u8, ctr: *i64) -> i64 { 5 let e: *NxMcpEnvelope = sys_mmap(NX_MCP_ENVELOPE_BYTES) as *NxMcpEnvelope 6 let actual: i64 = nme_read(src,nmeg_len(src),e) 7 gv_check_eq(name,actual,expected,ctr) 8 if expected == 1 { gv_check_eq("exact request identity",nx_value_bytes_equal(((src as i64)+e.id_off) as *u8,e.id_len,id,nmeg_len(id)),1,ctr) } 9 return 0 10} 11func main() -> i64 { 12 let ctr: *i64 = gv_ctr() 13 gv_head("MCP envelope regression: actual native parser") 14 nmeg_case("integer request","{\"jsonrpc\":\"2.0\",\"id\":73,\"method\":\"tools/list\"}",1,"73",ctr) 15 nmeg_case("nested identity","{\"params\":{\"id\":99,\"method\":\"tools/call\"},\"jsonrpc\":\"2.0\",\"id\":-24,\"method\":\"tools/list\"}",1,"-24",ctr) 16 nmeg_case("string identity","{\"jsonrpc\":\"2.0\",\"id\":\"session-abc\",\"method\":\"initialize\"}",1,"\"session-abc\"",ctr) 17 nmeg_case("initialized","{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\"}",2,"",ctr) 18 nmeg_case("nested notification id","{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\",\"params\":{\"id\":8}}",2,"",ctr) 19 nmeg_case("notification request","{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\",\"id\":4}",1,"4",ctr) 20 nmeg_case("unidentified execution","{\"jsonrpc\":\"2.0\",\"method\":\"tools/call\",\"params\":{}}",0,"",ctr) 21 nmeg_case("duplicate identity","{\"jsonrpc\":\"2.0\",\"id\":1,\"id\":2,\"method\":\"tools/list\"}",0,"",ctr) 22 nmeg_case("duplicate method","{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"method\":\"tools/call\"}",0,"",ctr) 23 nmeg_case("wrong version","{\"jsonrpc\":\"1.0\",\"id\":1,\"method\":\"tools/list\"}",0,"",ctr) 24 nmeg_case("missing method","{\"jsonrpc\":\"2.0\",\"id\":1}",0,"",ctr) 25 nmeg_case("trailing junk","{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}x",0,"",ctr) 26 nmeg_case("malformed","{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":",0,"",ctr) 27 nmeg_case("bad initialized params","{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\",\"params\":[]}",0,"",ctr) 28 nmeg_case("long identity","{\"jsonrpc\":\"2.0\",\"id\":\"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\",\"method\":\"tools/list\"}",1,"\"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\"",ctr) 29 return gv_verdict("MCP-ENVELOPE",ctr,"envelope-only; transport integration pending") 30}