public void With_tagSets_should_return_expected_result() { var tagSets1 = new[] { new TagSet(new[] { new Tag("name", "value1") }) }; var tagSets2 = new[] { new TagSet(new[] { new Tag("name", "value2") }) }; var subject = new ReadPreference(ReadPreferenceMode.Secondary, tagSets1); var result = subject.With(tagSets: tagSets2); result.ReadPreferenceMode.Should().Be(subject.ReadPreferenceMode); result.TagSets.Should().Equal(tagSets2); }
public void With_mode_should_return_expected_result() { var mode1 = ReadPreferenceMode.Secondary; var mode2 = ReadPreferenceMode.SecondaryPreferred; var subject = new ReadPreference(mode1); var result = subject.With(mode: mode2); result.ReadPreferenceMode.Should().Be(mode2); result.TagSets.Should().Equal(subject.TagSets); }
public void With_mode_should_return_expected_result( [Values(ReadPreferenceMode.Primary, ReadPreferenceMode.Secondary)] ReadPreferenceMode originalMode, [Values(ReadPreferenceMode.Primary, ReadPreferenceMode.Secondary)] ReadPreferenceMode mode) { var subject = new ReadPreference(originalMode); var result = subject.With(mode); result.ReadPreferenceMode.Should().Be(mode); result.With(originalMode).Should().Be(subject); }
public void With_tagSets_should_return_expected_result( [Values("a", "b")] string originalTagValue, [Values("a", "b")] string tagValue) { var originalTagSets = new[] { new TagSet(new[] { new Tag("x", originalTagValue) }) }; var tagSets = new[] { new TagSet(new[] { new Tag("x", tagValue) }) }; var subject = new ReadPreference(ReadPreferenceMode.Secondary, tagSets: originalTagSets); var result = subject.With(tagSets); result.TagSets.Should().Equal(tagSets); result.With(originalTagSets).Should().Be(subject); }
public void With_maxStaleness_should_return_expected_result( [Values(1, 2)] int originalSeconds, [Values(1, 2)] int seconds) { var originalMaxStaleness = TimeSpan.FromSeconds(originalSeconds); var maxStaleness = TimeSpan.FromSeconds(seconds); var subject = new ReadPreference(ReadPreferenceMode.Secondary, maxStaleness: originalMaxStaleness); var result = subject.With(maxStaleness); result.MaxStaleness.Should().Be(maxStaleness); result.With(originalMaxStaleness).Should().Be(subject); }
public void With_hedge_should_return_expected_result( [Values(false, true)] bool originalIsEnabled, [Values(false, true)] bool isEnabled) { var originalHedge = new ReadPreferenceHedge(isEnabled: originalIsEnabled); var hedge = new ReadPreferenceHedge(isEnabled: isEnabled); var subject = new ReadPreference(ReadPreferenceMode.Secondary, hedge: originalHedge); var result = subject.With(hedge); result.Hedge.Should().Be(hedge); result.With(originalHedge).Should().Be(subject); }
/// <summary> /// Parses a URL and sets all settings to match the URL. /// </summary> /// <param name="url">The URL.</param> public void Parse(string url) { var connectionString = new ConnectionString(url); _authenticationMechanism = connectionString.AuthMechanism; _authenticationMechanismProperties = connectionString.AuthMechanismProperties.ToDictionary(x => x.Key, x => x.Value, StringComparer.InvariantCultureIgnoreCase); _authenticationSource = connectionString.AuthSource; switch (connectionString.Connect) { case ClusterConnectionMode.Direct: _connectionMode = Driver.ConnectionMode.Direct; break; case ClusterConnectionMode.ReplicaSet: _connectionMode = Driver.ConnectionMode.ReplicaSet; break; case ClusterConnectionMode.Sharded: _connectionMode = Driver.ConnectionMode.ShardRouter; break; case ClusterConnectionMode.Standalone: _connectionMode = Driver.ConnectionMode.Standalone; break; default: _connectionMode = Driver.ConnectionMode.Automatic; break; } _connectTimeout = connectionString.ConnectTimeout.GetValueOrDefault(MongoDefaults.ConnectTimeout); _databaseName = connectionString.DatabaseName; _fsync = connectionString.FSync; _guidRepresentation = connectionString.UuidRepresentation.GetValueOrDefault(MongoDefaults.GuidRepresentation); _ipv6 = connectionString.Ipv6.GetValueOrDefault(false); _journal = connectionString.Journal; _maxConnectionIdleTime = connectionString.MaxIdleTime.GetValueOrDefault(MongoDefaults.MaxConnectionIdleTime); _maxConnectionLifeTime = connectionString.MaxLifeTime.GetValueOrDefault(MongoDefaults.MaxConnectionLifeTime); _maxConnectionPoolSize = connectionString.MaxPoolSize.GetValueOrDefault(MongoDefaults.MaxConnectionPoolSize); _minConnectionPoolSize = connectionString.MinPoolSize.GetValueOrDefault(MongoDefaults.MinConnectionPoolSize); _password = connectionString.Password; _readConcernLevel = connectionString.ReadConcernLevel; if (connectionString.ReadPreference != null) { _readPreference = new ReadPreference(connectionString.ReadPreference.Value); } if (connectionString.ReadPreferenceTags != null) { if (_readPreference == null) { throw new MongoConfigurationException("ReadPreferenceMode is required when using tag sets."); } _readPreference = _readPreference.With(tagSets: connectionString.ReadPreferenceTags); } _replicaSetName = connectionString.ReplicaSet; _localThreshold = connectionString.LocalThreshold.GetValueOrDefault(MongoDefaults.LocalThreshold); _servers = connectionString.Hosts.Select(endPoint => { DnsEndPoint dnsEndPoint; IPEndPoint ipEndPoint; if ((dnsEndPoint = endPoint as DnsEndPoint) != null) { return(new MongoServerAddress(dnsEndPoint.Host, dnsEndPoint.Port)); } else if ((ipEndPoint = endPoint as IPEndPoint) != null) { return(new MongoServerAddress(ipEndPoint.Address.ToString(), ipEndPoint.Port)); } else { throw new NotSupportedException("Only DnsEndPoint and IPEndPoints are supported in the connection string."); } }); _serverSelectionTimeout = connectionString.ServerSelectionTimeout.GetValueOrDefault(MongoDefaults.ServerSelectionTimeout); _socketTimeout = connectionString.SocketTimeout.GetValueOrDefault(MongoDefaults.SocketTimeout); _username = connectionString.Username; _useSsl = connectionString.Ssl.GetValueOrDefault(false); _verifySslCertificate = connectionString.SslVerifyCertificate.GetValueOrDefault(true); _w = connectionString.W; if (connectionString.WaitQueueSize != null) { _waitQueueSize = connectionString.WaitQueueSize.Value; _waitQueueMultiple = 0.0; } else if (connectionString.WaitQueueMultiple != null) { _waitQueueMultiple = connectionString.WaitQueueMultiple.Value; _waitQueueSize = 0; } _waitQueueTimeout = connectionString.WaitQueueTimeout.GetValueOrDefault(MongoDefaults.WaitQueueTimeout); _wTimeout = connectionString.WTimeout; }