Commit 4fe39597 authored by Joshua Gutow's avatar Joshua Gutow

Address PR feedback

parent 40724cea
...@@ -72,16 +72,12 @@ func (ch *Channel) AddFrame(frame Frame, l1InclusionBlock eth.L1BlockRef) error ...@@ -72,16 +72,12 @@ func (ch *Channel) AddFrame(frame Frame, l1InclusionBlock eth.L1BlockRef) error
// Prune frames with a number higher than the closing frame number when we receive a closing frame // Prune frames with a number higher than the closing frame number when we receive a closing frame
if frame.IsLast && ch.endFrameNumber < ch.highestFrameNumber { if frame.IsLast && ch.endFrameNumber < ch.highestFrameNumber {
// Do a linear scan over saved inputs instead of ranging over ID numbers // Do a linear scan over saved inputs instead of ranging over ID numbers
var idsToPrune []uint64
for id, prunedFrame := range ch.inputs { for id, prunedFrame := range ch.inputs {
if id >= uint64(ch.endFrameNumber) { if id >= uint64(ch.endFrameNumber) {
idsToPrune = append(idsToPrune, id) delete(ch.inputs, id)
} }
ch.size -= frameSize(prunedFrame) ch.size -= frameSize(prunedFrame)
} }
for _, id := range idsToPrune {
delete(ch.inputs, id)
}
ch.highestFrameNumber = ch.endFrameNumber ch.highestFrameNumber = ch.endFrameNumber
} }
// Update highest seen frame number after pruning // Update highest seen frame number after pruning
...@@ -141,7 +137,7 @@ func (ch *Channel) Reader() io.Reader { ...@@ -141,7 +137,7 @@ func (ch *Channel) Reader() io.Reader {
if !ok { if !ok {
panic("dev error in channel.Reader. Must be called after the channel is ready.") panic("dev error in channel.Reader. Must be called after the channel is ready.")
} }
readers = append(readers, bytes.NewBuffer(frame.Data)) readers = append(readers, bytes.NewReader(frame.Data))
} }
return io.MultiReader(readers...) return io.MultiReader(readers...)
} }
......
...@@ -61,6 +61,14 @@ func TestFrameValidity(t *testing.T) { ...@@ -61,6 +61,14 @@ func TestFrameValidity(t *testing.T) {
shouldErr: []bool{false, true}, shouldErr: []bool{false, true},
sizes: []uint64{204, 204}, sizes: []uint64{204, 204},
}, },
{
name: "duplicate closing frames",
frames: []Frame{
{ID: id, FrameNumber: 2, IsLast: true, Data: []byte("four")},
{ID: id, FrameNumber: 2, IsLast: true, Data: []byte("seven__")}},
shouldErr: []bool{false, true},
sizes: []uint64{204, 204},
},
{ {
name: "frame past closing", name: "frame past closing",
frames: []Frame{ frames: []Frame{
...@@ -77,6 +85,14 @@ func TestFrameValidity(t *testing.T) { ...@@ -77,6 +85,14 @@ func TestFrameValidity(t *testing.T) {
shouldErr: []bool{false, false}, shouldErr: []bool{false, false},
sizes: []uint64{207, 204}, sizes: []uint64{207, 204},
}, },
{
name: "multiple valid frames",
frames: []Frame{
{ID: id, FrameNumber: 10, Data: []byte("seven__")},
{ID: id, FrameNumber: 2, Data: []byte("four")}},
shouldErr: []bool{false, false},
sizes: []uint64{207, 411},
},
} }
for _, tc := range testCases { for _, tc := range testCases {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment