|
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