@@ -199,7 +199,8 @@ func TestWriterImpl_WriteCodecs(t *testing.T) {
199199 Data : bytes .NewReader (messContent ),
200200 }}))
201201
202- require .Equal (t , rawtopiccommon .CodecRaw , <- messReceived )
202+ mess := <- messReceived
203+ require .Equal (t , rawtopiccommon .CodecRaw , mess )
203204 })
204205 t .Run ("ForceGzip" , func (t * testing.T ) {
205206 var err error
@@ -540,67 +541,107 @@ func TestWriterImpl_Reconnect(t *testing.T) {
540541}
541542
542543func TestWriterImpl_CloseWithFlush (t * testing.T ) {
543- e := newTestEnv ( t , nil )
544+ type flushMethod func ( ctx context. Context , writer * WriterReconnector ) error
544545
545- messageTime := time . Date ( 2023 , 9 , 7 , 11 , 34 , 0 , 0 , time . UTC )
546- messageData := [] byte ( "123" )
546+ f := func ( t testing. TB , flush flushMethod ) {
547+ e := newTestEnv ( t , nil )
547548
548- const seqNo = 36
549+ messageTime := time .Date (2023 , 9 , 7 , 11 , 34 , 0 , 0 , time .UTC )
550+ messageData := []byte ("123" )
549551
550- writeCompleted := make (empty.Chan )
551- e .stream .EXPECT ().Send (& rawtopicwriter.WriteRequest {
552- Messages : []rawtopicwriter.MessageData {
553- {
554- SeqNo : seqNo ,
555- CreatedAt : messageTime ,
556- UncompressedSize : int64 (len (messageData )),
557- Partitioning : rawtopicwriter.Partitioning {},
558- Data : messageData ,
552+ const seqNo = 36
553+
554+ writeCompleted := make (empty.Chan )
555+ e .stream .EXPECT ().Send (& rawtopicwriter.WriteRequest {
556+ Messages : []rawtopicwriter.MessageData {
557+ {
558+ SeqNo : seqNo ,
559+ CreatedAt : messageTime ,
560+ UncompressedSize : int64 (len (messageData )),
561+ Partitioning : rawtopicwriter.Partitioning {},
562+ Data : messageData ,
563+ },
559564 },
560- },
561- Codec : rawtopiccommon .CodecRaw ,
562- }).Return (nil )
565+ Codec : rawtopiccommon .CodecRaw ,
566+ }).Return (nil )
563567
564- closeCompleted := make (empty.Chan )
565- go func () {
566- err := e .writer .Write (e .ctx , []PublicMessage {{
567- SeqNo : seqNo ,
568- CreatedAt : messageTime ,
569- Data : bytes .NewReader (messageData ),
570- }})
571- close (writeCompleted )
572- require .NoError (t , err )
573- }()
568+ flushCompleted := make (empty.Chan )
569+ go func () {
570+ err := e .writer .Write (e .ctx , []PublicMessage {{
571+ SeqNo : seqNo ,
572+ CreatedAt : messageTime ,
573+ Data : bytes .NewReader (messageData ),
574+ }})
575+ close (writeCompleted )
576+ require .NoError (t , err )
577+ }()
574578
575- <- writeCompleted
579+ <- writeCompleted
576580
577- go func () {
578- require .NoError (t , e .writer .Flush (e .ctx ))
579- require .NoError (t , e .writer .Close (e .ctx ))
580- close (closeCompleted )
581- }()
581+ go func () {
582+ require .NoError (t , flush (e .ctx , e .writer ))
583+ close (flushCompleted )
584+ }()
582585
583- select {
584- case <- closeCompleted :
585- t .Fatal ("flush and close must complete only after message is acked" )
586- case <- time .After (100 * time .Millisecond ):
587- // pass
588- }
586+ select {
587+ case <- flushCompleted :
588+ t .Fatal ("flush and close must complete only after message is acked" )
589+ case <- time .After (10 * time .Millisecond ):
590+ // pass
591+ }
589592
590- e .sendFromServer (& rawtopicwriter.WriteResult {
591- Acks : []rawtopicwriter.WriteAck {
592- {
593- SeqNo : seqNo ,
594- MessageWriteStatus : rawtopicwriter.MessageWriteStatus {
595- Type : rawtopicwriter .WriteStatusTypeWritten ,
596- WrittenOffset : 4 ,
593+ e .sendFromServer (& rawtopicwriter.WriteResult {
594+ Acks : []rawtopicwriter.WriteAck {
595+ {
596+ SeqNo : seqNo ,
597+ MessageWriteStatus : rawtopicwriter.MessageWriteStatus {
598+ Type : rawtopicwriter .WriteStatusTypeWritten ,
599+ WrittenOffset : 4 ,
600+ },
597601 },
598602 },
603+ PartitionID : e .partitionID ,
604+ })
605+
606+ xtest .WaitChannelClosed (t , flushCompleted )
607+ }
608+
609+ tests := []struct {
610+ name string
611+ flush flushMethod
612+ }{
613+ {
614+ name : "close" ,
615+ flush : func (ctx context.Context , writer * WriterReconnector ) error {
616+ return writer .Close (ctx )
617+ },
599618 },
600- PartitionID : e .partitionID ,
601- })
619+ {
620+ name : "flush" ,
621+ flush : func (ctx context.Context , writer * WriterReconnector ) error {
622+ return writer .Close (ctx )
623+ },
624+ },
625+ {
626+ name : "flush and close" ,
627+ flush : func (ctx context.Context , writer * WriterReconnector ) error {
628+ err := writer .Flush (ctx )
629+ if err != nil {
630+ return err
631+ }
632+
633+ return writer .Close (ctx )
634+ },
635+ },
636+ }
602637
603- xtest .WaitChannelClosed (t , closeCompleted )
638+ for _ , test := range tests {
639+ t .Run (test .name , func (t * testing.T ) {
640+ xtest .TestManyTimes (t , func (t testing.TB ) {
641+ f (t , test .flush )
642+ })
643+ })
644+ }
604645}
605646
606647func TestAllMessagesHasSameBufCodec (t * testing.T ) {
0 commit comments