@@ -1395,6 +1395,107 @@ public async Task ReadAsync_WhenFailDeserializer_ThrowReaderExceptionAndInvokeRe
13951395 ( await Assert . ThrowsAsync < ReaderException > ( ( ) => reader . ReadAsync ( ) . AsTask ( ) ) ) . Message ) ;
13961396 }
13971397
1398+ /*
1399+ *
1400+ Performed invocations:
1401+
1402+ Mock<IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>:1> (stream):
1403+
1404+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Write({ "initRequest": { "topicsReadSettings": [ { "path": "/topic" } ], "consumer": "Consumer Tester" } })
1405+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.MoveNextAsync()
1406+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Current
1407+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Write({ "readRequest": { "bytesSize": "1000" } })
1408+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.AuthToken
1409+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.MoveNextAsync()
1410+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Current
1411+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.MoveNextAsync()
1412+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.AuthToken
1413+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Write({ "startPartitionSessionResponse": { "partitionSessionId": "1" } })
1414+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Current
1415+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.MoveNextAsync()
1416+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.AuthToken
1417+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Write({ "updateTokenRequest": { "token": "Token2" } })
1418+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Write({ "commitOffsetRequest": { "commitOffsets": [ { "partitionSessionId": "1", "offsets": [ { "end": "1" } ] } ] } })
1419+ IBidirectionalStream<StreamReadMessage.Types.FromClient, StreamReadMessage.Types.FromServer>.Current
1420+ */
1421+ [ Fact ]
1422+ public async Task ReadAsync_WhenTokenIsUpdatedOneTime_SuccessUpdateToken ( )
1423+ {
1424+ _mockStream . SetupSequence ( stream => stream . AuthToken )
1425+ . Returns ( "Token1" )
1426+ . Returns ( "Token1" )
1427+ . Returns ( "Token2" )
1428+ . Returns ( "Token2" ) ;
1429+
1430+ var tcsMoveNext = new TaskCompletionSource < bool > ( ) ;
1431+ var tcsCommitMessage = new TaskCompletionSource < bool > ( ) ;
1432+
1433+ _mockStream . SetupSequence ( stream => stream . Write ( It . IsAny < FromClient > ( ) ) )
1434+ . Returns ( Task . CompletedTask )
1435+ . Returns ( Task . CompletedTask )
1436+ . Returns ( ( ) =>
1437+ {
1438+ tcsMoveNext . SetResult ( true ) ;
1439+
1440+ return Task . CompletedTask ;
1441+ } )
1442+ . Returns ( Task . CompletedTask )
1443+ . Returns ( ( ) =>
1444+ {
1445+ tcsCommitMessage . SetResult ( true ) ;
1446+
1447+ return Task . CompletedTask ;
1448+ } ) ;
1449+
1450+ _mockStream . SetupSequence ( stream => stream . MoveNextAsync ( ) )
1451+ . ReturnsAsync ( true )
1452+ . ReturnsAsync ( true )
1453+ . Returns ( new ValueTask < bool > ( tcsMoveNext . Task ) )
1454+ . Returns ( new ValueTask < bool > ( tcsCommitMessage . Task ) )
1455+ . Returns ( new ValueTask < bool > ( new TaskCompletionSource < bool > ( ) . Task ) ) ;
1456+
1457+ _mockStream . SetupSequence ( stream => stream . Current )
1458+ . Returns ( InitResponseFromServer )
1459+ . Returns ( StartPartitionSessionRequest ( ) )
1460+ . Returns ( ReadResponse ( 0 , BitConverter . GetBytes ( 100 ) ) )
1461+ . Returns ( CommitOffsetResponse ( ) ) ;
1462+
1463+ using var reader = new ReaderBuilder < int > ( _mockIDriver . Object )
1464+ {
1465+ ConsumerName = "Consumer Tester" ,
1466+ MemoryUsageMaxBytes = 1000 ,
1467+ SubscribeSettings = { new SubscribeSettings ( "/topic" ) }
1468+ } . Build ( ) ;
1469+
1470+ var message = await reader . ReadAsync ( ) ;
1471+ await message . CommitAsync ( ) ;
1472+ Assert . Equal ( 100 , message . Data ) ;
1473+
1474+ _mockStream . Verify ( stream => stream . Write ( It . IsAny < FromClient > ( ) ) , Times . Exactly ( 5 ) ) ;
1475+ _mockStream . Verify ( stream => stream . MoveNextAsync ( ) , Times . Between ( 4 , 5 , Range . Inclusive ) ) ;
1476+ _mockStream . Verify ( stream => stream . Current , Times . Exactly ( 4 ) ) ;
1477+
1478+ _mockStream . Verify ( stream => stream . Write ( It . Is < FromClient > ( msg =>
1479+ msg . InitRequest != null &&
1480+ msg . InitRequest . Consumer == "Consumer Tester" &&
1481+ msg . InitRequest . TopicsReadSettings [ 0 ] . Path == "/topic" ) ) ) ;
1482+ _mockStream . Verify ( stream => stream . Write ( It . Is < FromClient > ( msg =>
1483+ msg . ReadRequest != null &&
1484+ msg . ReadRequest . BytesSize == 1000 ) ) ) ;
1485+ _mockStream . Verify ( stream => stream . Write ( It . Is < FromClient > ( msg =>
1486+ msg . StartPartitionSessionResponse != null &&
1487+ msg . StartPartitionSessionResponse . PartitionSessionId == 1 ) ) ) ;
1488+ _mockStream . Verify ( stream => stream . Write ( It . Is < FromClient > ( msg =>
1489+ msg . ReadRequest != null ) ) ) ;
1490+ _mockStream . Verify ( stream => stream . Write ( It . Is < FromClient > ( msg =>
1491+ msg . CommitOffsetRequest != null &&
1492+ msg . CommitOffsetRequest . CommitOffsets [ 0 ] . PartitionSessionId == 1 &&
1493+ msg . CommitOffsetRequest . CommitOffsets [ 0 ] . Offsets [ 0 ] . End == 1 ) ) ) ;
1494+ _mockStream . Verify ( stream => stream . Write ( It . Is < FromClient > ( msg =>
1495+ msg . UpdateTokenRequest != null &&
1496+ msg . UpdateTokenRequest . Token == "Token2" ) ) ) ;
1497+ }
1498+
13981499 private class FailDeserializer : IDeserializer < int >
13991500 {
14001501 public int Deserialize ( byte [ ] data )
0 commit comments