|
| 1 | +name: shared-registration-roundrobin-distributes-calls |
| 2 | +spec_section: "Advanced §14.3.9 — Shared Registration" |
| 3 | +realm: realm1 |
| 4 | +serializer: json |
| 5 | + |
| 6 | +# Two callees register the same procedure with invoke=roundrobin. Caller |
| 7 | +# issues 4 CALLs; the dealer rotates: call 1 → callee1, call 2 → callee2, |
| 8 | +# call 3 → callee1, call 4 → callee2. Confirms roundrobin distribution |
| 9 | +# in registration order (matches dealer.go's nextCallee policy). |
| 10 | +peers: |
| 11 | + - name: callee1 |
| 12 | + - name: callee2 |
| 13 | + - name: caller |
| 14 | + |
| 15 | +steps: |
| 16 | + # Callee 1 handshake + REGISTER (first registrant — index 0). |
| 17 | + - peer: callee1 |
| 18 | + send: [1, "realm1", {roles: {callee: {}}}] |
| 19 | + - peer: callee1 |
| 20 | + expect: [2, "{{$c1_session:int}}", "_"] |
| 21 | + |
| 22 | + - peer: callee1 |
| 23 | + send: [64, 12001, {invoke: "roundrobin"}, "spec.test.shared"] |
| 24 | + - peer: callee1 |
| 25 | + expect: [65, 12001, "{{$reg_id:int}}"] |
| 26 | + note: "Both callees share the same registration id" |
| 27 | + |
| 28 | + # Callee 2 handshake + REGISTER (second registrant — index 1). |
| 29 | + - peer: callee2 |
| 30 | + send: [1, "realm1", {roles: {callee: {}}}] |
| 31 | + - peer: callee2 |
| 32 | + expect: [2, "{{$c2_session:int}}", "_"] |
| 33 | + |
| 34 | + - peer: callee2 |
| 35 | + send: [64, 12002, {invoke: "roundrobin"}, "spec.test.shared"] |
| 36 | + - peer: callee2 |
| 37 | + expect: [65, 12002, "{{$reg_id:int}}"] |
| 38 | + |
| 39 | + # Caller handshake. |
| 40 | + - peer: caller |
| 41 | + send: [1, "realm1", {roles: {caller: {}}}] |
| 42 | + - peer: caller |
| 43 | + expect: [2, "{{$caller_session:int}}", "_"] |
| 44 | + |
| 45 | + # CALL #1 → callee1. |
| 46 | + - peer: caller |
| 47 | + send: [48, 12101, {}, "spec.test.shared", [1]] |
| 48 | + - peer: callee1 |
| 49 | + expect: [68, "{{$inv1:int}}", "{{$reg_id:int}}", "_", [1]] |
| 50 | + - peer: callee1 |
| 51 | + send: [70, "{{$inv1:int}}", {}, ["one"]] |
| 52 | + - peer: caller |
| 53 | + expect: [50, 12101, "_", ["one"]] |
| 54 | + |
| 55 | + # CALL #2 → callee2. |
| 56 | + - peer: caller |
| 57 | + send: [48, 12102, {}, "spec.test.shared", [2]] |
| 58 | + - peer: callee2 |
| 59 | + expect: [68, "{{$inv2:int}}", "{{$reg_id:int}}", "_", [2]] |
| 60 | + - peer: callee2 |
| 61 | + send: [70, "{{$inv2:int}}", {}, ["two"]] |
| 62 | + - peer: caller |
| 63 | + expect: [50, 12102, "_", ["two"]] |
| 64 | + |
| 65 | + # CALL #3 → callee1 (rotation wraps). |
| 66 | + - peer: caller |
| 67 | + send: [48, 12103, {}, "spec.test.shared", [3]] |
| 68 | + - peer: callee1 |
| 69 | + expect: [68, "{{$inv3:int}}", "{{$reg_id:int}}", "_", [3]] |
| 70 | + - peer: callee1 |
| 71 | + send: [70, "{{$inv3:int}}", {}, ["three"]] |
| 72 | + - peer: caller |
| 73 | + expect: [50, 12103, "_", ["three"]] |
| 74 | + |
| 75 | + # CALL #4 → callee2. |
| 76 | + - peer: caller |
| 77 | + send: [48, 12104, {}, "spec.test.shared", [4]] |
| 78 | + - peer: callee2 |
| 79 | + expect: [68, "{{$inv4:int}}", "{{$reg_id:int}}", "_", [4]] |
| 80 | + - peer: callee2 |
| 81 | + send: [70, "{{$inv4:int}}", {}, ["four"]] |
| 82 | + - peer: caller |
| 83 | + expect: [50, 12104, "_", ["four"]] |
0 commit comments