@@ -33,21 +33,30 @@ namespace MongoDB.Driver.Core.Tests.Core.Operations
33
33
public class RetryableWriteOperationExecutorTests
34
34
{
35
35
[ Theory ]
36
- [ InlineData ( false , false , false , false ) ]
37
- [ InlineData ( false , false , true , false ) ]
38
- [ InlineData ( false , true , false , false ) ]
39
- [ InlineData ( false , true , true , false ) ]
40
- [ InlineData ( true , false , false , false ) ]
41
- [ InlineData ( true , false , true , false ) ]
42
- [ InlineData ( true , true , false , true ) ]
43
- [ InlineData ( true , true , true , false ) ]
36
+ [ InlineData ( false , false , false , false , false ) ]
37
+ [ InlineData ( false , false , false , true , false ) ]
38
+ [ InlineData ( false , false , true , false , false ) ]
39
+ [ InlineData ( false , false , true , true , false ) ]
40
+ [ InlineData ( false , true , false , false , false ) ]
41
+ [ InlineData ( false , true , false , true , false ) ]
42
+ [ InlineData ( false , true , true , false , false ) ]
43
+ [ InlineData ( false , true , true , true , false ) ]
44
+ [ InlineData ( true , false , false , false , false ) ]
45
+ [ InlineData ( true , false , false , true , false ) ]
46
+ [ InlineData ( true , false , true , false , false ) ]
47
+ [ InlineData ( true , false , true , true , false ) ]
48
+ [ InlineData ( true , true , false , false , false ) ]
49
+ [ InlineData ( true , true , false , true , false ) ]
50
+ [ InlineData ( true , true , true , false , true ) ]
51
+ [ InlineData ( true , true , true , false , true ) ]
44
52
public void DoesContextAllowRetries_should_return_expected_result (
45
53
bool retryRequested ,
46
54
bool areRetryableWritesSupported ,
55
+ bool hasSessionId ,
47
56
bool isInTransaction ,
48
57
bool expectedResult )
49
58
{
50
- var context = CreateContext ( retryRequested , areRetryableWritesSupported , isInTransaction ) ;
59
+ var context = CreateContext ( retryRequested , areRetryableWritesSupported , hasSessionId , isInTransaction ) ;
51
60
52
61
var result = RetryableWriteOperationExecutorReflector . DoesContextAllowRetries ( context ) ;
53
62
@@ -72,10 +81,10 @@ public void IsOperationAcknowledged_should_return_expected_result(
72
81
}
73
82
74
83
// private methods
75
- private IWriteBinding CreateBinding ( bool areRetryableWritesSupported , bool isInTransaction )
84
+ private IWriteBinding CreateBinding ( bool areRetryableWritesSupported , bool hasSessionId , bool isInTransaction )
76
85
{
77
86
var mockBinding = new Mock < IWriteBinding > ( ) ;
78
- var session = CreateSession ( isInTransaction ) ;
87
+ var session = CreateSession ( hasSessionId , isInTransaction ) ;
79
88
var channelSource = CreateChannelSource ( areRetryableWritesSupported ) ;
80
89
mockBinding . SetupGet ( m => m . Session ) . Returns ( session ) ;
81
90
mockBinding . Setup ( m => m . GetWriteChannelSource ( CancellationToken . None ) ) . Returns ( channelSource ) ;
@@ -116,9 +125,9 @@ private ConnectionDescription CreateConnectionDescription(bool areRetryableWrite
116
125
return connectionDescription ;
117
126
}
118
127
119
- private RetryableWriteContext CreateContext ( bool retryRequested , bool areRetryableWritesSupported , bool isInTransaction )
128
+ private RetryableWriteContext CreateContext ( bool retryRequested , bool areRetryableWritesSupported , bool hasSessionId , bool isInTransaction )
120
129
{
121
- var binding = CreateBinding ( areRetryableWritesSupported , isInTransaction ) ;
130
+ var binding = CreateBinding ( areRetryableWritesSupported , hasSessionId , isInTransaction ) ;
122
131
return RetryableWriteContext . Create ( binding , retryRequested , CancellationToken . None ) ;
123
132
}
124
133
@@ -130,9 +139,10 @@ private IRetryableWriteOperation<BsonDocument> CreateOperation(bool withWriteCon
130
139
return mockOperation . Object ;
131
140
}
132
141
133
- private ICoreSessionHandle CreateSession ( bool isInTransaction )
142
+ private ICoreSessionHandle CreateSession ( bool hasSessionId , bool isInTransaction )
134
143
{
135
144
var mockSession = new Mock < ICoreSessionHandle > ( ) ;
145
+ mockSession . SetupGet ( m => m . Id ) . Returns ( hasSessionId ? new BsonDocument ( ) : null ) ;
136
146
mockSession . SetupGet ( m => m . IsInTransaction ) . Returns ( isInTransaction ) ;
137
147
return mockSession . Object ;
138
148
}
0 commit comments