예제 #1
0
        public void Equals_should_return_expected_result(
            int port1,
            int localValue1,
            int serverValue1,
            int port2,
            int localValue2,
            int serverValue2,
            bool expectedEqualsResult,
            bool expectedStructurallyEqualsResult)
        {
            var clusterId = new ClusterId();
            var serverId1 = new ServerId(clusterId, new DnsEndPoint("localhost", port1));
            var serverId2 = new ServerId(clusterId, new DnsEndPoint("localhost", port2));

            var subject1 = new ConnectionId(serverId1, localValue1).WithServerValue(serverValue1);
            var subject2 = new ConnectionId(serverId2, localValue2).WithServerValue(serverValue2);

            // note: Equals ignores the server values and StructurallyEquals compares all fields
            var equalsResult1 = subject1.Equals(subject2);
            var equalsResult2 = subject2.Equals(subject1);
            var structurallyEqualsResult1 = subject1.StructurallyEquals(subject2);
            var structurallyEqualsResult2 = subject2.StructurallyEquals(subject1);
            var hashCode1 = subject1.GetHashCode();
            var hashCode2 = subject2.GetHashCode();

            equalsResult1.Should().Be(expectedEqualsResult);
            equalsResult2.Should().Be(expectedEqualsResult);
            structurallyEqualsResult1.Should().Be(expectedStructurallyEqualsResult);
            structurallyEqualsResult2.Should().Be(expectedStructurallyEqualsResult);
            (hashCode1 == hashCode2).Should().Be(expectedEqualsResult);
        }
예제 #2
0
 public void Equals_should_return_true_if_all_fiels_are_equal()
 {
     var subject1 = new ClusterId(1);
     var subject2 = new ClusterId(1);
     subject1.Equals(subject2).Should().BeTrue();
     subject1.Equals((object)subject2).Should().BeTrue();
     subject1.GetHashCode().Should().Be(subject2.GetHashCode());
 }
예제 #3
0
 public void Equals_should_return_false_if_any_field_is_not_equal()
 {
     var subject1 = new ClusterId(1);
     var subject2 = new ClusterId(2);
     subject1.Equals(subject2).Should().BeFalse();
     subject1.Equals((object)subject2).Should().BeFalse();
     subject1.GetHashCode().Should().NotBe(subject2.GetHashCode());
 }
예제 #4
0
 public ServerFactoryTests()
 {
     _clusterId = new ClusterId();
     _clusterConnectionMode = ClusterConnectionMode.Standalone;
     _connectionPoolFactory = new Mock<IConnectionPoolFactory>().Object;
     _endPoint = new DnsEndPoint("localhost", 27017);
     _serverMonitorFactory = new Mock<IServerMonitorFactory>().Object;
     _eventSubscriber = new Mock<IEventSubscriber>().Object;
     _settings = new ServerSettings();
 }
 public void Setup()
 {
     _clusterId = new ClusterId();
     _clusterConnectionMode = ClusterConnectionMode.Standalone;
     _connectionPoolFactory = Substitute.For<IConnectionPoolFactory>();
     _endPoint = new DnsEndPoint("localhost", 27017);
     _heartbeatConnectionFactory = Substitute.For<IConnectionFactory>();
     _eventSubscriber = Substitute.For<IEventSubscriber>();
     _settings = new ServerSettings();
 }
 public void TestFixtureSetup()
 {
     var clusterId = new ClusterId(1);
     var clusterType = ClusterType.Standalone;
     var endPoint = new DnsEndPoint("localhost", 27017);
     var serverId = new ServerId(clusterId, endPoint);
     var server = new ServerDescription(serverId, endPoint);
     var servers = new[] { server };
     _clusterDescription = new ClusterDescription(clusterId, clusterType, servers);
 }
예제 #7
0
 public void OneTimeSetUp()
 {
     var clusterId = new ClusterId(1);
     var connectionMode = ClusterConnectionMode.Standalone;
     var clusterType = ClusterType.Standalone;
     var endPoint = new DnsEndPoint("localhost", 27017);
     var serverId = new ServerId(clusterId, endPoint);
     var server = new ServerDescription(serverId, endPoint);
     var servers = new[] { server };
     _clusterDescription = new ClusterDescription(clusterId, connectionMode, clusterType, servers);
 }
