|
13 | 13 | * limitations under the License.
|
14 | 14 | */
|
15 | 15 |
|
16 |
| -using System; |
17 |
| -using System.Collections.Generic; |
18 |
| -using System.IO; |
19 |
| -using System.Reflection; |
20 |
| -using System.Threading; |
21 |
| -using System.Threading.Tasks; |
22 | 16 | using FluentAssertions;
|
23 | 17 | using MongoDB.Bson;
|
24 | 18 | using MongoDB.Bson.IO;
|
25 | 19 | using MongoDB.Bson.Serialization;
|
26 | 20 | using MongoDB.Bson.Serialization.Serializers;
|
27 |
| -using MongoDB.Bson.TestHelpers; |
28 | 21 | using MongoDB.Bson.TestHelpers.XunitExtensions;
|
29 | 22 | using MongoDB.Driver.Core.Bindings;
|
| 23 | +using MongoDB.Driver.Core.Clusters; |
| 24 | +using MongoDB.Driver.Core.Connections; |
| 25 | +using MongoDB.Driver.Core.Servers; |
30 | 26 | using MongoDB.Driver.Core.TestHelpers;
|
31 | 27 | using MongoDB.Driver.Core.WireProtocol.Messages.Encoders;
|
32 | 28 | using Moq;
|
| 29 | +using System; |
| 30 | +using System.Collections.Generic; |
| 31 | +using System.IO; |
| 32 | +using System.Net; |
| 33 | +using System.Reflection; |
| 34 | +using System.Threading; |
| 35 | +using System.Threading.Tasks; |
33 | 36 | using Xunit;
|
34 | 37 |
|
35 | 38 | namespace MongoDB.Driver.Core.Operations
|
@@ -369,43 +372,6 @@ void ProcessBatch_should_throw_when_resume_token_is_missing(
|
369 | 372 | exception.Message.Should().Be("Cannot provide resume functionality when the resume token is missing.");
|
370 | 373 | }
|
371 | 374 |
|
372 |
| - [Theory] |
373 |
| - [InlineData(1, false)] |
374 |
| - [InlineData(ServerErrorCode.HostNotFound, true)] |
375 |
| - [InlineData(ServerErrorCode.HostUnreachable, true)] |
376 |
| - [InlineData(ServerErrorCode.InterruptedAtShutdown, true)] |
377 |
| - [InlineData(ServerErrorCode.InterruptedDueToReplStateChange, true)] |
378 |
| - [InlineData(ServerErrorCode.NetworkTimeout, true)] |
379 |
| - [InlineData(ServerErrorCode.NotMaster, true)] |
380 |
| - [InlineData(ServerErrorCode.NotMasterNoSlaveOk, true)] |
381 |
| - [InlineData(ServerErrorCode.NotMasterOrSecondary, true)] |
382 |
| - [InlineData(ServerErrorCode.PrimarySteppedDown, true)] |
383 |
| - [InlineData(ServerErrorCode.ShutdownInProgress, true)] |
384 |
| - [InlineData(ServerErrorCode.SocketException, true)] |
385 |
| - [InlineData(ServerErrorCode.WriteConcernFailed, true)] |
386 |
| - public void CanResumeAfter_should_return_expected_result_for_MongoCommandExceptions(int code, bool expectedResult) |
387 |
| - { |
388 |
| - var subject = CreateSubject(); |
389 |
| - var exception = CoreExceptionHelper.CreateMongoCommandException(code); |
390 |
| - var result = subject.CanResumeAfter(exception); |
391 |
| - |
392 |
| - result.Should().Be(expectedResult); |
393 |
| - } |
394 |
| - |
395 |
| - [Theory] |
396 |
| - [InlineData(typeof(IOException), false)] |
397 |
| - [InlineData(typeof(MongoConnectionException), true)] |
398 |
| - [InlineData(typeof(MongoCursorNotFoundException), true)] |
399 |
| - [InlineData(typeof(MongoNotPrimaryException), true)] |
400 |
| - public void CanResumeAfter_should_return_expected_result_for_other_exceptions(Type exceptionType, bool expectedResult) |
401 |
| - { |
402 |
| - var subject = CreateSubject(); |
403 |
| - var exception = CoreExceptionHelper.CreateException(exceptionType); |
404 |
| - var result = subject.CanResumeAfter(exception); |
405 |
| - |
406 |
| - result.Should().Be(expectedResult); |
407 |
| - } |
408 |
| - |
409 | 375 | // private methods
|
410 | 376 | private ChangeStreamOperation<BsonDocument> CreateChangeStreamOperation()
|
411 | 377 | {
|
@@ -448,14 +414,46 @@ private RawBsonDocument ToRawDocument(BsonDocument document)
|
448 | 414 |
|
449 | 415 | internal static class ChangeStreamCursorReflector
|
450 | 416 | {
|
451 |
| - public static IReadBinding _binding(this ChangeStreamCursor<BsonDocument> cursor) => (IReadBinding)Reflector.GetFieldValue(cursor, nameof(_binding)); |
452 |
| - public static ChangeStreamOperation<BsonDocument> _changeStreamOperation(this ChangeStreamCursor<BsonDocument> cursor) => (ChangeStreamOperation<BsonDocument>)Reflector.GetFieldValue(cursor, nameof(_changeStreamOperation)); |
453 |
| - public static IEnumerable<BsonDocument> _current(this ChangeStreamCursor<BsonDocument> cursor) => (IEnumerable<BsonDocument>)Reflector.GetFieldValue(cursor, nameof(_current)); |
454 |
| - public static IAsyncCursor<RawBsonDocument> _cursor(this ChangeStreamCursor<BsonDocument> cursor) => (IAsyncCursor<RawBsonDocument>)Reflector.GetFieldValue(cursor, nameof(_cursor)); |
455 |
| - public static bool _disposed(this ChangeStreamCursor<BsonDocument> cursor) => (bool)Reflector.GetFieldValue(cursor, nameof(_disposed)); |
456 |
| - public static IBsonSerializer<BsonDocument> _documentSerializer(this ChangeStreamCursor<BsonDocument> cursor) => (IBsonSerializer<BsonDocument>)Reflector.GetFieldValue(cursor, nameof(_documentSerializer)); |
457 |
| - public static BsonDocument _resumeToken(this ChangeStreamCursor<BsonDocument> cursor) => (BsonDocument)Reflector.GetFieldValue(cursor, nameof(_resumeToken)); |
458 |
| - |
459 |
| - public static bool CanResumeAfter(this ChangeStreamCursor<BsonDocument> cursor, Exception exception) => (bool)Reflector.Invoke(cursor, nameof(CanResumeAfter), exception); |
| 417 | + public static IReadBinding _binding(this ChangeStreamCursor<BsonDocument> cursor) |
| 418 | + { |
| 419 | + var fieldInfo = typeof(ChangeStreamCursor<BsonDocument>).GetField("_binding", BindingFlags.NonPublic | BindingFlags.Instance); |
| 420 | + return (IReadBinding)fieldInfo.GetValue(cursor); |
| 421 | + } |
| 422 | + |
| 423 | + public static ChangeStreamOperation<BsonDocument> _changeStreamOperation(this ChangeStreamCursor<BsonDocument> cursor) |
| 424 | + { |
| 425 | + var fieldInfo = typeof(ChangeStreamCursor<BsonDocument>).GetField("_changeStreamOperation", BindingFlags.NonPublic | BindingFlags.Instance); |
| 426 | + return (ChangeStreamOperation<BsonDocument>)fieldInfo.GetValue(cursor); |
| 427 | + } |
| 428 | + |
| 429 | + public static IEnumerable<BsonDocument> _current(this ChangeStreamCursor<BsonDocument> cursor) |
| 430 | + { |
| 431 | + var fieldInfo = typeof(ChangeStreamCursor<BsonDocument>).GetField("_current", BindingFlags.NonPublic | BindingFlags.Instance); |
| 432 | + return (IEnumerable<BsonDocument>)fieldInfo.GetValue(cursor); |
| 433 | + } |
| 434 | + |
| 435 | + public static IAsyncCursor<RawBsonDocument> _cursor(this ChangeStreamCursor<BsonDocument> cursor) |
| 436 | + { |
| 437 | + var fieldInfo = typeof(ChangeStreamCursor<BsonDocument>).GetField("_cursor", BindingFlags.NonPublic | BindingFlags.Instance); |
| 438 | + return (IAsyncCursor<RawBsonDocument>)fieldInfo.GetValue(cursor); |
| 439 | + } |
| 440 | + |
| 441 | + public static bool _disposed(this ChangeStreamCursor<BsonDocument> cursor) |
| 442 | + { |
| 443 | + var fieldInfo = typeof(ChangeStreamCursor<BsonDocument>).GetField("_disposed", BindingFlags.NonPublic | BindingFlags.Instance); |
| 444 | + return (bool)fieldInfo.GetValue(cursor); |
| 445 | + } |
| 446 | + |
| 447 | + public static IBsonSerializer<BsonDocument> _documentSerializer(this ChangeStreamCursor<BsonDocument> cursor) |
| 448 | + { |
| 449 | + var fieldInfo = typeof(ChangeStreamCursor<BsonDocument>).GetField("_documentSerializer", BindingFlags.NonPublic | BindingFlags.Instance); |
| 450 | + return (IBsonSerializer<BsonDocument>)fieldInfo.GetValue(cursor); |
| 451 | + } |
| 452 | + |
| 453 | + public static BsonDocument _resumeToken(this ChangeStreamCursor<BsonDocument> cursor) |
| 454 | + { |
| 455 | + var fieldInfo = typeof(ChangeStreamCursor<BsonDocument>).GetField("_resumeToken", BindingFlags.NonPublic | BindingFlags.Instance); |
| 456 | + return (BsonDocument)fieldInfo.GetValue(cursor); |
| 457 | + } |
460 | 458 | }
|
461 | 459 | }
|
0 commit comments