49 lines
2.1 KiB
Go
49 lines
2.1 KiB
Go
package link
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
// A report's word on the assignment generation (novox/hq issue 234), as mesh-host's report writes it:
|
|
// `reads_generation` on every report of a node-engine that reads one, and `older_generation` on a refusal
|
|
// of a declaration composed from an older generation than the machine applied.
|
|
func TestTheGenerationOnTheWire(t *testing.T) {
|
|
raw := []byte(`{"node":"anchor","refused":"older generation","declared":"d12","epoch":57,"sequence":12,` +
|
|
`"report_sequence":8,"reads_generation":true,"older_generation":{"generation":38,"applied":40}}`)
|
|
var r Report
|
|
if err := json.Unmarshal(raw, &r); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !r.ReadsGeneration || r.OlderGeneration == nil || *r.OlderGeneration != (GenerationRefusal{38, 40}) ||
|
|
r.Sequence != 12 {
|
|
t.Fatalf("a node-engine's generation refusal reads as %+v", r)
|
|
}
|
|
// Not a refusal by the lease's epoch: S13 counts those, and this one is raised naming its sender.
|
|
if r.StaleRefusalOf() {
|
|
t.Errorf("a generation refusal reads as a stale writer's")
|
|
}
|
|
var older Report
|
|
if err := json.Unmarshal([]byte(`{"node":"anchor","applied":["a"],"report_sequence":3}`), &older); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if older.ReadsGeneration || older.OlderGeneration != nil {
|
|
t.Fatalf("a node-engine that never said it reads a generation reads as one that does: %+v", older)
|
|
}
|
|
}
|
|
|
|
// 1145/AC3: a report's word that the node-engine reads a module per resource and a build per module, as mesh-host's
|
|
// report writes it: `reads_modules`, on every report of a node-engine that reads them.
|
|
func TestWhetherTheNodeEngineReadsModulesIsOnItsReport(t *testing.T) {
|
|
var reads, older Report
|
|
if err := json.Unmarshal([]byte(`{"node":"anchor","applied":["a"],"report_sequence":8,"reads_modules":true}`), &reads); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := json.Unmarshal([]byte(`{"node":"anchor","applied":["a"],"report_sequence":3}`), &older); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !reads.ReadsModules || older.ReadsModules {
|
|
t.Fatalf("1145/AC3: reads %v, an older node-engine reads %v", reads.ReadsModules, older.ReadsModules)
|
|
}
|
|
}
|