예제 #8
0
        // constructors
        protected Cluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IClusterListener listener)
        {
            _settings = Ensure.IsNotNull(settings, "settings");
            _serverFactory = Ensure.IsNotNull(serverFactory, "serverFactory");
            _listener = listener;
            _state = new InterlockedInt32(State.Initial);

            _clusterId = new ClusterId();
            _description = ClusterDescription.CreateInitial(_clusterId, _settings.ConnectionMode.ToClusterType());
            _descriptionChangedTaskCompletionSource = new TaskCompletionSource<bool>();
        }
        // static constructor
        static ClusterDescriptionTests()
        {
            __clusterId = new ClusterId();

            __endPoint1 = new DnsEndPoint("localhost", 27017);
            __endPoint2 = new DnsEndPoint("localhost", 27018);
            __serverId1 = new ServerId(__clusterId, __endPoint1);
            __serverId2 = new ServerId(__clusterId, __endPoint2);
            __serverDescription1 = new ServerDescription(__serverId1, __endPoint1);
            __serverDescription2 = new ServerDescription(__serverId2, __endPoint2);
        }
 public static ServerDescription Connected(ClusterId clusterId, EndPoint endPoint = null, ServerType serverType = ServerType.Standalone, TagSet tags = null, TimeSpan? averageRoundTripTime = null, Range<int> wireVersionRange = null)
 {
     return Disconnected(clusterId, endPoint)
         .WithHeartbeatInfo(
             averageRoundTripTime ?? TimeSpan.FromMilliseconds(1),
             null,
             tags,
             serverType,
             new SemanticVersion(2, 6, 3),
             wireVersionRange ?? new Range<int>(0, 2));
 }
예제 #11
0
 public static ServerDescription Connected(ClusterId clusterId, EndPoint endPoint = null, ServerType serverType = ServerType.Standalone, TagSet tags = null, TimeSpan? averageRoundTripTime = null, Range<int> wireVersionRange = null)
 {
     return Disconnected(clusterId, endPoint).With(
         averageRoundTripTime: averageRoundTripTime ?? TimeSpan.FromMilliseconds(1),
         replicaSetConfig: null,
         state: ServerState.Connected,
         tags: tags,
         type: serverType,
         version: new SemanticVersion(2, 6, 3),
         wireVersionRange: wireVersionRange ?? new Range<int>(0, 2));
 }
 public MongoIncompatibleDriverExceptionTests()
 {
     var clusterId = new ClusterId(1);
     var connectionMode = ClusterConnectionMode.Standalone;
     var clusterType = ClusterType.Standalone;
     var endPoint = new DnsEndPoint("localhost", 27017);
     var serverId = new ServerId(clusterId, endPoint);
     var server = new ServerDescription(serverId, endPoint);
     var servers = new[] { server };
     _clusterDescription = new ClusterDescription(clusterId, connectionMode, clusterType, servers);
 }
        public void Setup()
        {
            var clusterId = new ClusterId();
            _primary = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), ServerType.ReplicaSetPrimary, new TagSet(new [] { new Tag("a", "1") }));
            _secondary1 = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), ServerType.ReplicaSetSecondary, new TagSet(new [] { new Tag("a", "1") }));
            _secondary2 = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019), ServerType.ReplicaSetSecondary, new TagSet(new[] { new Tag("a", "2") }));

            _description = new ClusterDescription(
                clusterId,
                ClusterType.ReplicaSet,
                new[] { _primary, _secondary1, _secondary2 });
        }
 public void Setup()
 {
     var clusterId = new ClusterId();
     _description = new ClusterDescription(
         clusterId,
         ClusterType.Unknown,
         new[]
         {
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), averageRoundTripTime: TimeSpan.FromMilliseconds(10)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), averageRoundTripTime: TimeSpan.FromMilliseconds(30)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019), averageRoundTripTime: TimeSpan.FromMilliseconds(20))
         });
 }
 public void Setup()
 {
     var clusterId = new ClusterId();
     _description = new ClusterDescription(
         clusterId,
         ClusterType.Unknown,
         new[]
         {
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019)),
         });
 }
예제 #16
0
        private ServerId CreateSubject(string notEqualField = null)
        {
            var clusterId = new ClusterId(1);
            var endPoint = new DnsEndPoint("localhost", 27017);

            switch (notEqualField)
            {
                case "ClusterId": clusterId = new ClusterId(2); break;
                case "EndPoint": endPoint = new DnsEndPoint("localhost", 27018); break;
            }

            return new ServerId(clusterId, endPoint);
        }
 public EndPointServerSelectorTests()
 {
     var clusterId = new ClusterId();
     _description = new ClusterDescription(
         clusterId,
         ClusterConnectionMode.Automatic,
         ClusterType.Unknown,
         new[]
         {
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019)),
         });
 }
        public void Setup()
        {
            var clusterId = new ClusterId();

            _description = new ClusterDescription(
                clusterId,
                ClusterType.Unknown,
                new[]
            {
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019)),
            });
        }
        public void WithConnectionId_should_return_new_instance_even_when_only_the_serverValue_differs()
        {
            var clusterId     = new ClusterId();
            var serverId      = new ServerId(clusterId, new DnsEndPoint("localhost", 1));
            var connectionId1 = new ConnectionId(serverId, 1);
            var connectionId2 = new ConnectionId(serverId, 1).WithServerValue(2);
            var helloResult   = new HelloResult(new BsonDocument("maxWireVersion", WireVersion.Server36));
            var subject       = new ConnectionDescription(connectionId1, helloResult);

            var result = subject.WithConnectionId(connectionId2);

            result.Should().NotBeSameAs(subject);
            result.ConnectionId.Should().BeSameAs(connectionId2);
        }
