@@ -138,6 +138,38 @@ func TestChannels(t *testing.T) {
138138 require .Equal (t , state .Status (), datatransfer .Ongoing )
139139 })
140140
141+ t .Run ("datasent/queued when transfer is already finished" , func (t * testing.T ) {
142+ ds := dss .MutexWrap (datastore .NewMapDatastore ())
143+ dir := os .TempDir ()
144+ cidLists , err := cidlists .NewCIDLists (dir )
145+ require .NoError (t , err )
146+ channelList , err := channels .New (ds , cidLists , notifier , decoderByType , decoderByType , & fakeEnv {}, peers [0 ])
147+ require .NoError (t , err )
148+ err = channelList .Start (ctx )
149+ require .NoError (t , err )
150+
151+ chid , err := channelList .CreateNew (peers [0 ], tid1 , cids [0 ], selector , fv1 , peers [0 ], peers [0 ], peers [1 ])
152+ require .NoError (t , err )
153+ checkEvent (ctx , t , received , datatransfer .Open )
154+
155+ // move the channel to `TransferFinished` state.
156+ require .NoError (t , channelList .FinishTransfer (chid ))
157+ state := checkEvent (ctx , t , received , datatransfer .FinishTransfer )
158+ require .Equal (t , datatransfer .TransferFinished , state .Status ())
159+
160+ // send a data-sent event and ensure it's a no-op
161+ _ , err = channelList .DataSent (chid , cids [1 ], 1 )
162+ require .NoError (t , err )
163+ state = checkEvent (ctx , t , received , datatransfer .DataSent )
164+ require .Equal (t , datatransfer .TransferFinished , state .Status ())
165+
166+ // send a data-queued event and ensure it's a no-op.
167+ _ , err = channelList .DataQueued (chid , cids [1 ], 1 )
168+ require .NoError (t , err )
169+ state = checkEvent (ctx , t , received , datatransfer .DataQueued )
170+ require .Equal (t , datatransfer .TransferFinished , state .Status ())
171+ })
172+
141173 t .Run ("updating send/receive values" , func (t * testing.T ) {
142174 ds := dss .MutexWrap (datastore .NewMapDatastore ())
143175 dir := os .TempDir ()
0 commit comments