@@ -196,7 +196,8 @@ func TestWriterImpl_WriteCodecs(t *testing.T) {
196196 Data : bytes .NewReader (messContent ),
197197 }}))
198198
199- require .Equal (t , rawtopiccommon .CodecRaw , <- messReceived )
199+ mess := <- messReceived
200+ require .Equal (t , rawtopiccommon .CodecRaw , mess )
200201 })
201202 t .Run ("ForceGzip" , func (t * testing.T ) {
202203 var err error
@@ -531,67 +532,107 @@ func TestWriterImpl_Reconnect(t *testing.T) {
531532}
532533
533534func TestWriterImpl_CloseWithFlush (t * testing.T ) {
534- e := newTestEnv ( t , nil )
535+ type flushMethod func ( ctx context. Context , writer * WriterReconnector ) error
535536
536- messageTime := time . Date ( 2023 , 9 , 7 , 11 , 34 , 0 , 0 , time . UTC )
537- messageData := [] byte ( "123" )
537+ f := func ( t testing. TB , flush flushMethod ) {
538+ e := newTestEnv ( t , nil )
538539
539- const seqNo = 36
540+ messageTime := time .Date (2023 , 9 , 7 , 11 , 34 , 0 , 0 , time .UTC )
541+ messageData := []byte ("123" )
540542
541- writeCompleted := make (empty.Chan )
542- e .stream .EXPECT ().Send (& rawtopicwriter.WriteRequest {
543- Messages : []rawtopicwriter.MessageData {
544- {
545- SeqNo : seqNo ,
546- CreatedAt : messageTime ,
547- UncompressedSize : int64 (len (messageData )),
548- Partitioning : rawtopicwriter.Partitioning {},
549- Data : messageData ,
543+ const seqNo = 36
544+
545+ writeCompleted := make (empty.Chan )
546+ e .stream .EXPECT ().Send (& rawtopicwriter.WriteRequest {
547+ Messages : []rawtopicwriter.MessageData {
548+ {
549+ SeqNo : seqNo ,
550+ CreatedAt : messageTime ,
551+ UncompressedSize : int64 (len (messageData )),
552+ Partitioning : rawtopicwriter.Partitioning {},
553+ Data : messageData ,
554+ },
550555 },
551- },
552- Codec : rawtopiccommon .CodecRaw ,
553- }).Return (nil )
556+ Codec : rawtopiccommon .CodecRaw ,
557+ }).Return (nil )
554558
555- closeCompleted := make (empty.Chan )
556- go func () {
557- err := e .writer .Write (e .ctx , []PublicMessage {{
558- SeqNo : seqNo ,
559- CreatedAt : messageTime ,
560- Data : bytes .NewReader (messageData ),
561- }})
562- close (writeCompleted )
563- require .NoError (t , err )
564- }()
559+ flushCompleted := make (empty.Chan )
560+ go func () {
561+ err := e .writer .Write (e .ctx , []PublicMessage {{
562+ SeqNo : seqNo ,
563+ CreatedAt : messageTime ,
564+ Data : bytes .NewReader (messageData ),
565+ }})
566+ close (writeCompleted )
567+ require .NoError (t , err )
568+ }()
565569
566- <- writeCompleted
570+ <- writeCompleted
567571
568- go func () {
569- require .NoError (t , e .writer .Flush (e .ctx ))
570- require .NoError (t , e .writer .Close (e .ctx ))
571- close (closeCompleted )
572- }()
572+ go func () {
573+ require .NoError (t , flush (e .ctx , e .writer ))
574+ close (flushCompleted )
575+ }()
573576
574- select {
575- case <- closeCompleted :
576- t .Fatal ("flush and close must complete only after message is acked" )
577- case <- time .After (100 * time .Millisecond ):
578- // pass
579- }
577+ select {
578+ case <- flushCompleted :
579+ t .Fatal ("flush and close must complete only after message is acked" )
580+ case <- time .After (10 * time .Millisecond ):
581+ // pass
582+ }
580583
581- e .sendFromServer (& rawtopicwriter.WriteResult {
582- Acks : []rawtopicwriter.WriteAck {
583- {
584- SeqNo : seqNo ,
585- MessageWriteStatus : rawtopicwriter.MessageWriteStatus {
586- Type : rawtopicwriter .WriteStatusTypeWritten ,
587- WrittenOffset : 4 ,
584+ e .sendFromServer (& rawtopicwriter.WriteResult {
585+ Acks : []rawtopicwriter.WriteAck {
586+ {
587+ SeqNo : seqNo ,
588+ MessageWriteStatus : rawtopicwriter.MessageWriteStatus {
589+ Type : rawtopicwriter .WriteStatusTypeWritten ,
590+ WrittenOffset : 4 ,
591+ },
588592 },
589593 },
594+ PartitionID : e .partitionID ,
595+ })
596+
597+ xtest .WaitChannelClosed (t , flushCompleted )
598+ }
599+
600+ tests := []struct {
601+ name string
602+ flush flushMethod
603+ }{
604+ {
605+ name : "close" ,
606+ flush : func (ctx context.Context , writer * WriterReconnector ) error {
607+ return writer .Close (ctx )
608+ },
590609 },
591- PartitionID : e .partitionID ,
592- })
610+ {
611+ name : "flush" ,
612+ flush : func (ctx context.Context , writer * WriterReconnector ) error {
613+ return writer .Close (ctx )
614+ },
615+ },
616+ {
617+ name : "flush and close" ,
618+ flush : func (ctx context.Context , writer * WriterReconnector ) error {
619+ err := writer .Flush (ctx )
620+ if err != nil {
621+ return err
622+ }
623+
624+ return writer .Close (ctx )
625+ },
626+ },
627+ }
593628
594- xtest .WaitChannelClosed (t , closeCompleted )
629+ for _ , test := range tests {
630+ t .Run (test .name , func (t * testing.T ) {
631+ xtest .TestManyTimes (t , func (t testing.TB ) {
632+ f (t , test .flush )
633+ })
634+ })
635+ }
595636}
596637
597638func TestAllMessagesHasSameBufCodec (t * testing.T ) {
0 commit comments