예제 #20
0
        public override bool Equals(object obj)
        {
            var clusterToMassTagMap = (ClusterToMassTagMap)obj;

            if (clusterToMassTagMap == null)
            {
                return(false);
            }
            if (!ClusterId.Equals(clusterToMassTagMap.ClusterId))
            {
                return(false);
            }
            return(MassTagId.Equals(clusterToMassTagMap.MassTagId));
        }
 // static constructor
 static ServerDescriptionTests()
 {
     __clusterId = new ClusterId();
     __endPoint = new DnsEndPoint("localhost", 27017);
     __serverId = new ServerId(__clusterId, __endPoint);
     __subject = new ServerDescription(
         __serverId,
         __endPoint,
         state: ServerState.Connected,
         type: ServerType.Standalone,
         averageRoundTripTime: TimeSpan.FromSeconds(1),
         version: new SemanticVersion(2, 6, 3),
         wireVersionRange:  new Range<int>(0, 2));
 }
예제 #22
0
        private ServerId CreateSubject(string notEqualField = null)
        {
            var clusterId = new ClusterId(1);
            var endPoint  = new DnsEndPoint("localhost", 27017);

            switch (notEqualField)
            {
            case "ClusterId": clusterId = new ClusterId(2); break;

            case "EndPoint": endPoint = new DnsEndPoint("localhost", 27018); break;
            }

            return(new ServerId(clusterId, endPoint));
        }
예제 #23
0
 // methods
 /// <inheritdoc/>
 public IClusterableServer CreateServer(ClusterId clusterId, IClusterClock clusterClock, EndPoint endPoint)
 {
     return(new Server(
                clusterId,
                clusterClock,
                _clusterConnectionMode,
                _connectionModeSwitch,
                _directConnection,
                _settings,
                endPoint,
                _connectionPoolFactory,
                _serverMonitorFactory,
                _eventSubscriber));
 }
        public void Setup()
        {
            var clusterId = new ClusterId();

            _description = new ClusterDescription(
                clusterId,
                ClusterType.Unknown,
                new[]
            {
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), averageRoundTripTime: TimeSpan.FromMilliseconds(10)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), averageRoundTripTime: TimeSpan.FromMilliseconds(30)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019), averageRoundTripTime: TimeSpan.FromMilliseconds(20))
            });
        }
 public LatencyLimitingServerSelectorTests()
 {
     var clusterId = new ClusterId();
     _description = new ClusterDescription(
         clusterId,
         ClusterConnectionMode.Automatic,
         ClusterType.Unknown,
         new[]
         {
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), averageRoundTripTime: TimeSpan.FromMilliseconds(10)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), averageRoundTripTime: TimeSpan.FromMilliseconds(30)),
             ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019), averageRoundTripTime: TimeSpan.FromMilliseconds(20))
         });
 }
        public IClusterableServer CreateServer(ClusterId clusterId, EndPoint endPoint)
        {
            IClusterableServer result;
            if(!_servers.TryGetValue(endPoint, out result))
            {
                var description = new ServerDescription(new ServerId(clusterId, endPoint), endPoint);
                _servers[endPoint] = result = Substitute.For<IClusterableServer>();
                result.Description.Returns(description);
                result.EndPoint.Returns(endPoint);
                result.ServerId.Returns(new ServerId(clusterId, endPoint));
            }

            return result;
        }
예제 #27
0
        public static Exception CreateException(Type exceptionType)
        {
            switch (exceptionType.Name)
            {
            case "IOException":
                return(new IOException("Fake IOException."));

            case "MongoConnectionException":
            {
                var clusterId      = new ClusterId(1);
                var serverId       = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
                var connectionId   = new ConnectionId(serverId, 1);
                var message        = "Fake MongoConnectionException";
                var innerException = new Exception();
                return(new MongoConnectionException(connectionId, message, innerException));
            }

            case "MongoCursorNotFoundException":
            {
                var clusterId    = new ClusterId(1);
                var serverId     = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
                var connectionId = new ConnectionId(serverId, 1);
                var cursorId     = 1L;
                var query        = new BsonDocument();
                return(new MongoCursorNotFoundException(connectionId, cursorId, query));
            }

            case "MongoNodeIsRecoveringException":
            {
                var clusterId    = new ClusterId(1);
                var serverId     = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
                var connectionId = new ConnectionId(serverId, 1);
                var result       = new BsonDocument();
                return(new MongoNodeIsRecoveringException(connectionId, result));
            }

            case "MongoNotPrimaryException":
            {
                var clusterId    = new ClusterId(1);
                var serverId     = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
                var connectionId = new ConnectionId(serverId, 1);
                var result       = new BsonDocument();
                return(new MongoNotPrimaryException(connectionId, result));
            }

            default:
                throw new ArgumentException($"Unexpected exception type: {exceptionType.Name}.", nameof(exceptionType));
            }
        }
