public void GetOrCreateCluster_should_return_a_cluster_with_the_correct_settings() { var credentials = new[] { MongoCredential.CreateMongoCRCredential("source", "username", "password") }; var servers = new[] { new MongoServerAddress("localhost"), new MongoServerAddress("127.0.0.1", 30000), new MongoServerAddress("[::1]", 27018) }; var sslSettings = new SslSettings { CheckCertificateRevocation = true, EnabledSslProtocols = SslProtocols.Tls }; var clientSettings = new MongoClientSettings { ApplicationName = "app1", ConnectionMode = ConnectionMode.ReplicaSet, ConnectTimeout = TimeSpan.FromSeconds(1), Credentials = credentials, GuidRepresentation = GuidRepresentation.Standard, HeartbeatInterval = TimeSpan.FromSeconds(7), HeartbeatTimeout = TimeSpan.FromSeconds(8), IPv6 = true, MaxConnectionIdleTime = TimeSpan.FromSeconds(2), MaxConnectionLifeTime = TimeSpan.FromSeconds(3), MaxConnectionPoolSize = 10, MinConnectionPoolSize = 5, ReplicaSetName = "rs", LocalThreshold = TimeSpan.FromMilliseconds(20), Servers = servers, ServerSelectionTimeout = TimeSpan.FromSeconds(5), SocketTimeout = TimeSpan.FromSeconds(4), SslSettings = sslSettings, UseSsl = true, VerifySslCertificate = true, WaitQueueSize = 20, WaitQueueTimeout = TimeSpan.FromSeconds(6) }; var subject = new ClusterRegistry(); using (var cluster = subject.GetOrCreateCluster(clientSettings.ToClusterKey())) { var endPoints = new EndPoint[] { new DnsEndPoint("localhost", 27017), new IPEndPoint(IPAddress.Parse("127.0.0.1"), 30000), new IPEndPoint(IPAddress.Parse("[::1]"), 27018) }; cluster.Settings.ConnectionMode.Should().Be(ClusterConnectionMode.ReplicaSet); cluster.Settings.EndPoints.Equals(endPoints); cluster.Settings.ReplicaSetName.Should().Be("rs"); cluster.Settings.ServerSelectionTimeout.Should().Be(clientSettings.ServerSelectionTimeout); cluster.Settings.PostServerSelector.Should().NotBeNull().And.Subject.Should().BeOfType<LatencyLimitingServerSelector>(); cluster.Settings.MaxServerSelectionWaitQueueSize.Should().Be(20); cluster.Description.Servers.Select(s => s.EndPoint).Should().Contain(endPoints); // TODO: don't know how to test the rest of the settings because they are all private to the cluster } }
public void GetOrCreateCluster_should_return_a_different_cluster_if_client_settings_are_not_equal() { var clientSettings1 = new MongoClientSettings(); var clientSettings2 = new MongoClientSettings() { IPv6 = true }; var subject = new ClusterRegistry(); using (var cluster1 = subject.GetOrCreateCluster(clientSettings1.ToClusterKey())) using (var cluster2 = subject.GetOrCreateCluster(clientSettings2.ToClusterKey())) { cluster2.Should().NotBeSameAs(cluster1); } }
public void GetOrCreateCluster_should_return_the_same_cluster_if_client_settings_are_equal() { var clientSettings1 = new MongoClientSettings(); var clientSettings2 = new MongoClientSettings(); var subject = new ClusterRegistry(); using (var cluster1 = subject.GetOrCreateCluster(clientSettings1.ToClusterKey())) using (var cluster2 = subject.GetOrCreateCluster(clientSettings2.ToClusterKey())) { cluster2.Should().BeSameAs(cluster1); } }
public void UnregisterAndDisposeCluster_should_unregister_and_dispose_the_cluster() { var subject = new ClusterRegistry(); var settings = new MongoClientSettings(); var clusterKey = settings.ToClusterKey(); var cluster = subject.GetOrCreateCluster(clusterKey); subject.UnregisterAndDisposeCluster(cluster); subject._registry().Count.Should().Be(0); cluster._state().Should().Be(2); }