Example #1
0
        internal void ShouldInvalidateServer_should_return_expected_result_for_exceptionType(string exceptionTypeName, bool expectedResult)
        {
            _subject.Initialize();
            Exception exception;
            var       clusterId                = new ClusterId(1);
            var       serverId                 = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
            var       connectionId             = new ConnectionId(serverId);
            var       command                  = new BsonDocument("command", 1);
            var       notWritablePrimaryResult = new BsonDocument {
                { "code", ServerErrorCode.NotWritablePrimary }
            };
            var nodeIsRecoveringResult = new BsonDocument("code", ServerErrorCode.InterruptedAtShutdown);

            switch (exceptionTypeName)
            {
            case nameof(EndOfStreamException): exception = new EndOfStreamException(); break;

            case nameof(Exception): exception = new Exception(); break;

            case nameof(IOException): exception = new IOException(); break;

            case nameof(MongoConnectionException): exception = new MongoConnectionException(connectionId, "message"); break;

            case nameof(MongoNodeIsRecoveringException): exception = new MongoNodeIsRecoveringException(connectionId, command, notWritablePrimaryResult); break;

            case nameof(MongoNotPrimaryException): exception = new MongoNotPrimaryException(connectionId, command, nodeIsRecoveringResult); break;

            case nameof(SocketException): exception = new SocketException(); break;

            case "MongoConnectionExceptionWithSocketTimeout":
                var innermostException = new SocketException((int)SocketError.TimedOut);
                var innerException     = new IOException("Execute Order 66", innermostException);
                exception = new MongoConnectionException(connectionId, "Yes, Lord Sidious", innerException);
                break;

            case nameof(TimeoutException): exception = new TimeoutException(); break;

            case nameof(MongoExecutionTimeoutException): exception = new MongoExecutionTimeoutException(connectionId, "message"); break;

            default: throw new Exception($"Invalid exceptionTypeName: {exceptionTypeName}.");
            }

            var result = _subject.ShouldInvalidateServer(Mock.Of <IConnection>(), exception, new ServerDescription(_subject.ServerId, _subject.EndPoint), out _);

            result.Should().Be(expectedResult);
        }