@anhlp/alp-protocol 0.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,951 @@
1
+ {
2
+ "$comment": "Declarative wire cases of ALP JSON-RPC v1 (docs/protocol/alp-json-rpc-v1.md §11). Each case runs on a fresh connection. `hello: true` performs daemon.hello first. A step sends `send` (a JSON value, one frame) or `sendRaw` (text written as is), then expects: `expect` (the response with the sent id, or the next non-event frame when the id is unusable; matched as a subset, {\"$type\": t} matches a JSON type, {\"$absent\": true} an absent property), `expectNone` (no response within that many ms) or `expectClose` (the daemon closes the connection). `probe` names the extension method a step registers again to prove an earlier frame ran nothing.",
3
+ "cases": [
4
+ {
5
+ "id": "handshake.required",
6
+ "profile": "handshake",
7
+ "description": "A request before daemon.hello fails with 1006 hello_required and runs nothing.",
8
+ "hello": false,
9
+ "steps": [
10
+ {
11
+ "send": {
12
+ "jsonrpc": "2.0",
13
+ "id": 1,
14
+ "method": "extension.register",
15
+ "params": {
16
+ "method": "conformance.early"
17
+ }
18
+ },
19
+ "expect": {
20
+ "id": 1,
21
+ "error": {
22
+ "code": 1006,
23
+ "data": {
24
+ "reason": "hello_required"
25
+ }
26
+ }
27
+ }
28
+ },
29
+ {
30
+ "send": {
31
+ "jsonrpc": "2.0",
32
+ "id": 2,
33
+ "method": "daemon.hello",
34
+ "params": {
35
+ "protocolVersion": 1
36
+ }
37
+ },
38
+ "expect": {
39
+ "id": 2,
40
+ "result": {}
41
+ }
42
+ },
43
+ {
44
+ "probe": "conformance.early"
45
+ }
46
+ ]
47
+ },
48
+ {
49
+ "id": "handshake.version-mismatch",
50
+ "profile": "handshake",
51
+ "description": "An unsupported protocolVersion fails with 1006 protocol_version listing the supported versions; the connection stays open for another hello.",
52
+ "hello": false,
53
+ "steps": [
54
+ {
55
+ "send": {
56
+ "jsonrpc": "2.0",
57
+ "id": 1,
58
+ "method": "daemon.hello",
59
+ "params": {
60
+ "protocolVersion": 2,
61
+ "client": {
62
+ "name": "conformance",
63
+ "version": "0"
64
+ }
65
+ }
66
+ },
67
+ "expect": {
68
+ "id": 1,
69
+ "error": {
70
+ "code": 1006,
71
+ "data": {
72
+ "reason": "protocol_version",
73
+ "supported": [
74
+ 1
75
+ ]
76
+ }
77
+ }
78
+ }
79
+ },
80
+ {
81
+ "send": {
82
+ "jsonrpc": "2.0",
83
+ "id": 2,
84
+ "method": "daemon.hello",
85
+ "params": {
86
+ "client": {
87
+ "name": "conformance",
88
+ "version": "0"
89
+ }
90
+ }
91
+ },
92
+ "expect": {
93
+ "id": 2,
94
+ "error": {
95
+ "code": 1006,
96
+ "data": {
97
+ "reason": "protocol_version"
98
+ }
99
+ }
100
+ }
101
+ },
102
+ {
103
+ "send": {
104
+ "jsonrpc": "2.0",
105
+ "id": 3,
106
+ "method": "daemon.hello",
107
+ "params": {
108
+ "protocolVersion": 1,
109
+ "client": {
110
+ "name": "conformance",
111
+ "version": "0"
112
+ }
113
+ }
114
+ },
115
+ "expect": {
116
+ "id": 3,
117
+ "result": {
118
+ "protocolVersion": 1,
119
+ "capabilities": {
120
+ "$type": "array"
121
+ }
122
+ }
123
+ }
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "id": "handshake.repeat",
129
+ "profile": "handshake",
130
+ "description": "daemon.hello may be repeated and answers the same way.",
131
+ "hello": true,
132
+ "steps": [
133
+ {
134
+ "send": {
135
+ "jsonrpc": "2.0",
136
+ "id": "again",
137
+ "method": "daemon.hello",
138
+ "params": {
139
+ "protocolVersion": 1
140
+ }
141
+ },
142
+ "expect": {
143
+ "id": "again",
144
+ "result": {
145
+ "protocolVersion": 1
146
+ }
147
+ }
148
+ }
149
+ ]
150
+ },
151
+ {
152
+ "id": "handshake.invalid-client",
153
+ "profile": "handshake",
154
+ "description": "A malformed client description fails with -32602 and leaves the connection without a handshake.",
155
+ "hello": false,
156
+ "steps": [
157
+ {
158
+ "send": {
159
+ "jsonrpc": "2.0",
160
+ "id": 1,
161
+ "method": "daemon.hello",
162
+ "params": {
163
+ "protocolVersion": 1,
164
+ "client": "conformance"
165
+ }
166
+ },
167
+ "expect": {
168
+ "id": 1,
169
+ "error": {
170
+ "code": -32602,
171
+ "data": {
172
+ "reason": "invalid_params"
173
+ }
174
+ }
175
+ }
176
+ },
177
+ {
178
+ "send": {
179
+ "jsonrpc": "2.0",
180
+ "id": 2,
181
+ "method": "catalog.get"
182
+ },
183
+ "expect": {
184
+ "id": 2,
185
+ "error": {
186
+ "code": 1006
187
+ }
188
+ }
189
+ }
190
+ ]
191
+ },
192
+ {
193
+ "id": "wire.parse-error",
194
+ "profile": "wire",
195
+ "description": "A frame that is not JSON answers -32700 with id null; the connection stays usable.",
196
+ "hello": true,
197
+ "steps": [
198
+ {
199
+ "sendRaw": "{\"jsonrpc\":\"2.0\",\"id\":5,\n",
200
+ "expect": {
201
+ "id": null,
202
+ "error": {
203
+ "code": -32700
204
+ }
205
+ }
206
+ },
207
+ {
208
+ "send": {
209
+ "jsonrpc": "2.0",
210
+ "id": 6,
211
+ "method": "catalog.get"
212
+ },
213
+ "expect": {
214
+ "id": 6,
215
+ "result": {
216
+ "defaultModel": {
217
+ "$type": "string"
218
+ }
219
+ }
220
+ }
221
+ }
222
+ ]
223
+ },
224
+ {
225
+ "id": "wire.blank-lines",
226
+ "profile": "wire",
227
+ "description": "Empty and whitespace-only lines between frames are ignored.",
228
+ "hello": true,
229
+ "steps": [
230
+ {
231
+ "sendRaw": "\n \n\r\n",
232
+ "expectNone": 200
233
+ },
234
+ {
235
+ "send": {
236
+ "jsonrpc": "2.0",
237
+ "id": 1,
238
+ "method": "catalog.get"
239
+ },
240
+ "expect": {
241
+ "id": 1,
242
+ "result": {}
243
+ }
244
+ }
245
+ ]
246
+ },
247
+ {
248
+ "id": "wire.not-an-object",
249
+ "profile": "wire",
250
+ "description": "A JSON value that is not an object or array is an invalid request answered with id null.",
251
+ "hello": true,
252
+ "steps": [
253
+ {
254
+ "sendRaw": "42\n",
255
+ "expect": {
256
+ "id": null,
257
+ "error": {
258
+ "code": -32600
259
+ }
260
+ }
261
+ },
262
+ {
263
+ "sendRaw": "\"daemon.status\"\n",
264
+ "expect": {
265
+ "id": null,
266
+ "error": {
267
+ "code": -32600
268
+ }
269
+ }
270
+ }
271
+ ]
272
+ },
273
+ {
274
+ "id": "wire.batch-unsupported",
275
+ "profile": "wire",
276
+ "description": "A batch answers one -32600 batch_unsupported with id null and runs none of its requests.",
277
+ "hello": true,
278
+ "steps": [
279
+ {
280
+ "send": [
281
+ {
282
+ "jsonrpc": "2.0",
283
+ "id": 1,
284
+ "method": "extension.register",
285
+ "params": {
286
+ "method": "conformance.batch"
287
+ }
288
+ }
289
+ ],
290
+ "expect": {
291
+ "id": null,
292
+ "error": {
293
+ "code": -32600,
294
+ "data": {
295
+ "reason": "batch_unsupported"
296
+ }
297
+ }
298
+ }
299
+ },
300
+ {
301
+ "send": [],
302
+ "expect": {
303
+ "id": null,
304
+ "error": {
305
+ "code": -32600
306
+ }
307
+ }
308
+ },
309
+ {
310
+ "probe": "conformance.batch"
311
+ }
312
+ ]
313
+ },
314
+ {
315
+ "id": "wire.jsonrpc-version",
316
+ "profile": "wire",
317
+ "description": "A request without jsonrpc \"2.0\" fails with -32600, answered with its id when the id is valid.",
318
+ "hello": true,
319
+ "steps": [
320
+ {
321
+ "send": {
322
+ "id": 1,
323
+ "method": "extension.register",
324
+ "params": {
325
+ "method": "conformance.version"
326
+ }
327
+ },
328
+ "expect": {
329
+ "id": 1,
330
+ "error": {
331
+ "code": -32600
332
+ }
333
+ }
334
+ },
335
+ {
336
+ "send": {
337
+ "jsonrpc": "1.0",
338
+ "id": 2,
339
+ "method": "extension.register",
340
+ "params": {
341
+ "method": "conformance.version"
342
+ }
343
+ },
344
+ "expect": {
345
+ "id": 2,
346
+ "error": {
347
+ "code": -32600
348
+ }
349
+ }
350
+ },
351
+ {
352
+ "probe": "conformance.version"
353
+ }
354
+ ]
355
+ },
356
+ {
357
+ "id": "wire.notification-ignored",
358
+ "profile": "wire",
359
+ "description": "A request without id is a notification: v1 defines none to the daemon, so it is not run and not answered.",
360
+ "hello": true,
361
+ "steps": [
362
+ {
363
+ "send": {
364
+ "jsonrpc": "2.0",
365
+ "method": "extension.register",
366
+ "params": {
367
+ "method": "conformance.notification"
368
+ }
369
+ },
370
+ "expectNone": 300
371
+ },
372
+ {
373
+ "probe": "conformance.notification"
374
+ }
375
+ ]
376
+ },
377
+ {
378
+ "id": "wire.invalid-ids",
379
+ "profile": "wire",
380
+ "description": "An id that is null, fractional, boolean, an object or a string over 128 characters fails with -32600 answered with id null, and nothing runs.",
381
+ "hello": true,
382
+ "steps": [
383
+ {
384
+ "send": {
385
+ "jsonrpc": "2.0",
386
+ "id": null,
387
+ "method": "extension.register",
388
+ "params": {
389
+ "method": "conformance.ids"
390
+ }
391
+ },
392
+ "expect": {
393
+ "id": null,
394
+ "error": {
395
+ "code": -32600
396
+ }
397
+ }
398
+ },
399
+ {
400
+ "send": {
401
+ "jsonrpc": "2.0",
402
+ "id": 1.5,
403
+ "method": "extension.register",
404
+ "params": {
405
+ "method": "conformance.ids"
406
+ }
407
+ },
408
+ "expect": {
409
+ "id": null,
410
+ "error": {
411
+ "code": -32600,
412
+ "data": {
413
+ "reason": "invalid_id"
414
+ }
415
+ }
416
+ }
417
+ },
418
+ {
419
+ "send": {
420
+ "jsonrpc": "2.0",
421
+ "id": true,
422
+ "method": "extension.register",
423
+ "params": {
424
+ "method": "conformance.ids"
425
+ }
426
+ },
427
+ "expect": {
428
+ "id": null,
429
+ "error": {
430
+ "code": -32600
431
+ }
432
+ }
433
+ },
434
+ {
435
+ "send": {
436
+ "jsonrpc": "2.0",
437
+ "id": {
438
+ "n": 1
439
+ },
440
+ "method": "extension.register",
441
+ "params": {
442
+ "method": "conformance.ids"
443
+ }
444
+ },
445
+ "expect": {
446
+ "id": null,
447
+ "error": {
448
+ "code": -32600
449
+ }
450
+ }
451
+ },
452
+ {
453
+ "send": {
454
+ "jsonrpc": "2.0",
455
+ "id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
456
+ "method": "extension.register",
457
+ "params": {
458
+ "method": "conformance.ids"
459
+ }
460
+ },
461
+ "expect": {
462
+ "id": null,
463
+ "error": {
464
+ "code": -32600
465
+ }
466
+ }
467
+ },
468
+ {
469
+ "send": {
470
+ "jsonrpc": "2.0",
471
+ "id": 9007199254740992,
472
+ "method": "extension.register",
473
+ "params": {
474
+ "method": "conformance.ids"
475
+ }
476
+ },
477
+ "expect": {
478
+ "id": null,
479
+ "error": {
480
+ "code": -32600
481
+ }
482
+ }
483
+ },
484
+ {
485
+ "probe": "conformance.ids"
486
+ }
487
+ ]
488
+ },
489
+ {
490
+ "id": "wire.valid-ids",
491
+ "profile": "wire",
492
+ "description": "String ids, including Unicode, negative and zero integer ids are echoed exactly.",
493
+ "hello": true,
494
+ "steps": [
495
+ {
496
+ "send": {
497
+ "jsonrpc": "2.0",
498
+ "id": "req-é-😀",
499
+ "method": "catalog.get"
500
+ },
501
+ "expect": {
502
+ "id": "req-é-😀",
503
+ "result": {}
504
+ }
505
+ },
506
+ {
507
+ "send": {
508
+ "jsonrpc": "2.0",
509
+ "id": -7,
510
+ "method": "catalog.get"
511
+ },
512
+ "expect": {
513
+ "id": -7,
514
+ "result": {}
515
+ }
516
+ },
517
+ {
518
+ "send": {
519
+ "jsonrpc": "2.0",
520
+ "id": 0,
521
+ "method": "catalog.get"
522
+ },
523
+ "expect": {
524
+ "id": 0,
525
+ "result": {}
526
+ }
527
+ },
528
+ {
529
+ "send": {
530
+ "jsonrpc": "2.0",
531
+ "id": 9007199254740991,
532
+ "method": "catalog.get"
533
+ },
534
+ "expect": {
535
+ "id": 9007199254740991,
536
+ "result": {}
537
+ }
538
+ }
539
+ ]
540
+ },
541
+ {
542
+ "id": "wire.pipelined",
543
+ "profile": "wire",
544
+ "description": "Requests written together are each answered once with their own id; the order of answers is not part of the contract.",
545
+ "hello": true,
546
+ "steps": [
547
+ {
548
+ "sendRaw": "{\"jsonrpc\":\"2.0\",\"id\":\"a\",\"method\":\"catalog.get\"}\n{\"jsonrpc\":\"2.0\",\"id\":\"b\",\"method\":\"session.get\",\"params\":{\"sessionId\":\"conformance-missing\"}}\n",
549
+ "expectIds": {
550
+ "a": {
551
+ "result": {}
552
+ },
553
+ "b": {
554
+ "error": {
555
+ "code": 1001
556
+ }
557
+ }
558
+ }
559
+ }
560
+ ]
561
+ },
562
+ {
563
+ "id": "errors.unknown-method",
564
+ "profile": "errors",
565
+ "description": "A method nobody serves fails with -32601, as does a proposed method (docs/protocol/alp-json-rpc-v1.md §14) the daemon does not serve.",
566
+ "hello": true,
567
+ "steps": [
568
+ {
569
+ "send": {
570
+ "jsonrpc": "2.0",
571
+ "id": 1,
572
+ "method": "conformance.nothing"
573
+ },
574
+ "expect": {
575
+ "id": 1,
576
+ "error": {
577
+ "code": -32601
578
+ }
579
+ }
580
+ },
581
+ {
582
+ "send": {
583
+ "jsonrpc": "2.0",
584
+ "id": 2,
585
+ "method": "workspace.list"
586
+ },
587
+ "expect": {
588
+ "id": 2,
589
+ "error": {
590
+ "code": -32601
591
+ }
592
+ }
593
+ }
594
+ ]
595
+ },
596
+ {
597
+ "id": "errors.method-not-string",
598
+ "profile": "errors",
599
+ "description": "A method that is not a string is an invalid request.",
600
+ "hello": true,
601
+ "steps": [
602
+ {
603
+ "send": {
604
+ "jsonrpc": "2.0",
605
+ "id": 1,
606
+ "method": 7
607
+ },
608
+ "expect": {
609
+ "id": 1,
610
+ "error": {
611
+ "code": -32600
612
+ }
613
+ }
614
+ }
615
+ ]
616
+ },
617
+ {
618
+ "id": "errors.params-shape",
619
+ "profile": "errors",
620
+ "description": "params that are not an object (an array, null or a scalar) fail with -32602 and run nothing.",
621
+ "hello": true,
622
+ "steps": [
623
+ {
624
+ "send": {
625
+ "jsonrpc": "2.0",
626
+ "id": 1,
627
+ "method": "extension.register",
628
+ "params": [
629
+ "conformance.shape"
630
+ ]
631
+ },
632
+ "expect": {
633
+ "id": 1,
634
+ "error": {
635
+ "code": -32602
636
+ }
637
+ }
638
+ },
639
+ {
640
+ "send": {
641
+ "jsonrpc": "2.0",
642
+ "id": 2,
643
+ "method": "extension.register",
644
+ "params": null
645
+ },
646
+ "expect": {
647
+ "id": 2,
648
+ "error": {
649
+ "code": -32602
650
+ }
651
+ }
652
+ },
653
+ {
654
+ "send": {
655
+ "jsonrpc": "2.0",
656
+ "id": 3,
657
+ "method": "catalog.get",
658
+ "params": "x"
659
+ },
660
+ "expect": {
661
+ "id": 3,
662
+ "error": {
663
+ "code": -32602
664
+ }
665
+ }
666
+ },
667
+ {
668
+ "probe": "conformance.shape"
669
+ }
670
+ ]
671
+ },
672
+ {
673
+ "id": "errors.invalid-params",
674
+ "profile": "errors",
675
+ "description": "Params against a method's schema fail with -32602 invalid_params naming the issues; null is not the same as absent.",
676
+ "hello": true,
677
+ "steps": [
678
+ {
679
+ "send": {
680
+ "jsonrpc": "2.0",
681
+ "id": 1,
682
+ "method": "session.get",
683
+ "params": {
684
+ "sessionId": 5
685
+ }
686
+ },
687
+ "expect": {
688
+ "id": 1,
689
+ "error": {
690
+ "code": -32602,
691
+ "data": {
692
+ "reason": "invalid_params",
693
+ "issues": {
694
+ "$type": "array"
695
+ }
696
+ }
697
+ }
698
+ }
699
+ },
700
+ {
701
+ "send": {
702
+ "jsonrpc": "2.0",
703
+ "id": 2,
704
+ "method": "session.get",
705
+ "params": {}
706
+ },
707
+ "expect": {
708
+ "id": 2,
709
+ "error": {
710
+ "code": -32602
711
+ }
712
+ }
713
+ },
714
+ {
715
+ "send": {
716
+ "jsonrpc": "2.0",
717
+ "id": 3,
718
+ "method": "session.list",
719
+ "params": {
720
+ "projectRoot": null
721
+ }
722
+ },
723
+ "expect": {
724
+ "id": 3,
725
+ "error": {
726
+ "code": -32602
727
+ }
728
+ }
729
+ },
730
+ {
731
+ "send": {
732
+ "jsonrpc": "2.0",
733
+ "id": 4,
734
+ "method": "session.attach",
735
+ "params": {
736
+ "sessionId": "x",
737
+ "after": -1
738
+ }
739
+ },
740
+ "expect": {
741
+ "id": 4,
742
+ "error": {
743
+ "code": -32602
744
+ }
745
+ }
746
+ },
747
+ {
748
+ "send": {
749
+ "jsonrpc": "2.0",
750
+ "id": 5,
751
+ "method": "session.attach",
752
+ "params": {
753
+ "sessionId": "x",
754
+ "after": 1.5
755
+ }
756
+ },
757
+ "expect": {
758
+ "id": 5,
759
+ "error": {
760
+ "code": -32602
761
+ }
762
+ }
763
+ },
764
+ {
765
+ "send": {
766
+ "jsonrpc": "2.0",
767
+ "id": 6,
768
+ "method": "session.create",
769
+ "params": {
770
+ "sessionId": "has space",
771
+ "spec": {
772
+ "cwd": "/nonexistent"
773
+ }
774
+ }
775
+ },
776
+ "expect": {
777
+ "id": 6,
778
+ "error": {
779
+ "code": -32602
780
+ }
781
+ }
782
+ },
783
+ {
784
+ "send": {
785
+ "jsonrpc": "2.0",
786
+ "id": 7,
787
+ "method": "session.prompt",
788
+ "params": {
789
+ "sessionId": "x",
790
+ "clientMessageId": "m",
791
+ "content": "text"
792
+ }
793
+ },
794
+ "expect": {
795
+ "id": 7,
796
+ "error": {
797
+ "code": -32602
798
+ }
799
+ }
800
+ },
801
+ {
802
+ "send": {
803
+ "jsonrpc": "2.0",
804
+ "id": 8,
805
+ "method": "extension.register",
806
+ "params": {}
807
+ },
808
+ "expect": {
809
+ "id": 8,
810
+ "error": {
811
+ "code": -32602
812
+ }
813
+ }
814
+ }
815
+ ]
816
+ },
817
+ {
818
+ "id": "errors.unknown-fields",
819
+ "profile": "errors",
820
+ "description": "Unknown params properties are ignored, for forward compatibility.",
821
+ "hello": true,
822
+ "steps": [
823
+ {
824
+ "send": {
825
+ "jsonrpc": "2.0",
826
+ "id": 1,
827
+ "method": "session.list",
828
+ "params": {
829
+ "rootsOnly": true,
830
+ "conformanceFuture": {
831
+ "x": [
832
+ 1,
833
+ null
834
+ ]
835
+ }
836
+ }
837
+ },
838
+ "expect": {
839
+ "id": 1,
840
+ "result": {
841
+ "sessions": {
842
+ "$type": "array"
843
+ }
844
+ }
845
+ }
846
+ }
847
+ ]
848
+ },
849
+ {
850
+ "id": "errors.not-found",
851
+ "profile": "errors",
852
+ "description": "A session the daemon does not know fails with 1001.",
853
+ "hello": true,
854
+ "steps": [
855
+ {
856
+ "send": {
857
+ "jsonrpc": "2.0",
858
+ "id": 1,
859
+ "method": "session.get",
860
+ "params": {
861
+ "sessionId": "conformance-missing"
862
+ }
863
+ },
864
+ "expect": {
865
+ "id": 1,
866
+ "error": {
867
+ "code": 1001
868
+ }
869
+ }
870
+ },
871
+ {
872
+ "send": {
873
+ "jsonrpc": "2.0",
874
+ "id": 2,
875
+ "method": "session.attach",
876
+ "params": {
877
+ "sessionId": "conformance-missing",
878
+ "after": 3
879
+ }
880
+ },
881
+ "expect": {
882
+ "id": 2,
883
+ "error": {
884
+ "code": 1001
885
+ }
886
+ }
887
+ }
888
+ ]
889
+ },
890
+ {
891
+ "id": "limits.oversized-frame",
892
+ "profile": "limits",
893
+ "description": "A frame over 16 MiB (its newline included) closes the connection without an answer.",
894
+ "hello": true,
895
+ "steps": [
896
+ {
897
+ "sendOversized": 16777216,
898
+ "expectClose": true
899
+ }
900
+ ]
901
+ },
902
+ {
903
+ "id": "limits.exact-frame",
904
+ "profile": "limits",
905
+ "description": "A frame exactly 16 MiB including its newline and a following small frame are accepted.",
906
+ "hello": true,
907
+ "steps": [
908
+ {
909
+ "send": {
910
+ "jsonrpc": "2.0",
911
+ "id": 1,
912
+ "method": "catalog.get"
913
+ },
914
+ "sendBytes": 16777216,
915
+ "expect": {
916
+ "id": 1,
917
+ "result": {}
918
+ }
919
+ },
920
+ {
921
+ "send": {
922
+ "jsonrpc": "2.0",
923
+ "id": 2,
924
+ "method": "catalog.get"
925
+ },
926
+ "expect": {
927
+ "id": 2,
928
+ "result": {}
929
+ }
930
+ }
931
+ ]
932
+ },
933
+ {
934
+ "id": "limits.terminated-oversized-frame",
935
+ "profile": "limits",
936
+ "description": "A terminated frame one byte over the limit closes the connection.",
937
+ "hello": true,
938
+ "steps": [
939
+ {
940
+ "send": {
941
+ "jsonrpc": "2.0",
942
+ "id": 1,
943
+ "method": "catalog.get"
944
+ },
945
+ "sendBytes": 16777217,
946
+ "expectClose": true
947
+ }
948
+ ]
949
+ }
950
+ ]
951
+ }