@@ -150,6 +150,7 @@ public async Task Open_WhenSuccessOpenThenAttachStreamIsClosed_IsBroken()
150150 tcsSecondMoveAttachStream . TrySetResult ( false ) ; // attach stream is closed
151151 await Task . Delay ( 500 ) ;
152152 Assert . True ( session . IsBroken ) ;
153+ await CheckIsBrokenAndDeleteSessionOneTime ( session ) ;
153154 }
154155
155156 [ Fact ]
@@ -164,6 +165,7 @@ public async Task Open_WhenSuccessOpenThenAttachStreamSendRpcException_IsBroken(
164165 new YdbException ( new RpcException ( Grpc . Core . Status . DefaultCancelled ) ) ) ; // attach stream is closed
165166 await Task . Delay ( 500 ) ;
166167 Assert . True ( session . IsBroken ) ;
168+ await CheckIsBrokenAndDeleteSessionOneTime ( session ) ;
167169 }
168170
169171 [ Fact ]
@@ -176,7 +178,7 @@ public async Task Open_WhenSuccessOpenThenAttachStreamSendBadSession_IsBroken()
176178 Assert . False ( session . IsBroken ) ;
177179 tcsSecondMoveAttachStream . SetResult ( true ) ; // attach stream is closed
178180 await Task . Delay ( 500 ) ;
179- Assert . True ( session . IsBroken ) ;
181+ await CheckIsBrokenAndDeleteSessionNeverTimes ( session ) ;
180182 }
181183
182184 [ Fact ]
@@ -186,16 +188,8 @@ public async Task Delete_WhenSuccessOpenSession_IsBroken()
186188 var tcsSecondMoveAttachStream = SetupAttachStream ( ) ;
187189 var session = _poolingSessionFactory . NewSession ( _poolingSessionSource ) ;
188190 await session . Open ( CancellationToken . None ) ;
189- _mockIDriver . Setup ( driver => driver . UnaryCall (
190- QueryService . DeleteSessionMethod ,
191- It . Is < DeleteSessionRequest > ( request => request . SessionId . Equals ( SessionId ) ) ,
192- It . Is < GrpcRequestSettings > ( grpcRequestSettings => grpcRequestSettings . NodeId == NodeId )
193- ) ) . ReturnsAsync ( new DeleteSessionResponse { Status = StatusIds . Types . StatusCode . Success } ) ;
194191 Assert . False ( session . IsBroken ) ;
195- await session . DeleteSession ( ) ;
196- Assert . True ( session . IsBroken ) ;
197- _mockIDriver . Verify ( driver => driver . UnaryCall ( QueryService . DeleteSessionMethod ,
198- It . IsAny < DeleteSessionRequest > ( ) , It . IsAny < GrpcRequestSettings > ( ) ) ) ;
192+ await CheckIsBrokenAndDeleteSessionOneTime ( session ) ;
199193 tcsSecondMoveAttachStream . TrySetResult ( false ) ;
200194 }
201195
@@ -206,17 +200,10 @@ public async Task Delete_WhenSuccessOpenSessionBadSessionInAttachStream_IsBroken
206200 var tcsSecondMoveAttachStream = SetupAttachStream ( ) ;
207201 var session = _poolingSessionFactory . NewSession ( _poolingSessionSource ) ;
208202 await session . Open ( CancellationToken . None ) ;
209- _mockIDriver . Setup ( driver => driver . UnaryCall (
210- QueryService . DeleteSessionMethod ,
211- It . Is < DeleteSessionRequest > ( request => request . SessionId . Equals ( SessionId ) ) ,
212- It . Is < GrpcRequestSettings > ( grpcRequestSettings => grpcRequestSettings . NodeId == NodeId )
213- ) ) . ReturnsAsync ( new DeleteSessionResponse { Status = StatusIds . Types . StatusCode . Success } ) ;
214203 Assert . False ( session . IsBroken ) ;
215204 session . OnNotSuccessStatusCode ( StatusCode . BadSession ) ;
216- await session . DeleteSession ( ) ;
217205 Assert . True ( session . IsBroken ) ;
218- _mockIDriver . Verify ( driver => driver . UnaryCall ( QueryService . DeleteSessionMethod ,
219- It . IsAny < DeleteSessionRequest > ( ) , It . IsAny < GrpcRequestSettings > ( ) ) , Times . Never ) ;
206+ await CheckIsBrokenAndDeleteSessionNeverTimes ( session ) ;
220207 tcsSecondMoveAttachStream . TrySetResult ( false ) ;
221208 }
222209
@@ -262,6 +249,32 @@ public async Task RollbackTransaction_WhenSuccessOpenSession_AssertNodeId_Sessio
262249 tcsSecondMoveAttachStream . TrySetResult ( false ) ;
263250 }
264251
252+ private async Task CheckIsBrokenAndDeleteSessionNeverTimes ( PoolingSession session )
253+ {
254+ _mockIDriver . Setup ( driver => driver . UnaryCall (
255+ QueryService . DeleteSessionMethod ,
256+ It . IsAny < DeleteSessionRequest > ( ) ,
257+ It . IsAny < GrpcRequestSettings > ( )
258+ ) ) . ReturnsAsync ( new DeleteSessionResponse { Status = StatusIds . Types . StatusCode . Success } ) ;
259+ await session . DeleteSession ( ) ;
260+ _mockIDriver . Verify ( driver => driver . UnaryCall ( QueryService . DeleteSessionMethod ,
261+ It . IsAny < DeleteSessionRequest > ( ) , It . IsAny < GrpcRequestSettings > ( ) ) , Times . Never ( ) ) ;
262+ Assert . True ( session . IsBroken ) ;
263+ }
264+
265+ private async Task CheckIsBrokenAndDeleteSessionOneTime ( PoolingSession session )
266+ {
267+ _mockIDriver . Setup ( driver => driver . UnaryCall (
268+ QueryService . DeleteSessionMethod ,
269+ It . Is < DeleteSessionRequest > ( request => request . SessionId . Equals ( SessionId ) ) ,
270+ It . Is < GrpcRequestSettings > ( grpcRequestSettings => grpcRequestSettings . NodeId == NodeId )
271+ ) ) . ReturnsAsync ( new DeleteSessionResponse { Status = StatusIds . Types . StatusCode . Success } ) ;
272+ await session . DeleteSession ( ) ;
273+ _mockIDriver . Verify ( driver => driver . UnaryCall ( QueryService . DeleteSessionMethod ,
274+ It . IsAny < DeleteSessionRequest > ( ) , It . IsAny < GrpcRequestSettings > ( ) ) ) ;
275+ Assert . True ( session . IsBroken ) ;
276+ }
277+
265278 private TaskCompletionSource < bool > SetupAttachStream ( )
266279 {
267280 var tcsSecondMoveAttachStream = new TaskCompletionSource < bool > ( ) ;
0 commit comments