//go:build integration package main import "testing" func TestAReportedHostVersionIsKeptAndReadBack(t *testing.T) { // The machine has sent this since ADR 0141 and the controller's own copy of the report did not // have the field, so it was unmarshalled into nothing. End to end through the store, because the // fault was a field that existed on one side of the wire only. open := aMesh(t) record, err := open.inventory.NodeByName(t.Context(), "anchor") if err != nil { t.Fatal(err) } if record.HostVersion != "" { t.Fatalf("a machine that never reported one has host version %q", record.HostVersion) } if err := open.inventory.RecordHostVersion(t.Context(), record.ID, "ced54d4"); err != nil { t.Fatal(err) } again, err := open.inventory.NodeByName(t.Context(), "anchor") if err != nil { t.Fatal(err) } if again.HostVersion != "ced54d4" { t.Fatalf("the reported host version read back as %q", again.HostVersion) } // An empty report never clears what a machine last said: a bare word that the node is there says // nothing about its host. if err := open.inventory.RecordHostVersion(t.Context(), record.ID, " "); err != nil { t.Fatal(err) } kept, err := open.inventory.NodeByName(t.Context(), "anchor") if err != nil { t.Fatal(err) } if kept.HostVersion != "ced54d4" { t.Fatalf("a report carrying no host version cleared what the machine had said: %q", kept.HostVersion) } }