コード例 #1
0
        internal static BsonDocument AddCompressorsToCommand(BsonDocument command, IEnumerable <CompressorConfiguration> compressors)
        {
            var compressorsArray = new BsonArray(compressors.Select(x => CompressorTypeMapper.ToServerName(x.Type)));

            return(command.Add("compression", compressorsArray));
        }
コード例 #2
0
        public void AddCompressorsToCommand_with_compressors_should_return_expected_result(
            [Values(
                 new CompressorType[] { },
                 new [] { CompressorType.Zlib },
                 new [] { CompressorType.Snappy },
                 new [] { CompressorType.Zlib, CompressorType.Snappy },
                 new [] { CompressorType.ZStandard, CompressorType.Snappy })]
            CompressorType[] compressorsParameters)
        {
            var command     = HelloHelper.CreateCommand();
            var compressors =
                compressorsParameters
                .Select(c => new CompressorConfiguration(c))
                .ToArray();
            var result = HelloHelper.AddCompressorsToCommand(command, compressors);

            var expectedCompressions = string.Join(",", compressorsParameters.Select(c => $"'{CompressorTypeMapper.ToServerName(c)}'"));

            result.Should().Be(BsonDocument.Parse($"{{ isMaster : 1, compression: [{expectedCompressions}] }}"));
        }
コード例 #3
0
        private void AssertOptions(ConnectionString connectionString, BsonDocument definition)
        {
            if (definition.TryGetValue("options", out var options) && !options.IsBsonNull)
            {
                foreach (var expectedOption in options.AsBsonDocument.Elements)
                {
                    var lowerName = expectedOption.Name.ToLowerInvariant();
                    switch (lowerName)
                    {
                    case "appname":
                        connectionString.ApplicationName.Should().Be(expectedOption.Value.AsString);
                        break;

                    case "authmechanism":
                        connectionString.AuthMechanism.Should().Be(expectedOption.Value.AsString);
                        break;

                    case "authmechanismproperties":
                        var authMechanismProperties = new BsonDocument(connectionString.AuthMechanismProperties.Select(kv => new BsonElement(kv.Key, ConvertToBsonValue(kv.Value))));
                        authMechanismProperties.Should().BeEquivalentTo(expectedOption.Value.AsBsonDocument);
                        break;

                    case "authsource":
                        connectionString.AuthSource.Should().Be(expectedOption.Value.AsString);
                        break;

                    case "compressors":
                        var compressors         = new BsonArray(connectionString.Compressors.Select(c => CompressorTypeMapper.ToServerName(c.Type)));
                        var expectedCompressors = RemoveUnsupportedCompressors(expectedOption.Value.AsBsonArray);
                        compressors.Should().Be(expectedCompressors);
                        break;

                    case "connecttimeoutms":
                        AssertTimeSpan(connectionString.ConnectTimeout, expectedOption.Value);
                        break;

                    case "directconnection":
                        AssertBoolean(connectionString.DirectConnection, expectedOption.Value);
                        break;

                    case "heartbeatfrequencyms":
                        AssertTimeSpan(connectionString.HeartbeatInterval, expectedOption.Value);
                        break;

                    case "journal":
                        AssertBoolean(connectionString.Journal, expectedOption.Value);
                        break;

                    case "localthresholdms":
                        AssertTimeSpan(connectionString.LocalThreshold, expectedOption.Value);
                        break;

                    case "maxidletimems":
                        AssertTimeSpan(connectionString.MaxIdleTime, expectedOption.Value);
                        break;

                    case "maxstalenessseconds":
                        AssertTimeSpan(connectionString.MaxStaleness, expectedOption.Value, false);
                        break;

                    case "readconcernlevel":
                        AssertEnum(connectionString.ReadConcernLevel, expectedOption.Value);
                        break;

                    case "readpreference":
                        AssertEnum(connectionString.ReadPreference, expectedOption.Value);
                        break;

                    case "readpreferencetags":
                        var readPreferenceTags = ConvertReadPreferenceTagsToBsonArray(connectionString.ReadPreferenceTags);
                        readPreferenceTags.Should().Be(expectedOption.Value.AsBsonArray);
                        break;

                    case "replicaset":
                        connectionString.ReplicaSet.Should().Be(expectedOption.Value.AsString);
                        break;

                    case "retrywrites":
                        AssertBoolean(connectionString.RetryWrites, expectedOption.Value);
                        break;

                    case "serverselectiontimeoutms":
                        AssertTimeSpan(connectionString.ServerSelectionTimeout, expectedOption.Value);
                        break;

                    case "sockettimeoutms":
                        AssertTimeSpan(connectionString.SocketTimeout, expectedOption.Value);
                        break;

                    case "ssl":
#pragma warning disable 618
                        AssertBoolean(connectionString.Ssl, expectedOption.Value);
#pragma warning restore 618
                        break;

                    case "tls":
                        AssertBoolean(connectionString.Tls, expectedOption.Value);
                        break;

                    case "tlsdisablecertificaterevocationcheck":
                        AssertBoolean(connectionString.TlsDisableCertificateRevocationCheck, expectedOption.Value);
                        break;

                    case "tlsinsecure":
                        AssertBoolean(connectionString.TlsInsecure, expectedOption.Value);
                        break;

                    case "w":
                        var expectedW = WriteConcern.WValue.Parse(expectedOption.Value.ToString());
                        connectionString.W.Should().Be(expectedW);
                        break;

                    case "wtimeoutms":
                        AssertTimeSpan(connectionString.WTimeout, expectedOption.Value);
                        break;

                    case "zlibcompressionlevel":
                        var zlibCompressionLevel = GetZlibCompressionLevel(connectionString);
                        zlibCompressionLevel.Should().Be(expectedOption.Value.ToInt32());
                        break;

                    default:
                        throw new NotSupportedException($"Unsupported option {expectedOption.Value} in {lowerName}.");
                    }
                }
            }
        }