public void Get_database_settings( string connectionString, string w, bool journal, ReadConcernLevel?readConcernLevel, ReadPreferenceMode readPreference, GuidRepresentation guidRepresentation) { var settings = MongoDbEventStore <object> .GetDefaultDatabaseSettings(connectionString); if (string.IsNullOrEmpty(w)) { Assert.Null(settings.WriteConcern.W); } else { Assert.Equal(w, settings.WriteConcern.W.ToString()); } Assert.Equal(journal, settings.WriteConcern.Journal); if (readConcernLevel != null) { Assert.Equal(readConcernLevel, settings.ReadConcern.Level); } else { Assert.Null(settings.ReadConcern.Level); } Assert.Equal(readPreference, settings.ReadPreference.ReadPreferenceMode); Assert.Equal(guidRepresentation, settings.GuidRepresentation); }
// constructors /// <summary> /// Initializes a new instance of the <see cref="ReadPreference" /> class. /// </summary> /// <param name="mode">The read preference mode.</param> /// <param name="tagSets">The tag sets.</param> /// <param name="maxStaleness">The maximum staleness.</param> public ReadPreference( ReadPreferenceMode mode, IEnumerable <TagSet> tagSets = null, TimeSpan?maxStaleness = null) { var tagSetsArray = tagSets == null ? __emptyTagSetsArray : tagSets.ToArray(); if (tagSetsArray.Length > 0) { Ensure.That(mode != ReadPreferenceMode.Primary, "TagSets cannot be used with ReadPreferenceMode Primary.", nameof(tagSets)); } if (maxStaleness.HasValue) { Ensure.IsInfiniteOrGreaterThanZero(maxStaleness.Value, nameof(maxStaleness)); if (maxStaleness.Value > TimeSpan.Zero) { Ensure.That(maxStaleness.Value.Ticks % TimeSpan.TicksPerMillisecond == 0, "MaxStaleness must not have fractional seconds.", nameof(maxStaleness)); } Ensure.That(mode != ReadPreferenceMode.Primary, "MaxStaleness cannot be used with ReadPreferenceMode Primary.", nameof(maxStaleness)); } _mode = mode; _tagSets = tagSetsArray; _maxStaleness = maxStaleness; }
/// <summary> /// Initializes a new instance of the ReadPreference class. /// </summary> /// <param name="readPreferenceMode">The read preference mode.</param> /// <param name="tagSets">The tag sets.</param> public ReadPreference(ReadPreferenceMode readPreferenceMode, IEnumerable <ReplicaSetTagSet> tagSets) { _readPreferenceMode = readPreferenceMode; if (tagSets != null) { _tagSets = new List <ReplicaSetTagSet>(tagSets); _tagSetsReadOnly = _tagSets.AsReadOnly(); } }
/// <summary> /// Initializes a new instance of the ReadPreference class. /// </summary> /// <param name="readPreference">A read preference</param> public ReadPreference(ReadPreference readPreference) { _readPreferenceMode = readPreference._readPreferenceMode; if (readPreference._tagSets != null) { _tagSets = new List <ReplicaSetTagSet>(readPreference._tagSets); _tagSetsReadOnly = _tagSets.AsReadOnly(); } }
public void Execute_should_call_channel_Command_with_unwrapped_command_when_wrapping_is_not_necessary( ServerType serverType, ReadPreferenceMode readPreferenceMode, bool async) { var subject = CreateSubject <BsonDocument>(); var readPreference = new ReadPreference(readPreferenceMode); var serverDescription = CreateServerDescription(serverType); var mockChannel = CreateMockChannel(); var channelSource = CreateMockChannelSource(serverDescription, mockChannel.Object).Object; var binding = CreateMockReadBinding(readPreference, channelSource).Object; var cancellationToken = new CancellationTokenSource().Token; BsonDocument result; if (async) { result = subject.ExecuteAsync(binding, cancellationToken).GetAwaiter().GetResult(); mockChannel.Verify( c => c.CommandAsync( binding.Session, readPreference, subject.DatabaseNamespace, subject.Command, null, // commandPayloads subject.CommandValidator, null, // additionalOptions null, // postWriteAction CommandResponseHandling.Return, subject.ResultSerializer, subject.MessageEncoderSettings, cancellationToken), Times.Once); } else { result = subject.Execute(binding, cancellationToken); mockChannel.Verify( c => c.Command( binding.Session, readPreference, subject.DatabaseNamespace, subject.Command, null, // commandPayloads subject.CommandValidator, null, // additionalOptions null, // postWriteAction CommandResponseHandling.Return, subject.ResultSerializer, subject.MessageEncoderSettings, cancellationToken), Times.Once); } }
public void ToString_should_return_expected_result( [Values(ReadPreferenceMode.Primary, ReadPreferenceMode.Secondary)] ReadPreferenceMode mode) { var subject = new ReadPreference(mode); var result = subject.ToString(); result.Should().Be($"{{ Mode : {mode} }}"); }
public ReadPreference(ReadPreferenceMode mode, IEnumerable <TagSet> tagSets) { Ensure.IsNotNull(tagSets, "tagSets"); if (mode == ReadPreferenceMode.Primary && tagSets.Count() > 0) { throw new ArgumentException("TagSets cannot be used with ReadPreferenceMode Primary.", "tagSets"); } _mode = mode; _tagSets = tagSets.ToList(); }
public void Equals_should_compare_mode_fields( [Values(ReadPreferenceMode.Primary, ReadPreferenceMode.Secondary)] ReadPreferenceMode lhsMode, [Values(ReadPreferenceMode.Primary, ReadPreferenceMode.Secondary)] ReadPreferenceMode rhsMode) { var lhs = new ReadPreference(lhsMode); var rhs = new ReadPreference(rhsMode); Equals_Act_and_Assert(lhs, rhs, lhsMode.Equals(rhsMode)); }
// public static methods /// <summary> /// Creates a new ReadPreference instance from a BsonDocument. /// </summary> /// <param name="document">The document.</param> /// <returns>A ReadPreference.</returns> public static ReadPreference FromBsonDocument(BsonDocument document) { ReadPreferenceMode mode = ReadPreferenceMode.Primary; TimeSpan? maxStaleness = null; List <TagSet> tagSets = null; ReadPreferenceHedge hedge = null; foreach (var element in document) { switch (element.Name) { case "mode": mode = (ReadPreferenceMode)Enum.Parse(typeof(ReadPreferenceMode), element.Value.AsString, ignoreCase: true); break; case "tags": tagSets = new List <TagSet>(); foreach (var tagsDocument in element.Value.AsBsonArray.Cast <BsonDocument>()) { var tags = new List <Tag>(); foreach (var tagElement in tagsDocument) { var tag = new Tag(tagElement.Name, tagElement.Value.AsString); tags.Add(tag); } var tagSet = new TagSet(tags); tagSets.Add(tagSet); } break; case "maxStaleness": maxStaleness = element.Value.BsonType switch { BsonType.String => TimeSpanParser.Parse(element.Value.AsString), _ => TimeSpan.FromSeconds(element.Value.ToDouble()) }; break; case "maxStalenessSeconds": maxStaleness = TimeSpan.FromSeconds(element.Value.ToDouble()); break; case "hedge": var hedgeEnabled = element.Value.AsBsonDocument["enabled"].AsBoolean; hedge = new ReadPreferenceHedge(hedgeEnabled); break; default: throw new ArgumentException($"Invalid element in ReadPreference document: {element.Name}."); } } return(new ReadPreference(mode, tagSets, maxStaleness, hedge)); }
// constructors /// <summary> /// Initializes a new instance of the <see cref="ReadPreference"/> class. /// </summary> /// <param name="mode">The read preference mode.</param> /// <param name="tagSets">The tag sets.</param> public ReadPreference( Optional <ReadPreferenceMode> mode = default(Optional <ReadPreferenceMode>), Optional <IEnumerable <TagSet> > tagSets = default(Optional <IEnumerable <TagSet> >)) { _mode = mode.WithDefault(ReadPreferenceMode.Primary); _tagSets = Ensure.IsNotNull(tagSets.WithDefault(Enumerable.Empty <TagSet>()), "tagSets").ToList(); if (_mode == ReadPreferenceMode.Primary && _tagSets.Count() > 0) { throw new ArgumentException("TagSets cannot be used with ReadPreferenceMode Primary.", "tagSets"); } }
// constructors /// <summary> /// Initializes a new instance of the <see cref="ReadPreference"/> class. /// </summary> /// <param name="mode">The read preference mode.</param> /// <param name="tagSets">The tag sets.</param> public ReadPreference( ReadPreferenceMode mode, IEnumerable <TagSet> tagSets = null) { _mode = mode; _tagSets = (tagSets ?? Enumerable.Empty <TagSet>()).ToList(); if (_mode == ReadPreferenceMode.Primary && _tagSets.Count() > 0) { throw new ArgumentException("TagSets cannot be used with ReadPreferenceMode Primary.", "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 CreateCommand_should_return_expected_result_when_readPreference_is_provided( [Values(ReadPreferenceMode.PrimaryPreferred, ReadPreferenceMode.Secondary)] ReadPreferenceMode value) { var subject = new FindCommandOperation <BsonDocument>(_collectionNamespace, BsonDocumentSerializer.Instance, _messageEncoderSettings); var readPreference = new ReadPreference(value); var reflector = new Reflector(subject); var serverDescription = CreateServerDescription(type: ServerType.ShardRouter); var result = reflector.CreateCommand(serverDescription, readPreference); var mode = value.ToString(); var camelCaseMode = char.ToLower(mode[0]) + mode.Substring(1); result.Should().Be($"{{ find : '{_collectionNamespace.CollectionName}', readPreference : {{ mode : '{camelCaseMode}' }} }}"); }
public void Execute_should_call_channel_Command_with_unwrapped_command_when_wrapping_is_not_necessary( ServerType serverType, ReadPreferenceMode readPreferenceMode, bool slaveOk, bool async) { var subject = CreateSubject <BsonDocument>(); var readPreference = new ReadPreference(readPreferenceMode); var serverDescription = CreateServerDescription(serverType); var channel = CreateFakeChannel(); var channelSource = CreateFakeChannelSource(serverDescription, channel); var binding = CreateFakeReadBinding(readPreference, channelSource); var cancellationToken = new CancellationTokenSource().Token; BsonDocument result; if (async) { result = subject.ExecuteAsync(binding, cancellationToken).GetAwaiter().GetResult(); channel.Received(1).CommandAsync( subject.DatabaseNamespace, subject.Command, subject.CommandValidator, Arg.Is <Func <CommandResponseHandling> >(f => f() == CommandResponseHandling.Return), slaveOk, subject.ResultSerializer, subject.MessageEncoderSettings, cancellationToken); } else { result = subject.Execute(binding, cancellationToken); channel.Received(1).Command( subject.DatabaseNamespace, subject.Command, subject.CommandValidator, Arg.Is <Func <CommandResponseHandling> >(f => f() == CommandResponseHandling.Return), slaveOk, subject.ResultSerializer, subject.MessageEncoderSettings, cancellationToken); } }
// public static methods /// <summary> /// Creates a new ReadPreference instance from a BsonDocument. /// </summary> /// <param name="document">The document.</param> /// <returns>A ReadPreference.</returns> public static ReadPreference FromBsonDocument(BsonDocument document) { ReadPreferenceMode mode = ReadPreferenceMode.Primary; foreach (var element in document) { switch (element.Name) { case "mode": mode = (ReadPreferenceMode)Enum.Parse(typeof(ReadPreferenceMode), element.Value.AsString, ignoreCase: true); break; default: throw new ArgumentException($"Invalid element in ReadConcern document: {element.Name}."); } } return(new ReadPreference(mode)); }
// constructors /// <summary> /// Initializes a new instance of the <see cref="ReadPreference" /> class. /// </summary> /// <param name="mode">The read preference mode.</param> /// <param name="tagSets">The tag sets.</param> /// <param name="maxStaleness">The maximum staleness.</param> public ReadPreference( ReadPreferenceMode mode, IEnumerable <TagSet> tagSets = null, TimeSpan?maxStaleness = null) { var tagSetsArray = tagSets == null ? __emptyTagSetsArray : tagSets.ToArray(); if (tagSetsArray.Length > 0) { Ensure.That(mode != ReadPreferenceMode.Primary, "TagSets cannot be used with ReadPreferenceMode Primary.", nameof(tagSets)); } if (maxStaleness.HasValue) { Ensure.IsInfiniteOrGreaterThanOrEqualToZero(maxStaleness.Value, nameof(maxStaleness)); Ensure.That(mode != ReadPreferenceMode.Primary, "MaxStaleness cannot be used with ReadPreferenceMode Primary.", nameof(maxStaleness)); } _mode = mode; _tagSets = tagSetsArray; _maxStaleness = maxStaleness; }
/// <summary> /// Returns a new instance of ReadPreference with some values changed. /// </summary> /// <param name="mode">The read preference mode.</param> /// <returns>A new instance of ReadPreference.</returns> public ReadPreference With(ReadPreferenceMode mode) { return(new ReadPreference(mode, _tagSets)); }
// constructors public ReadPreference(ReadPreferenceMode mode) { _mode = mode; _tagSets = __noTagSets; }
public void When_readPreference_is_specified(string connectionString, ReadPreferenceMode readPreference) { var subject = new ConnectionString(connectionString); subject.ReadPreference.Should().Be(readPreference); }
/// <summary> /// Returns a new instance of ReadPreference with some values changed. /// </summary> /// <param name="mode">The read preference mode.</param> /// <returns>A new instance of ReadPreference.</returns> public ReadPreference With(ReadPreferenceMode mode) { return(new ReadPreference(mode, _tagSets, _maxStaleness)); }
public ReadPreference(ReadPreferenceMode mode, IEnumerable<TagSet> tagSets) { _mode = mode; _tagSets = Ensure.IsNotNull(tagSets, "tagSets").ToList(); }
public void TestReadPreference(ReadPreferenceMode? mode, string formatString, string[] values) { ReadPreference readPreference = null; if (mode != null) { readPreference = new ReadPreference(mode.Value); } var built = new MongoUrlBuilder { Server = _localhost, ReadPreference = readPreference }; var canonicalConnectionString = string.Format(formatString, values[0]); foreach (var builder in EnumerateBuiltAndParsedBuilders(built, formatString, values)) { Assert.AreEqual(readPreference, builder.ReadPreference); Assert.AreEqual(canonicalConnectionString, builder.ToString()); } }
public void TestSlaveOk_AfterReadPreference(ReadPreferenceMode mode, bool slaveOk) { var readPreference = new ReadPreference { ReadPreferenceMode = mode }; var builder = new MongoUrlBuilder { Server = _localhost, ReadPreference = readPreference }; #pragma warning disable 618 Assert.Throws<InvalidOperationException>(() => { builder.SlaveOk = slaveOk; }); #pragma warning restore }
public void FromBsonDocument_should_parse_mode(string document, ReadPreferenceMode expectedMode) { var result = ReadPreference.FromBsonDocument(BsonDocument.Parse(document)); result.ReadPreferenceMode.Should().Be(expectedMode); }
// methods public ReadPreference WithMode(ReadPreferenceMode value) { return (_mode == value) ? this : new ReadPreference(value, _tagSets); }
// methods public ReadPreference WithMode(ReadPreferenceMode value) { return((_mode == value) ? this : new ReadPreference(value, _tagSets)); }
public ReadPreference(ReadPreferenceMode mode, IEnumerable <TagSet> tagSets) { _mode = mode; _tagSets = Ensure.IsNotNull(tagSets, "tagSets").ToList(); }
public void TestReadPreference_AfterSlaveOk(bool slaveOk, ReadPreferenceMode mode) { var readPreference = new ReadPreference { ReadPreferenceMode = mode }; var builder = new MongoUrlBuilder { Server = _localhost }; #pragma warning disable 618 builder.SlaveOk = slaveOk; #pragma warning restore builder.ReadPreference = null; Assert.Throws<InvalidOperationException>(() => { builder.ReadPreference = readPreference; }); }
// constructors /// <summary> /// Initializes a new instance of the ReadPreference class. /// </summary> public ReadPreference() { _readPreferenceMode = ReadPreferenceMode.Primary; }
public void TestSlaveOk_ForReadPreference(ReadPreferenceMode? mode, bool slaveOk) { var readPreference = (mode == null) ? null : new ReadPreference { ReadPreferenceMode = mode.Value }; var builder = new MongoUrlBuilder { Server = _localhost, ReadPreference = readPreference }; #pragma warning disable 618 Assert.AreEqual(slaveOk, builder.SlaveOk); #pragma warning restore }
/// <summary> /// Initializes a new instance of the ReadPreference class. /// </summary> /// <param name="readPreferenceMode">The read preference mode.</param> public ReadPreference(ReadPreferenceMode readPreferenceMode) : this(readPreferenceMode, null) { }
public void TestSlaveOk(string url, ReadPreferenceMode mode) { var builder = new MongoUrlBuilder(url); Assert.AreEqual(mode, builder.ReadPreference.ReadPreferenceMode); }
/// <summary> /// Initializes a new instance of the ReadPreference class. /// </summary> /// <param name="readPreferenceMode">The read preference mode.</param> public ReadPreference(ReadPreferenceMode readPreferenceMode) { _readPreferenceMode = readPreferenceMode; }