PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 1ms

/tests/MongoDB.Driver.Core.Tests/Core/Configuration/ClusterSettingsTests.cs

http://github.com/mongodb/mongo-csharp-driver
C# | 314 lines | 247 code | 53 blank | 14 comment | 0 complexity | dacdf55f38da721deaef4b1f8eeac6ab MD5 | raw file
Possible License(s): Apache-2.0
  1. /* Copyright 2013-present MongoDB Inc.
  2. *
  3. * Licensed under the Apache License, Version 2.0 (the "License");
  4. * you may not use this file except in compliance with the License.
  5. * You may obtain a copy of the License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software
  10. * distributed under the License is distributed on an "AS IS" BASIS,
  11. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. * See the License for the specific language governing permissions and
  13. * limitations under the License.
  14. */
  15. using System;
  16. using System.Net;
  17. using FluentAssertions;
  18. using MongoDB.Bson.TestHelpers.EqualityComparers;
  19. using MongoDB.Driver.Core.Clusters;
  20. using MongoDB.Driver.Core.Misc;
  21. using Xunit;
  22. namespace MongoDB.Driver.Core.Configuration
  23. {
  24. public class ClusterSettingsTests
  25. {
  26. private static readonly ClusterSettings __defaults = new ClusterSettings();
  27. [Fact]
  28. public void constructor_should_initialize_instance()
  29. {
  30. var subject = new ClusterSettings();
  31. subject.ConnectionMode.Should().Be(ClusterConnectionMode.Automatic);
  32. subject.EndPoints.Should().EqualUsing(new[] { new DnsEndPoint("localhost", 27017) }, EndPointHelper.EndPointEqualityComparer);
  33. subject.LocalThreshold.Should().Be(TimeSpan.FromMilliseconds(15));
  34. subject.MaxServerSelectionWaitQueueSize.Should().Be(500);
  35. subject.ReplicaSetName.Should().Be(null);
  36. subject.Scheme.Should().Be(ConnectionStringScheme.MongoDB);
  37. subject.ServerSelectionTimeout.Should().Be(TimeSpan.FromSeconds(30));
  38. }
  39. [Fact]
  40. public void constructor_should_throw_when_endPoints_is_null()
  41. {
  42. Action action = () => new ClusterSettings(endPoints: null);
  43. action.ShouldThrow<ArgumentNullException>().And.ParamName.Should().Be("endPoints");
  44. }
  45. [Fact]
  46. public void constructor_should_throw_when_serverSelectionTimeout_is_negative()
  47. {
  48. Action action = () => new ClusterSettings(serverSelectionTimeout: TimeSpan.FromSeconds(-1));
  49. action.ShouldThrow<ArgumentException>().And.ParamName.Should().Be("serverSelectionTimeout");
  50. }
  51. [Fact]
  52. public void constructor_should_throw_when_localThreshold_is_negative()
  53. {
  54. var exception = Record.Exception(() => new ClusterSettings(localThreshold: TimeSpan.FromSeconds(-1)));
  55. var e = exception.Should().BeOfType<ArgumentOutOfRangeException>().Subject;
  56. e.ParamName.Should().Be("localThreshold");
  57. }
  58. [Fact]
  59. public void constructor_should_throw_when_maxServerSelectionWaitQueueSize_is_negative()
  60. {
  61. Action action = () => new ClusterSettings(maxServerSelectionWaitQueueSize: -1);
  62. action.ShouldThrow<ArgumentException>().And.ParamName.Should().Be("maxServerSelectionWaitQueueSize");
  63. }
  64. [Fact]
  65. public void constructor_with_connectionMode_should_initialize_instance()
  66. {
  67. var connectionMode = ClusterConnectionMode.ReplicaSet;
  68. var subject = new ClusterSettings(connectionMode: connectionMode);
  69. subject.ConnectionMode.Should().Be(connectionMode);
  70. subject.EndPoints.Should().EqualUsing(__defaults.EndPoints, EndPointHelper.EndPointEqualityComparer);
  71. subject.LocalThreshold.Should().Be(__defaults.LocalThreshold);
  72. subject.MaxServerSelectionWaitQueueSize.Should().Be(__defaults.MaxServerSelectionWaitQueueSize);
  73. subject.ReplicaSetName.Should().Be(__defaults.ReplicaSetName);
  74. subject.Scheme.Should().Be(__defaults.Scheme);
  75. subject.ServerSelectionTimeout.Should().Be(__defaults.ServerSelectionTimeout);
  76. }
  77. [Fact]
  78. public void constructor_with_endPoints_should_initialize_instance()
  79. {
  80. var endPoints = new[] { new DnsEndPoint("remotehost", 27123) };
  81. var subject = new ClusterSettings(endPoints: endPoints);
  82. subject.ConnectionMode.Should().Be(__defaults.ConnectionMode);
  83. subject.EndPoints.Should().EqualUsing(endPoints, EndPointHelper.EndPointEqualityComparer);
  84. subject.LocalThreshold.Should().Be(__defaults.LocalThreshold);
  85. subject.MaxServerSelectionWaitQueueSize.Should().Be(__defaults.MaxServerSelectionWaitQueueSize);
  86. subject.ReplicaSetName.Should().Be(__defaults.ReplicaSetName);
  87. subject.Scheme.Should().Be(__defaults.Scheme);
  88. subject.ServerSelectionTimeout.Should().Be(__defaults.ServerSelectionTimeout);
  89. }
  90. [Fact]
  91. public void constructor_with_localThreshold_should_initialize_instance()
  92. {
  93. var localThreshold = TimeSpan.FromSeconds(1);
  94. var subject = new ClusterSettings(localThreshold: localThreshold);
  95. subject.ConnectionMode.Should().Be(__defaults.ConnectionMode);
  96. subject.EndPoints.Should().EqualUsing(__defaults.EndPoints, EndPointHelper.EndPointEqualityComparer);
  97. subject.LocalThreshold.Should().Be(localThreshold);
  98. subject.MaxServerSelectionWaitQueueSize.Should().Be(__defaults.MaxServerSelectionWaitQueueSize);
  99. subject.ReplicaSetName.Should().Be(__defaults.ReplicaSetName);
  100. subject.Scheme.Should().Be(__defaults.Scheme);
  101. subject.ServerSelectionTimeout.Should().Be(__defaults.ServerSelectionTimeout);
  102. }
  103. [Fact]
  104. public void constructor_with_maxServerSelectionWaitQueueSize_should_initialize_instance()
  105. {
  106. var maxServerSelectionWaitQueueSize = 123;
  107. var subject = new ClusterSettings(maxServerSelectionWaitQueueSize: maxServerSelectionWaitQueueSize);
  108. subject.ConnectionMode.Should().Be(__defaults.ConnectionMode);
  109. subject.EndPoints.Should().EqualUsing(__defaults.EndPoints, EndPointHelper.EndPointEqualityComparer);
  110. subject.LocalThreshold.Should().Be(__defaults.LocalThreshold);
  111. subject.MaxServerSelectionWaitQueueSize.Should().Be(maxServerSelectionWaitQueueSize);
  112. subject.ReplicaSetName.Should().Be(__defaults.ReplicaSetName);
  113. subject.Scheme.Should().Be(__defaults.Scheme);
  114. subject.ServerSelectionTimeout.Should().Be(__defaults.ServerSelectionTimeout);
  115. }
  116. [Fact]
  117. public void constructor_with_replicaSetName_should_initialize_instance()
  118. {
  119. var replicaSetName = "abc";
  120. var subject = new ClusterSettings(replicaSetName: replicaSetName);
  121. subject.ConnectionMode.Should().Be(__defaults.ConnectionMode);
  122. subject.EndPoints.Should().EqualUsing(__defaults.EndPoints, EndPointHelper.EndPointEqualityComparer);
  123. subject.LocalThreshold.Should().Be(__defaults.LocalThreshold);
  124. subject.MaxServerSelectionWaitQueueSize.Should().Be(__defaults.MaxServerSelectionWaitQueueSize);
  125. subject.ReplicaSetName.Should().Be(replicaSetName);
  126. subject.Scheme.Should().Be(__defaults.Scheme);
  127. subject.ServerSelectionTimeout.Should().Be(__defaults.ServerSelectionTimeout);
  128. }
  129. [Fact]
  130. public void constructor_with_scheme_should_initialize_instance()
  131. {
  132. var scheme = ConnectionStringScheme.MongoDBPlusSrv;
  133. var subject = new ClusterSettings(scheme: scheme);
  134. subject.ConnectionMode.Should().Be(__defaults.ConnectionMode);
  135. subject.EndPoints.Should().EqualUsing(__defaults.EndPoints, EndPointHelper.EndPointEqualityComparer);
  136. subject.LocalThreshold.Should().Be(__defaults.LocalThreshold);
  137. subject.MaxServerSelectionWaitQueueSize.Should().Be(__defaults.MaxServerSelectionWaitQueueSize);
  138. subject.ReplicaSetName.Should().Be(__defaults.ReplicaSetName);
  139. subject.Scheme.Should().Be(scheme);
  140. subject.ServerSelectionTimeout.Should().Be(__defaults.ServerSelectionTimeout);
  141. }
  142. [Fact]
  143. public void constructor_with_serverSelectionTimeout_should_initialize_instance()
  144. {
  145. var serverSelectionTimeout = TimeSpan.FromSeconds(123);
  146. var subject = new ClusterSettings(serverSelectionTimeout: serverSelectionTimeout);
  147. subject.ConnectionMode.Should().Be(__defaults.ConnectionMode);
  148. subject.EndPoints.Should().EqualUsing(__defaults.EndPoints, EndPointHelper.EndPointEqualityComparer);
  149. subject.LocalThreshold.Should().Be(__defaults.LocalThreshold);
  150. subject.MaxServerSelectionWaitQueueSize.Should().Be(__defaults.MaxServerSelectionWaitQueueSize);
  151. subject.ReplicaSetName.Should().Be(__defaults.ReplicaSetName);
  152. subject.Scheme.Should().Be(__defaults.Scheme);
  153. subject.ServerSelectionTimeout.Should().Be(serverSelectionTimeout);
  154. }
  155. [Fact]
  156. public void With_connectionMode_should_return_expected_result()
  157. {
  158. var oldConnectionMode = ClusterConnectionMode.Automatic;
  159. var newConnectionMode = ClusterConnectionMode.ReplicaSet;
  160. var subject = new ClusterSettings(connectionMode: oldConnectionMode);
  161. var result = subject.With(connectionMode: newConnectionMode);
  162. result.ConnectionMode.Should().Be(newConnectionMode);
  163. result.EndPoints.Should().EqualUsing(subject.EndPoints, EndPointHelper.EndPointEqualityComparer);
  164. result.LocalThreshold.Should().Be(subject.LocalThreshold);
  165. result.MaxServerSelectionWaitQueueSize.Should().Be(subject.MaxServerSelectionWaitQueueSize);
  166. result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
  167. result.Scheme.Should().Be(subject.Scheme);
  168. result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
  169. }
  170. [Fact]
  171. public void With_endPoints_should_return_expected_result()
  172. {
  173. var oldEndPoints = new[] { new DnsEndPoint("remotehost1", 27123) };
  174. var newEndPoints = new[] { new DnsEndPoint("remotehost2", 27123) };
  175. var subject = new ClusterSettings(endPoints: oldEndPoints);
  176. var result = subject.With(endPoints: newEndPoints);
  177. result.ConnectionMode.Should().Be(subject.ConnectionMode);
  178. result.EndPoints.Should().EqualUsing(newEndPoints, EndPointHelper.EndPointEqualityComparer);
  179. result.LocalThreshold.Should().Be(subject.LocalThreshold);
  180. result.MaxServerSelectionWaitQueueSize.Should().Be(subject.MaxServerSelectionWaitQueueSize);
  181. result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
  182. result.Scheme.Should().Be(subject.Scheme);
  183. result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
  184. }
  185. [Fact]
  186. public void With_localThreshold_should_return_expected_result()
  187. {
  188. var oldLocalThreshold = TimeSpan.FromSeconds(2);
  189. var newLocalThreshold = TimeSpan.FromSeconds(1);
  190. var subject = new ClusterSettings(localThreshold: oldLocalThreshold);
  191. var result = subject.With(localThreshold: newLocalThreshold);
  192. result.ConnectionMode.Should().Be(subject.ConnectionMode);
  193. result.EndPoints.Should().EqualUsing(subject.EndPoints, EndPointHelper.EndPointEqualityComparer);
  194. result.LocalThreshold.Should().Be(newLocalThreshold);
  195. result.MaxServerSelectionWaitQueueSize.Should().Be(subject.MaxServerSelectionWaitQueueSize);
  196. result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
  197. result.Scheme.Should().Be(subject.Scheme);
  198. result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
  199. }
  200. [Fact]
  201. public void With_maxServerSelectionWaitQueueSize_should_return_expected_result()
  202. {
  203. var oldMaxServerSelectionWaitQueueSize = 1;
  204. var newMaxServerSelectionWaitQueueSize = 2;
  205. var subject = new ClusterSettings(maxServerSelectionWaitQueueSize: oldMaxServerSelectionWaitQueueSize);
  206. var result = subject.With(maxServerSelectionWaitQueueSize: newMaxServerSelectionWaitQueueSize);
  207. result.ConnectionMode.Should().Be(subject.ConnectionMode);
  208. result.EndPoints.Should().EqualUsing(subject.EndPoints, EndPointHelper.EndPointEqualityComparer);
  209. result.LocalThreshold.Should().Be(subject.LocalThreshold);
  210. result.MaxServerSelectionWaitQueueSize.Should().Be(newMaxServerSelectionWaitQueueSize);
  211. result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
  212. result.Scheme.Should().Be(subject.Scheme);
  213. result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
  214. }
  215. [Fact]
  216. public void With_replicaSetName_should_return_expected_result()
  217. {
  218. var oldReplicaSetName = "abc";
  219. var newReplicaSetName = "def";
  220. var subject = new ClusterSettings(replicaSetName: oldReplicaSetName);
  221. var result = subject.With(replicaSetName: newReplicaSetName);
  222. result.ConnectionMode.Should().Be(subject.ConnectionMode);
  223. result.EndPoints.Should().EqualUsing(subject.EndPoints, EndPointHelper.EndPointEqualityComparer);
  224. result.LocalThreshold.Should().Be(subject.LocalThreshold);
  225. result.MaxServerSelectionWaitQueueSize.Should().Be(subject.MaxServerSelectionWaitQueueSize);
  226. result.ReplicaSetName.Should().Be(newReplicaSetName);
  227. result.Scheme.Should().Be(subject.Scheme);
  228. result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
  229. }
  230. [Fact]
  231. public void With_scheme_should_return_expected_result()
  232. {
  233. var oldScheme = ConnectionStringScheme.MongoDB;
  234. var newScheme = ConnectionStringScheme.MongoDBPlusSrv;
  235. var subject = new ClusterSettings(scheme: oldScheme);
  236. var result = subject.With(scheme: newScheme);
  237. result.ConnectionMode.Should().Be(subject.ConnectionMode);
  238. result.EndPoints.Should().EqualUsing(subject.EndPoints, EndPointHelper.EndPointEqualityComparer);
  239. result.LocalThreshold.Should().Be(subject.LocalThreshold);
  240. result.MaxServerSelectionWaitQueueSize.Should().Be(subject.MaxServerSelectionWaitQueueSize);
  241. result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
  242. result.Scheme.Should().Be(newScheme);
  243. result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
  244. }
  245. [Fact]
  246. public void With_serverSelectionTimeout_should_return_expected_result()
  247. {
  248. var oldServerSelectionTimeout = TimeSpan.FromSeconds(1);
  249. var newServerSelectionTimeout = TimeSpan.FromSeconds(2);
  250. var subject = new ClusterSettings(serverSelectionTimeout: oldServerSelectionTimeout);
  251. var result = subject.With(serverSelectionTimeout: newServerSelectionTimeout);
  252. result.ConnectionMode.Should().Be(subject.ConnectionMode);
  253. result.EndPoints.Should().EqualUsing(subject.EndPoints, EndPointHelper.EndPointEqualityComparer);
  254. result.LocalThreshold.Should().Be(subject.LocalThreshold);
  255. result.MaxServerSelectionWaitQueueSize.Should().Be(subject.MaxServerSelectionWaitQueueSize);
  256. result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
  257. result.Scheme.Should().Be(subject.Scheme);
  258. result.ServerSelectionTimeout.Should().Be(newServerSelectionTimeout);
  259. }
  260. }
  261. }