A seat verb whose definition says chunks, served by a bundle that answers the whole file as the member `file`, is sent by the runner with buscalls.SeatChunks.Send and answered with the chunk count (Conn.AnswerChunked, called from serveSeats). A chunked verb asked of one machine (`@<node>`) is received in chunks as the verb is. Builds: design 47 G A-257, A-249, A-254, §681 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
31 lines
1.1 KiB
Go
31 lines
1.1 KiB
Go
package runtime
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.novox.be/novox/mesh-sdk/go/seatdef"
|
|
)
|
|
|
|
// Design 47 G A-249: a bundle's seat call is received by the runner in chunks only for a verb whose definition says `chunks`,
|
|
// of any machine: a verb a node holds is asked of the node that ran the ask (A-254).
|
|
func TestOnlyAChunkedSeatVerbIsAskedInChunks(t *testing.T) {
|
|
c := &consumers{definitions: func() map[string]seatdef.Definition {
|
|
return map[string]seatdef.Definition{"mesh-catalog": {Verbs: []seatdef.Verb{{Name: "input", Chunks: true}, {Name: "entry"}}}}
|
|
}}
|
|
for key, want := range map[string]bool{
|
|
"seat:mesh-catalog.input": true,
|
|
"seat:mesh-catalog.entry": false,
|
|
"seat:mesh-catalog.input@ace": true,
|
|
"seat:mesh-catalog.entry@ace": false,
|
|
"seat:mesh-unread.input": false,
|
|
"mesh-delivery-indexer.indexer": false,
|
|
} {
|
|
if got := c.chunked(key); got != want {
|
|
t.Errorf("chunked(%s) = %v, want %v", key, got, want)
|
|
}
|
|
}
|
|
if (&consumers{}).chunked("seat:mesh-catalog.input") {
|
|
t.Error("a runner that holds no seat definitions asks no chunks")
|
|
}
|
|
}
|