예제 #28
0
        public EndPointServerSelectorTests()
        {
            var clusterId = new ClusterId();

            _description = new ClusterDescription(
                clusterId,
                ClusterConnectionMode.Automatic,
                ClusterType.Unknown,
                new[]
            {
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019)),
            });
        }
        private ConnectionDescription CreateConnectionDescriptionSupportingSession(int maxWireVersion = WireVersion.Server36)
        {
            var clusterId     = new ClusterId(1);
            var endPoint      = new DnsEndPoint("localhost", 27017);
            var serverId      = new ServerId(clusterId, endPoint);
            var connectionId  = new ConnectionId(serverId, 1);
            var helloDocument = new BsonDocument
            {
                { "logicalSessionTimeoutMinutes", 30 },
                { "maxWireVersion", maxWireVersion }
            };
            var helloResult = new HelloResult(helloDocument);

            return(new ConnectionDescription(connectionId, helloResult));
        }
        public LatencyLimitingServerSelectorTests()
        {
            var clusterId = new ClusterId();

            _description = new ClusterDescription(
                clusterId,
                ClusterConnectionMode.Automatic,
                ClusterType.Unknown,
                new[]
            {
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), averageRoundTripTime: TimeSpan.FromMilliseconds(10)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), averageRoundTripTime: TimeSpan.FromMilliseconds(30)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019), averageRoundTripTime: TimeSpan.FromMilliseconds(20))
            });
        }
        public static ConnectionDescription CreateConnectionDescription(SemanticVersion version = null, ServerType serverType = ServerType.Standalone, bool supportsSessions = true)
        {
            if (version == null)
            {
                version = new SemanticVersion(3, 6, 0);
            }

            var clusterId       = new ClusterId();
            var serverId        = new ServerId(clusterId, new DnsEndPoint("localhost", 27017));
            var connectionId    = new ConnectionId(serverId);
            var buildInfoResult = new BuildInfoResult(new BsonDocument("ok", 1).Add("version", version.ToString()));
            var isMasterResult  = CreateIsMasterResult(version, serverType, supportsSessions);

            return(new ConnectionDescription(connectionId, isMasterResult, buildInfoResult));
        }
예제 #32
0
        public void WithConnectionId_should_return_new_instance_even_when_only_the_serverValue_differs()
        {
            var clusterId       = new ClusterId();
            var serverId        = new ServerId(clusterId, new DnsEndPoint("localhost", 1));
            var connectionId1   = new ConnectionId(serverId, 1);
            var connectionId2   = new ConnectionId(serverId, 1).WithServerValue(2);
            var isMasterResult  = new IsMasterResult(new BsonDocument());
            var buildInfoResult = new BuildInfoResult(new BsonDocument("version", "2.6.0"));
            var subject         = new ConnectionDescription(connectionId1, isMasterResult, buildInfoResult);

            var result = subject.WithConnectionId(connectionId2);

            result.Should().NotBeSameAs(subject);
            result.ConnectionId.Should().BeSameAs(connectionId2);
        }
        private ICluster CreateMockReplicaSetCluster()
        {
            var clusterId      = new ClusterId(1);
            var endPoint       = new DnsEndPoint("localhost", 27017);
            var serverId       = new ServerId(clusterId, endPoint);
            var maxWireVersion = Feature.Transactions.FirstSupportedWireVersion;
            var servers        = new[] { new ServerDescription(serverId, endPoint, state: ServerState.Connected, type: ServerType.ReplicaSetPrimary, version: WireVersion.ToServerVersion(maxWireVersion), wireVersionRange: new Range <int>(0, maxWireVersion)) };

#pragma warning disable CS0618 // Type or member is obsolete
            var clusterDescription = new ClusterDescription(clusterId, ClusterConnectionMode.Automatic, ClusterType.ReplicaSet, servers);
#pragma warning restore CS0618 // Type or member is obsolete
            var mockCluster = new Mock <ICluster>();
            mockCluster.SetupGet(m => m.Description).Returns(clusterDescription);
            return(mockCluster.Object);
        }
        public IClusterableServer CreateServer(ClusterId clusterId, EndPoint endPoint)
        {
            IClusterableServer result;

            if (!_servers.TryGetValue(endPoint, out result))
            {
                var description = new ServerDescription(new ServerId(clusterId, endPoint), endPoint);
                _servers[endPoint] = result = Substitute.For <IClusterableServer>();
                result.Description.Returns(description);
                result.EndPoint.Returns(endPoint);
                result.ServerId.Returns(new ServerId(clusterId, endPoint));
            }

            return(result);
        }
