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)); }
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}] }}")); }
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}."); } } } }