package stateobjects import ( "strings" "testing" ) // ADR 0666 §16: a body is a reference when it is exactly `{"mesh-object": Ref}`; anything else is a value. func subABodyIsAReferenceOnlyWhenItIsExactlyOne(t *testing.T) { good := Ref{Store: "views-objects", Object: "k." + strings.Repeat("a", 64), Size: 3 << 20, Digest: strings.Repeat("a", 64), Form: FormVersion} got, ok := ReadRef(Wrap(good)) if !ok || got != good { t.Fatalf("round trip: %+v, %v", got, ok) } d := strings.Repeat("a", 64) rows := []struct{ name, body string }{ {"a value", `{"a":1}`}, {"a list", `[1]`}, {"not JSON", `nope`}, {"another field beside it", `{"mesh-object":{"store":"s","object":"o","size":1,"sha256":"` + d + `","form":1},"x":1}`}, {"a field the reference does not know", `{"mesh-object":{"store":"s","object":"o","size":1,"sha256":"` + d + `","form":1,"x":1}}`}, {"a digest that is no digest", `{"mesh-object":{"store":"s","object":"o","size":1,"sha256":"zz","form":1}}`}, {"another form", `{"mesh-object":{"store":"s","object":"o","size":1,"sha256":"` + d + `","form":2}}`}, {"no store", `{"mesh-object":{"object":"o","size":1,"sha256":"` + d + `","form":1}}`}, } for _, r := range rows { if _, ok := ReadRef([]byte(r.body)); ok { t.Errorf("%s: read as a reference", r.name) } } } // TestABodyIsAReferenceOnlyWhenItIsExactlyOne runs the tests of this package that were merged to keep the module within its test budget (design 47 G §419), each as a subtest. func TestABodyIsAReferenceOnlyWhenItIsExactlyOne(t *testing.T) { t.Run("ABodyIsAReferenceOnlyWhenItIsExactlyOne", subABodyIsAReferenceOnlyWhenItIsExactlyOne) t.Run("ABodyOverTheMessageLimitIsSentAsAReference", subABodyOverTheMessageLimitIsSentAsAReference) t.Run("ABundleReadsASentObjectThroughTheRuntime", subABundleReadsASentObjectThroughTheRuntime) t.Run("AFoundationPartsSentStoreAgesFromItsSendLog", subAFoundationPartsSentStoreAgesFromItsSendLog) t.Run("TheObjectToolsReadEverythingAndDropOnlyWhatIsNotLive", subTheObjectToolsReadEverythingAndDropOnlyWhatIsNotLive) t.Run("ValuesOfAnySizeThroughTheRuntime", subValuesOfAnySizeThroughTheRuntime) t.Run("AWriteLostLeavesNoObjectBehind", subAWriteLostLeavesNoObjectBehind) t.Run("AValueLargerThanTheStoreTakesIsRefused", subAValueLargerThanTheStoreTakesIsRefused) }