42 lines
1.3 KiB
Go
42 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
// A declaration's only identity was the digest of its bytes; the controller already held a per-node
|
|
// lock and recorded each send, so the order existed and was thrown away at the wire (novox/hq
|
|
// 04-ISSUES/107).
|
|
|
|
func TestASendCarriesItsNumberInsideTheSignedBytes(t *testing.T) {
|
|
body, err := sendable{Resources: []map[string]any{{"id": "x", "type": "file"}}, Sequence: 7}.Body()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var env map[string]any
|
|
if err := json.Unmarshal(body, &env); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got, _ := env["sequence"].(float64); got != 7 {
|
|
t.Fatalf("the body carries sequence %v, wanted 7", env["sequence"])
|
|
}
|
|
}
|
|
|
|
func TestAnUnnumberedSendIsByteForByteWhatItWasBefore(t *testing.T) {
|
|
// Zero is not sent at all. A host reads absence as "no order claimed" — the shape of every
|
|
// declaration before this — so an older host, or the read-only comparison against a machine
|
|
// sent nothing since sends were numbered, sees exactly the bytes it always saw.
|
|
body, err := sendable{Resources: []map[string]any{{"id": "x", "type": "file"}}}.Body()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var env map[string]any
|
|
if err := json.Unmarshal(body, &env); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, present := env["sequence"]; present {
|
|
t.Fatalf("a send numbered zero put a sequence on the wire: %s", body)
|
|
}
|
|
}
|