コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        /// <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;
        }