public void GetWriteChannelSourceAsync_should_use_a_writable_server_selector_to_select_the_server_from_the_cluster( [Values(false, true)] bool async) { var subject = new WritableServerBinding(_mockCluster.Object, NoCoreSession.NewHandle()); var selectedServer = new Mock <IServer>().Object; var clusterId = new ClusterId(); var endPoint = new DnsEndPoint("localhost", 27017); var initialClusterDescription = new ClusterDescription( clusterId, ClusterConnectionMode.Automatic, ClusterType.Unknown, new[] { new ServerDescription(new ServerId(clusterId, endPoint), endPoint) }); var finalClusterDescription = initialClusterDescription.WithType(ClusterType.Standalone); _mockCluster.SetupSequence(c => c.Description).Returns(initialClusterDescription).Returns(finalClusterDescription); if (async) { _mockCluster.Setup(c => c.SelectServerAsync(It.IsAny <WritableServerSelector>(), CancellationToken.None)).Returns(Task.FromResult(selectedServer)); subject.GetWriteChannelSourceAsync(CancellationToken.None).GetAwaiter().GetResult(); _mockCluster.Verify(c => c.SelectServerAsync(It.IsAny <WritableServerSelector>(), CancellationToken.None), Times.Once); } else { _mockCluster.Setup(c => c.SelectServer(It.IsAny <WritableServerSelector>(), CancellationToken.None)).Returns(selectedServer); subject.GetWriteChannelSource(CancellationToken.None); _mockCluster.Verify(c => c.SelectServer(It.IsAny <WritableServerSelector>(), CancellationToken.None), Times.Once); } }
public void GetReadChannelSource_should_fork_the_session( [Values(false, true)] bool async) { var mockSession = new Mock <ICoreSessionHandle>(); var subject = new ReadPreferenceBinding(_mockCluster.Object, ReadPreference.Primary, mockSession.Object); var cancellationToken = new CancellationTokenSource().Token; var selectedServer = new Mock <IServer>().Object; _mockCluster.Setup(m => m.SelectServer(It.IsAny <IServerSelector>(), cancellationToken)).Returns(selectedServer); _mockCluster.Setup(m => m.SelectServerAsync(It.IsAny <IServerSelector>(), cancellationToken)).Returns(Task.FromResult(selectedServer)); var forkedSession = new Mock <ICoreSessionHandle>().Object; mockSession.Setup(m => m.Fork()).Returns(forkedSession); var clusterId = new ClusterId(); var endPoint = new DnsEndPoint("localhost", 27017); var initialClusterDescription = new ClusterDescription( clusterId, ClusterConnectionMode.Automatic, ClusterType.Unknown, new[] { new ServerDescription(new ServerId(clusterId, endPoint), endPoint) }); var finalClusterDescription = initialClusterDescription.WithType(ClusterType.Standalone); _mockCluster.SetupSequence(c => c.Description).Returns(initialClusterDescription).Returns(finalClusterDescription); IChannelSourceHandle result; if (async) { result = subject.GetReadChannelSourceAsync(cancellationToken).GetAwaiter().GetResult(); } else { result = subject.GetReadChannelSource(cancellationToken); } var handle = result.Should().BeOfType <ChannelSourceHandle>().Subject; var referenceCounted = handle._reference().Should().BeOfType <ReferenceCounted <IChannelSource> >().Subject; var source = referenceCounted.Instance; source.Session.Should().BeSameAs(forkedSession); }
public void GetWriteChannelSource_with_mayUseSecondary_should_pass_mayUseSecondary_to_server_selector( [Values(false, true)] bool async) { var subject = new WritableServerBinding(_mockCluster.Object, NoCoreSession.NewHandle()); var selectedServer = new Mock <IServer>().Object; var clusterId = new ClusterId(); var endPoint = new DnsEndPoint("localhost", 27017); #pragma warning disable CS0618 // Type or member is obsolete var initialClusterDescription = new ClusterDescription( clusterId, ClusterConnectionMode.Automatic, ClusterType.Unknown, new[] { new ServerDescription(new ServerId(clusterId, endPoint), endPoint) }); #pragma warning restore CS0618 // Type or member is obsolete var finalClusterDescription = initialClusterDescription.WithType(ClusterType.Standalone); _mockCluster.SetupSequence(c => c.Description).Returns(initialClusterDescription).Returns(finalClusterDescription); var mockMayUseSecondary = new Mock <IMayUseSecondaryCriteria>(); mockMayUseSecondary.SetupGet(x => x.ReadPreference).Returns(ReadPreference.SecondaryPreferred); mockMayUseSecondary.Setup(x => x.CanUseSecondary(It.IsAny <ServerDescription>())).Returns(true); var mayUseSecondary = mockMayUseSecondary.Object; if (async) { _mockCluster.Setup(c => c.SelectServerAsync(It.IsAny <WritableServerSelector>(), CancellationToken.None)).Returns(Task.FromResult(selectedServer)); subject.GetWriteChannelSourceAsync(mayUseSecondary, CancellationToken.None).GetAwaiter().GetResult(); _mockCluster.Verify(c => c.SelectServerAsync(It.Is <WritableServerSelector>(s => s.MayUseSecondary == mayUseSecondary), CancellationToken.None), Times.Once); } else { _mockCluster.Setup(c => c.SelectServer(It.IsAny <WritableServerSelector>(), CancellationToken.None)).Returns(selectedServer); subject.GetWriteChannelSource(mayUseSecondary, CancellationToken.None); _mockCluster.Verify(c => c.SelectServer(It.Is <WritableServerSelector>(s => s.MayUseSecondary == mayUseSecondary), CancellationToken.None), Times.Once); } }