예제 #35
0
        // constructors
        public ClusterableServer(ClusterId clusterId, ClusterConnectionMode clusterConnectionMode, ServerSettings settings, EndPoint endPoint, IConnectionPoolFactory connectionPoolFactory, IConnectionFactory heartbeatConnectionFactory, IServerListener listener)
        {
            Ensure.IsNotNull(clusterId, "clusterId");
            _clusterConnectionMode = clusterConnectionMode;
            _settings = Ensure.IsNotNull(settings, "settings");;
            _endPoint = Ensure.IsNotNull(endPoint, "endPoint");
            Ensure.IsNotNull(connectionPoolFactory, "connectionPoolFactory");
            _heartbeatConnectionFactory = Ensure.IsNotNull(heartbeatConnectionFactory, "heartbeatConnectionFactory");
            _listener = listener;

            _serverId        = new ServerId(clusterId, endPoint);
            _baseDescription = _currentDescription = new ServerDescription(_serverId, endPoint);
            _connectionPool  = connectionPoolFactory.CreateConnectionPool(_serverId, endPoint);
            _state           = new InterlockedInt32(State.Initial);
        }
        // private methods
        private ClusterDescription CreateClusterDescription(
            ClusterId clusterId = null,
#pragma warning disable CS0618 // Type or member is obsolete
            ClusterConnectionMode connectionMode = ClusterConnectionMode.Automatic,
#pragma warning restore CS0618 // Type or member is obsolete
            ClusterType type = ClusterType.Unknown,
            IEnumerable <ServerDescription> servers = null)
        {
            clusterId = clusterId ?? new ClusterId(1);
            servers   = servers ?? new ServerDescription[0];
#pragma warning disable CS0618 // Type or member is obsolete
            return(new ClusterDescription(clusterId, connectionMode, type, servers));

#pragma warning restore CS0618 // Type or member is obsolete
        }
        public ReadPreferenceServerSelectorTests()
        {
            var clusterId = new ClusterId();

            _primary    = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), ServerType.ReplicaSetPrimary, new TagSet(new[] { new Tag("a", "1") }));
            _secondary1 = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), ServerType.ReplicaSetSecondary, new TagSet(new[] { new Tag("a", "1") }));
            _secondary2 = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019), ServerType.ReplicaSetSecondary, new TagSet(new[] { new Tag("a", "2") }));

#pragma warning disable CS0618 // Type or member is obsolete
            _description = new ClusterDescription(
                clusterId,
                ClusterConnectionMode.ReplicaSet,
                ClusterType.ReplicaSet,
                new[] { _primary, _secondary1, _secondary2 });
#pragma warning restore CS0618 // Type or member is obsolete
        }
        public ServerFactoryTests()
        {
            _clusterId             = new ClusterId();
            _clusterConnectionMode = ClusterConnectionMode.Standalone;
            _connectionPoolFactory = new Mock <IConnectionPoolFactory>().Object;
            _endPoint = new DnsEndPoint("localhost", 27017);
            var mockServerMonitor = new Mock <IServerMonitor>();

            mockServerMonitor.Setup(m => m.Description).Returns(new ServerDescription(new ServerId(_clusterId, _endPoint), _endPoint));
            var mockServerMonitorFactory = new Mock <IServerMonitorFactory>();

            mockServerMonitorFactory.Setup(f => f.Create(It.IsAny <ServerId>(), _endPoint)).Returns(mockServerMonitor.Object);
            _serverMonitorFactory = mockServerMonitorFactory.Object;
            _eventSubscriber      = new Mock <IEventSubscriber>().Object;
            _settings             = new ServerSettings();
        }
예제 #39
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldMarshalNullClusterId() throws Throwable
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void ShouldMarshalNullClusterId()
        {
            // given
            MemoryStream outputStream = new MemoryStream();

            // when
            OutputStreamWritableChannel writableChannel = new OutputStreamWritableChannel(outputStream);

            _marshal.marshal(null, writableChannel);

            InputStreamReadableChannel readableChannel = new InputStreamReadableChannel(new MemoryStream(outputStream.toByteArray()));
            ClusterId result = _marshal.unmarshal(readableChannel);

            // then
            assertNull(result);
        }
 // static constructor
 static ServerDescriptionTests()
 {
     __clusterId = new ClusterId();
     __endPoint = new DnsEndPoint("localhost", 27017);
     __serverId = new ServerId(__clusterId, __endPoint);
     __subject = new ServerDescription(
         __serverId,
         __endPoint,
         ServerState.Connected,
         ServerType.Standalone,
         TimeSpan.FromSeconds(1),
         null,
         null,
         new SemanticVersion(2, 6, 3),
         new Range<int>(0, 2));
 }
