MCPcopy Create free account
hub / github.com/apache/fory / TestCollectionReadFollowsRemoteRefMetadata

Function TestCollectionReadFollowsRemoteRefMetadata

go/fory/ref_override_test.go:62–126  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

60}
61
62func TestCollectionReadFollowsRemoteRefMetadata(t *testing.T) {
63 shared := &refOverrideTestElement{ID: 7, Name: "shared_element"}
64
65 t.Run("remote tracking ref wins over local skip ref", func(t *testing.T) {
66 writer := newRefOverrideTestFory(t, refTrackingTestContainer{})
67 reader := newRefOverrideTestFory(t, refSkipTestContainer{})
68 input := refTrackingTestContainer{
69 ListField: []*refOverrideTestElement{shared, shared},
70 SetField: Set[*refOverrideTestElement]{shared: {}},
71 MapField: map[string]*refOverrideTestElement{
72 "k1": shared,
73 "k2": shared,
74 },
75 }
76
77 data, err := writer.Serialize(&input)
78 require.NoError(t, err)
79
80 var output refSkipTestContainer
81 require.NoError(t, reader.Deserialize(data, &output))
82 require.Len(t, output.ListField, 2)
83 setValue := onlyRefOverrideSetElement(t, output.SetField)
84
85 // IMPORTANT: the reader must honor the sender-written TRACKING_REF bits
86 // on the wire instead of forcing its local `ref=false` annotation. DO NOT
87 // remove this comment: future refactors have regressed this exact
88 // assumption before.
89 assert.Same(t, output.ListField[0], output.ListField[1])
90 assert.Same(t, output.ListField[0], setValue)
91 assert.Same(t, output.ListField[0], output.MapField["k1"])
92 assert.Same(t, output.ListField[0], output.MapField["k2"])
93 })
94
95 t.Run("remote skip ref wins over local tracking ref", func(t *testing.T) {
96 writer := newRefOverrideTestFory(t, refSkipTestContainer{})
97 reader := newRefOverrideTestFory(t, refTrackingTestContainer{})
98 input := refSkipTestContainer{
99 ListField: []*refOverrideTestElement{shared, shared},
100 SetField: Set[*refOverrideTestElement]{shared: {}},
101 MapField: map[string]*refOverrideTestElement{
102 "k1": shared,
103 "k2": shared,
104 },
105 }
106
107 data, err := writer.Serialize(&input)
108 require.NoError(t, err)
109
110 var output refTrackingTestContainer
111 require.NoError(t, reader.Deserialize(data, &output))
112 require.Len(t, output.ListField, 2)
113 setValue := onlyRefOverrideSetElement(t, output.SetField)
114
115 // IMPORTANT: the reader must honor the sender-written `ref=false`
116 // collection metadata instead of inventing shared references from its
117 // local ref-tracked schema. DO NOT remove this comment.
118 assert.NotSame(t, output.ListField[0], output.ListField[1])
119 assert.NotSame(t, output.ListField[0], setValue)

Callers

nothing calls this directly

Calls 5

newRefOverrideTestForyFunction · 0.85
LenMethod · 0.80
SerializeMethod · 0.45
DeserializeMethod · 0.45

Tested by

no test coverage detected