예제 #41
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public synchronized void encode(io.netty.channel.ChannelHandlerContext ctx, org.neo4j.causalclustering.core.consensus.RaftMessages_ClusterIdAwareMessage decoratedMessage, io.netty.buffer.ByteBuf out) throws Exception
        public override void Encode(ChannelHandlerContext ctx, Org.Neo4j.causalclustering.core.consensus.RaftMessages_ClusterIdAwareMessage decoratedMessage, ByteBuf @out)
        {
            lock (this)
            {
                Org.Neo4j.causalclustering.core.consensus.RaftMessages_RaftMessage message = decoratedMessage.message();
                ClusterId        clusterId     = decoratedMessage.clusterId();
                MemberId.Marshal memberMarshal = new MemberId.Marshal();

                NetworkWritableChannel channel = new NetworkWritableChannel(@out);
                ClusterId.Marshal.INSTANCE.marshal(clusterId, channel);
                channel.PutInt(message.Type().ordinal());
                memberMarshal.MarshalConflict(message.From(), channel);

                message.Dispatch(new Handler(_marshal, memberMarshal, channel));
            }
        }
        public MongoIncompatibleDriverExceptionTests()
        {
            var clusterId = new ClusterId(1);

#pragma warning disable CS0618 // Type or member is obsolete
            var connectionMode = ClusterConnectionMode.Standalone;
#pragma warning restore CS0618 // Type or member is obsolete
            var clusterType = ClusterType.Standalone;
            var endPoint    = new DnsEndPoint("localhost", 27017);
            var serverId    = new ServerId(clusterId, endPoint);
            var server      = new ServerDescription(serverId, endPoint, wireVersionRange: new Range <int>(0, 0), type: ServerType.Standalone);
            var servers     = new[] { server };
#pragma warning disable CS0618 // Type or member is obsolete
            _clusterDescription = new ClusterDescription(clusterId, connectionMode, clusterType, servers);
#pragma warning restore CS0618 // Type or member is obsolete
        }
예제 #43
0
 // static constructor
 static ServerDescriptionTests()
 {
     __clusterId = new ClusterId();
     __endPoint  = new DnsEndPoint("localhost", 27017);
     __serverId  = new ServerId(__clusterId, __endPoint);
     __subject   = new ServerDescription(
         __serverId,
         __endPoint,
         ServerState.Connected,
         ServerType.Standalone,
         TimeSpan.FromSeconds(1),
         null,
         null,
         new SemanticVersion(2, 6, 3),
         new Range <int>(0, 2));
 }
예제 #44
0
        public CompositeServerSelectorTests()
        {
            var clusterId = new ClusterId();

#pragma warning disable CS0618 // Type or member is obsolete
            _description = new ClusterDescription(
                clusterId,
                ClusterConnectionMode.Automatic,
                ClusterType.Unknown,
                new[]
            {
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019)),
            });
#pragma warning restore CS0618 // Type or member is obsolete
        }
예제 #45
0
        public static ServerDescription Parse(BsonDocument args)
        {
            var clusterId = new ClusterId(args.GetValue("clusterId", 1).ToInt32());
            var endPoint  = ParseEndPoint(args.GetValue("endPoint", "localhost:27017").AsString);
            var serverId  = new ServerId(clusterId, endPoint);
            var logicalSessionTimeoutMinutes = args.GetValue("logicalSessionTimeoutMinutes", BsonNull.Value);
            var logicalSessionTimeout        = logicalSessionTimeoutMinutes.IsBsonNull ? (TimeSpan?)null : TimeSpan.FromMinutes(logicalSessionTimeoutMinutes.ToInt32());
            var state      = (ServerState)Enum.Parse(typeof(ServerState), args["state"].AsString);
            var serverType = (ServerType)Enum.Parse(typeof(ServerType), args["type"].AsString);

            return(new ServerDescription(
                       serverId,
                       endPoint,
                       logicalSessionTimeout: logicalSessionTimeout,
                       state: state,
                       type: serverType));
        }
        public void Should_select_nothing_when_attempting_to_match_tags_and_servers_do_not_have_tags()
        {
            var clusterId = new ClusterId();
            var primary   = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), ServerType.ReplicaSetPrimary);
            var secondary = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), ServerType.ReplicaSetSecondary);

            var description = new ClusterDescription(
                clusterId,
                ClusterType.ReplicaSet,
                new[] { primary, secondary });

            var subject = new ReadPreferenceServerSelector(new ReadPreference(ReadPreferenceMode.Secondary, new[] { new TagSet(new[] { new Tag("a", "1") }) }));

            var result = subject.SelectServers(description, description.Servers).ToList();

            result.Should().BeEmpty();
        }
        public void ReadPreference_should_be_ignored_when_directly_connected_with_a_server()
        {
            var subject = new ReadPreferenceServerSelector(new ReadPreference(ReadPreferenceMode.Primary));

            var clusterId = new ClusterId();
            var server    = ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), ServerType.ReplicaSetSecondary);

            var description = new ClusterDescription(
                clusterId,
                ClusterConnectionMode.Direct,
                ClusterType.ReplicaSet,
                new[] { server });

            var result = subject.SelectServers(description, description.Servers).ToList();

            result.Should().BeEquivalentTo(new[] { server });
        }
        public static MongoCommandException CreateMongoWriteConcernException(BsonDocument writeConcernResultDocument, string label = null)
        {
            var clusterId             = new ClusterId(1);
            var endPoint              = new DnsEndPoint("localhost", 27017);
            var serverId              = new ServerId(clusterId, endPoint);
            var connectionId          = new ConnectionId(serverId);
            var message               = "Fake MongoWriteConcernException";
            var writeConcernResult    = new WriteConcernResult(writeConcernResultDocument);
            var writeConcernException = new MongoWriteConcernException(connectionId, message, writeConcernResult);

            if (label != null)
            {
                writeConcernException.AddErrorLabel(label);
            }

            return(writeConcernException);
        }
예제 #49
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);
        }
예제 #50
0
        public DelegateServerSelectorTests()
        {
            var clusterId = new ClusterId();

#pragma warning disable CS0618 // Type or member is obsolete
            _description = new ClusterDescription(
                clusterId,
                ClusterConnectionMode.Automatic,
                ClusterType.Unknown,
                new[]
            {
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27017), averageRoundTripTime: TimeSpan.FromMilliseconds(10)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27018), averageRoundTripTime: TimeSpan.FromMilliseconds(30)),
                ServerDescriptionHelper.Connected(clusterId, new DnsEndPoint("localhost", 27019), averageRoundTripTime: TimeSpan.FromMilliseconds(20))
            });
#pragma warning restore CS0618 // Type or member is obsolete
        }
예제 #51
0
        internal static CoreTopology FakeCoreTopology(params MemberId[] memberIds)
        {
            Debug.Assert(memberIds.Length > 0);

            ClusterId clusterId = new ClusterId(System.Guid.randomUUID());
            IDictionary <MemberId, CoreServerInfo> coreMembers = new Dictionary <MemberId, CoreServerInfo>();

            int offset = 0;

            foreach (MemberId memberId in memberIds)
            {
                coreMembers[memberId] = TestTopology.addressesForCore(offset, false);
                offset++;
            }

            return(new CoreTopology(clusterId, false, coreMembers));
        }
예제 #52
0
        // constructors
        protected Cluster(ClusterSettings settings, IClusterableServerFactory serverFactory, IEventSubscriber eventSubscriber)
        {
            _settings = Ensure.IsNotNull(settings, "settings");
            _serverFactory = Ensure.IsNotNull(serverFactory, "serverFactory");
            Ensure.IsNotNull(eventSubscriber, "eventSubscriber");
            _state = new InterlockedInt32(State.Initial);

            _clusterId = new ClusterId();
            _description = ClusterDescription.CreateInitial(_clusterId, _settings.ConnectionMode);
            _descriptionChangedTaskCompletionSource = new TaskCompletionSource<bool>();

            _rapidHeartbeatTimer = new Timer(RapidHeartbeatTimerCallback, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);

            eventSubscriber.TryGetEventHandler(out _descriptionChangedEventHandler);
            eventSubscriber.TryGetEventHandler(out _selectingServerEventHandler);
            eventSubscriber.TryGetEventHandler(out _selectedServerEventHandler);
            eventSubscriber.TryGetEventHandler(out _selectingServerFailedEventHandler);
        }
예제 #53
0
        public IClusterableServer CreateServer(ClusterId clusterId, EndPoint endPoint)
        {
            ServerTuple result;
            if (!_servers.TryGetValue(endPoint, out result))
            {
                var description = new ServerDescription(new ServerId(clusterId, endPoint), endPoint);

                if (_eventSubscriber == null)
                {
                    var server = Substitute.For<IClusterableServer>();
                    server.Description.Returns(description);
                    server.EndPoint.Returns(endPoint);
                    server.ServerId.Returns(new ServerId(clusterId, endPoint));
                    result = new ServerTuple
                    {
                        Server = server
                    };
                }
                else
                {
                    var monitorFactory = Substitute.For<IServerMonitorFactory>();
                    var monitor = Substitute.For<IServerMonitor>();
                    monitorFactory.Create(null, null).ReturnsForAnyArgs(monitor);
                    monitor.Description.Returns(description);

                    result = new ServerTuple
                    {
                        Server = new Server(
                            clusterId,
                            ClusterConnectionMode.Automatic,
                            new ServerSettings(),
                            endPoint,
                            Substitute.For<IConnectionPoolFactory>(),
                            monitorFactory,
                            _eventSubscriber),
                        Monitor = monitor
                    };
                }

                _servers[endPoint] = result;
            }

            return result.Server;
        }
        public IClusterableServer CreateServer(ClusterId clusterId, EndPoint endPoint)
        {
            ServerTuple result;
            if (!_servers.TryGetValue(endPoint, out result))
            {
                var description = new ServerDescription(new ServerId(clusterId, endPoint), endPoint);

                if (_eventSubscriber == null)
                {
                    var mockServer = new Mock<IClusterableServer>() { DefaultValue = DefaultValue.Mock };
                    mockServer.SetupGet(s => s.Description).Returns(description);
                    mockServer.SetupGet(s => s.EndPoint).Returns(endPoint);
                    mockServer.SetupGet(s => s.ServerId).Returns(new ServerId(clusterId, endPoint));
                    result = new ServerTuple
                    {
                        Server = mockServer.Object
                    };
                }
                else
                {
                    var mockMonitorFactory = new Mock<IServerMonitorFactory>();
                    var mockMonitor = new Mock<IServerMonitor>() { DefaultValue = DefaultValue.Mock };
                    mockMonitorFactory.Setup(f => f.Create(It.IsAny<ServerId>(), It.IsAny<EndPoint>())).Returns(mockMonitor.Object);
                    mockMonitor.SetupGet(m => m.Description).Returns(description);

                    result = new ServerTuple
                    {
                        Server = new Server(
                            clusterId,
                            ClusterConnectionMode.Automatic,
                            new ServerSettings(),
                            endPoint,
                            (new Mock<IConnectionPoolFactory> { DefaultValue = DefaultValue.Mock }).Object,
                            mockMonitorFactory.Object,
                            _eventSubscriber),
                        Monitor = mockMonitor.Object
                    };
                }

                _servers[endPoint] = result;
            }

            return result.Server;
        }
        public void Setup()
        {
            _clusterId = new ClusterId();
            _clusterConnectionMode = ClusterConnectionMode.Standalone;
            _connectionPool = Substitute.For<IConnectionPool>();
            _connectionPoolFactory = Substitute.For<IConnectionPoolFactory>();
            _connectionPoolFactory.CreateConnectionPool(null, null)
                .ReturnsForAnyArgs(_connectionPool);

            _endPoint = new DnsEndPoint("localhost", 27017);
            _heartbeatConnection = new MockConnection();
            _heartbeatConnectionFactory = Substitute.For<IConnectionFactory>();
            _heartbeatConnectionFactory.CreateConnection(null, null)
                .ReturnsForAnyArgs(_heartbeatConnection);

            _capturedEvents = new EventCapturer();
            _settings = new ServerSettings(heartbeatInterval: Timeout.InfiniteTimeSpan);

            _subject = new ClusterableServer(_clusterId, _clusterConnectionMode, _settings, _endPoint, _connectionPoolFactory, _heartbeatConnectionFactory, _capturedEvents);
        }
예제 #56
0
        public ServerTests()
        {
            _clusterId = new ClusterId();
            _endPoint = new DnsEndPoint("localhost", 27017);

            _clusterConnectionMode = ClusterConnectionMode.Standalone;
            _mockConnectionPool = new Mock<IConnectionPool>();
            _mockConnectionPool.Setup(p => p.AcquireConnection(It.IsAny<CancellationToken>())).Returns(new Mock<IConnectionHandle>().Object);
            _mockConnectionPool.Setup(p => p.AcquireConnectionAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(new Mock<IConnectionHandle>().Object));
            _mockConnectionPoolFactory = new Mock<IConnectionPoolFactory>();
            _mockConnectionPoolFactory
                .Setup(f => f.CreateConnectionPool(It.IsAny<ServerId>(), _endPoint))
                .Returns(_mockConnectionPool.Object);

            _mockServerMonitor = new Mock<IServerMonitor>();
            _mockServerMonitorFactory = new Mock<IServerMonitorFactory>();
            _mockServerMonitorFactory.Setup(f => f.Create(It.IsAny<ServerId>(), _endPoint)).Returns(_mockServerMonitor.Object);

            _capturedEvents = new EventCapturer();
            _settings = new ServerSettings(heartbeatInterval: Timeout.InfiniteTimeSpan);

            _subject = new Server(_clusterId, _clusterConnectionMode, _settings, _endPoint, _mockConnectionPoolFactory.Object, _mockServerMonitorFactory.Object, _capturedEvents);
        }
 public void Setup()
 {
     _clusterId = new ClusterId();
     _connectionPoolFactory = Substitute.For<IConnectionPoolFactory>();
     _endPoint = new DnsEndPoint("localhost", 27017);
     _heartbeatConnectionFactory = Substitute.For<IConnectionFactory>();
     _listener = Substitute.For<IServerListener>();
     _settings = new ServerSettings();
 }
        private ClusterDescription CreateSubject(string notEqualField = null)
        {
            var clusterId = new ClusterId(1);
            var connectionMode = ClusterConnectionMode.ReplicaSet;
            var type = ClusterType.ReplicaSet;
            var servers = new[] { __serverDescription1, __serverDescription2 };

            switch (notEqualField)
            {
                case "ClusterId": clusterId = new ClusterId(2); break;
                case "ConnectionMode": connectionMode = ClusterConnectionMode.Standalone; break;
                case "Type": type = ClusterType.Unknown; break;
                case "Servers": servers = new[] { __serverDescription1 }; break;
            }

            return new ClusterDescription(clusterId, connectionMode, type, servers);
        }
예제 #59
0
 public static ServerDescription Disconnected(ClusterId clusterId, EndPoint endPoint = null)
 {
     endPoint = endPoint ?? new DnsEndPoint("localhost", 27017);
     return new ServerDescription(new ServerId(clusterId, endPoint), endPoint);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ClusterOpenedEvent"/> struct.
 /// </summary>
 /// <param name="clusterId">The cluster identifier.</param>
 /// <param name="clusterSettings">The cluster settings.</param>
 /// <param name="duration">The duration of time it took to open the cluster.</param>
 public ClusterOpenedEvent(ClusterId clusterId, ClusterSettings clusterSettings, TimeSpan duration)
 {
     _clusterId = clusterId;
     _clusterSettings = clusterSettings;
     _duration = duration;
 }