PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

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

http://github.com/mongodb/mongo-csharp-driver
C# | 351 lines | 278 code | 59 blank | 14 comment | 0 complexity | d98b90c3f43d9532e3b3497d302f938d 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.Sockets;
  17. using System.Threading;
  18. using FluentAssertions;
  19. using MongoDB.Bson.TestHelpers.XunitExtensions;
  20. using Xunit;
  21. namespace MongoDB.Driver.Core.Configuration
  22. {
  23. public class TcpStreamSettingsTests
  24. {
  25. private static readonly TcpStreamSettings __defaults = new TcpStreamSettings();
  26. [Fact]
  27. public void constructor_should_initialize_instance()
  28. {
  29. var subject = new TcpStreamSettings();
  30. subject.AddressFamily.Should().Be(AddressFamily.InterNetwork);
  31. subject.ConnectTimeout.Should().Be(Timeout.InfiniteTimeSpan);
  32. subject.ReadTimeout.Should().Be(null);
  33. subject.ReceiveBufferSize.Should().Be(64 * 1024);
  34. subject.SendBufferSize.Should().Be(64 * 1024);
  35. subject.SocketConfigurator.Should().BeNull();
  36. subject.WriteTimeout.Should().Be(null);
  37. }
  38. [Fact]
  39. public void constructor_with_other_should_initialize_instance()
  40. {
  41. var other = new TcpStreamSettings(
  42. addressFamily: AddressFamily.InterNetworkV6,
  43. connectTimeout: TimeSpan.FromSeconds(123),
  44. readTimeout: TimeSpan.FromSeconds(456),
  45. receiveBufferSize: 123,
  46. sendBufferSize: 456,
  47. socketConfigurator: (Action<Socket>)((Socket _) => { }),
  48. writeTimeout: TimeSpan.FromSeconds(789)
  49. );
  50. var result = new TcpStreamSettings(other);
  51. result.AddressFamily.Should().Be(other.AddressFamily);
  52. result.ConnectTimeout.Should().Be(other.ConnectTimeout);
  53. result.ReadTimeout.Should().Be(other.ReadTimeout);
  54. result.ReceiveBufferSize.Should().Be(other.ReceiveBufferSize);
  55. result.SendBufferSize.Should().Be(other.SendBufferSize);
  56. result.SocketConfigurator.Should().Be(other.SocketConfigurator);
  57. result.WriteTimeout.Should().Be(other.WriteTimeout);
  58. }
  59. [Fact]
  60. public void constructor_should_throw_when_connectTimeout_is_negative()
  61. {
  62. Action action = () => new TcpStreamSettings(connectTimeout: TimeSpan.FromSeconds(-1));
  63. action.ShouldThrow<ArgumentException>().And.ParamName.Should().Be("connectTimeout");
  64. }
  65. [Fact]
  66. public void constructor_should_throw_when_readTimeout_is_negative()
  67. {
  68. Action action = () => new TcpStreamSettings(readTimeout: TimeSpan.FromSeconds(-1));
  69. action.ShouldThrow<ArgumentException>().And.ParamName.Should().Be("readTimeout");
  70. }
  71. [Theory]
  72. [ParameterAttributeData]
  73. public void constructor_should_throw_when_receiveBufferSize_is_negative_or_zero(
  74. [Values(-1, 0)]
  75. int receiveBufferSize)
  76. {
  77. Action action = () => new TcpStreamSettings(receiveBufferSize: receiveBufferSize);
  78. action.ShouldThrow<ArgumentException>().And.ParamName.Should().Be("receiveBufferSize");
  79. }
  80. [Theory]
  81. [ParameterAttributeData]
  82. public void constructor_should_throw_when_sendBufferSize_is_negative_or_zero(
  83. [Values(-1, 0)]
  84. int sendBufferSize)
  85. {
  86. Action action = () => new TcpStreamSettings(sendBufferSize: sendBufferSize);
  87. action.ShouldThrow<ArgumentException>().And.ParamName.Should().Be("sendBufferSize");
  88. }
  89. [Fact]
  90. public void constructor_should_throw_when_writeTimeout_is_negative()
  91. {
  92. Action action = () => new TcpStreamSettings(writeTimeout: TimeSpan.FromSeconds(-1));
  93. action.ShouldThrow<ArgumentException>().And.ParamName.Should().Be("writeTimeout");
  94. }
  95. [Fact]
  96. public void constructor_with_addressFamily_should_initialize_instance()
  97. {
  98. var addressFamily = AddressFamily.InterNetworkV6;
  99. var subject = new TcpStreamSettings(addressFamily: addressFamily);
  100. subject.AddressFamily.Should().Be(addressFamily);
  101. subject.ConnectTimeout.Should().Be(__defaults.ConnectTimeout);
  102. subject.ReadTimeout.Should().Be(__defaults.ReadTimeout);
  103. subject.ReceiveBufferSize.Should().Be(__defaults.ReceiveBufferSize);
  104. subject.SendBufferSize.Should().Be(__defaults.SendBufferSize);
  105. subject.SocketConfigurator.Should().Be(__defaults.SocketConfigurator);
  106. subject.WriteTimeout.Should().Be(__defaults.WriteTimeout);
  107. }
  108. [Fact]
  109. public void constructor_with_connectTimeout_should_initialize_instance()
  110. {
  111. var connectTimeout = TimeSpan.FromSeconds(123);
  112. var subject = new TcpStreamSettings(connectTimeout: connectTimeout);
  113. subject.AddressFamily.Should().Be(__defaults.AddressFamily);
  114. subject.ConnectTimeout.Should().Be(connectTimeout);
  115. subject.ReadTimeout.Should().Be(__defaults.ReadTimeout);
  116. subject.ReceiveBufferSize.Should().Be(__defaults.ReceiveBufferSize);
  117. subject.SendBufferSize.Should().Be(__defaults.SendBufferSize);
  118. subject.SocketConfigurator.Should().Be(__defaults.SocketConfigurator);
  119. subject.WriteTimeout.Should().Be(__defaults.WriteTimeout);
  120. }
  121. [Fact]
  122. public void constructor_with_readTimeout_should_initialize_instance()
  123. {
  124. var readTimeout = TimeSpan.FromSeconds(123);
  125. var subject = new TcpStreamSettings(readTimeout: readTimeout);
  126. subject.AddressFamily.Should().Be(__defaults.AddressFamily);
  127. subject.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  128. subject.ReadTimeout.Should().Be(readTimeout);
  129. subject.ReceiveBufferSize.Should().Be(__defaults.ReceiveBufferSize);
  130. subject.SendBufferSize.Should().Be(__defaults.SendBufferSize);
  131. subject.SocketConfigurator.Should().Be(__defaults.SocketConfigurator);
  132. subject.WriteTimeout.Should().Be(__defaults.WriteTimeout);
  133. }
  134. [Fact]
  135. public void constructor_with_receiveBufferSize_should_initialize_instance()
  136. {
  137. var receiveBufferSize = 123;
  138. var subject = new TcpStreamSettings(receiveBufferSize: receiveBufferSize);
  139. subject.AddressFamily.Should().Be(__defaults.AddressFamily);
  140. subject.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  141. subject.ReadTimeout.Should().Be(subject.ReadTimeout);
  142. subject.ReceiveBufferSize.Should().Be(receiveBufferSize);
  143. subject.SendBufferSize.Should().Be(__defaults.SendBufferSize);
  144. subject.SocketConfigurator.Should().Be(__defaults.SocketConfigurator);
  145. subject.WriteTimeout.Should().Be(__defaults.WriteTimeout);
  146. }
  147. [Fact]
  148. public void constructor_with_sendBufferSize_should_initialize_instance()
  149. {
  150. var sendBufferSize = 123;
  151. var subject = new TcpStreamSettings(sendBufferSize: sendBufferSize);
  152. subject.AddressFamily.Should().Be(__defaults.AddressFamily);
  153. subject.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  154. subject.ReadTimeout.Should().Be(subject.ReadTimeout);
  155. subject.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  156. subject.SendBufferSize.Should().Be(sendBufferSize);
  157. subject.SocketConfigurator.Should().Be(__defaults.SocketConfigurator);
  158. subject.WriteTimeout.Should().Be(__defaults.WriteTimeout);
  159. }
  160. [Fact]
  161. public void constructor_with_socketConfigurator_should_initialize_instance()
  162. {
  163. Action<Socket> socketConfigurator = s => { };
  164. var subject = new TcpStreamSettings(socketConfigurator: socketConfigurator);
  165. subject.AddressFamily.Should().Be(__defaults.AddressFamily);
  166. subject.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  167. subject.ReadTimeout.Should().Be(subject.ReadTimeout);
  168. subject.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  169. subject.SendBufferSize.Should().Be(subject.SendBufferSize);
  170. subject.SocketConfigurator.Should().Be(socketConfigurator);
  171. subject.WriteTimeout.Should().Be(__defaults.WriteTimeout);
  172. }
  173. [Fact]
  174. public void constructor_with_writeTimeout_should_initialize_instance()
  175. {
  176. var writeTimeout = TimeSpan.FromSeconds(123);
  177. var subject = new TcpStreamSettings(writeTimeout: writeTimeout);
  178. subject.AddressFamily.Should().Be(__defaults.AddressFamily);
  179. subject.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  180. subject.ReadTimeout.Should().Be(subject.ReadTimeout);
  181. subject.ReceiveBufferSize.Should().Be(__defaults.ReceiveBufferSize);
  182. subject.SendBufferSize.Should().Be(__defaults.SendBufferSize);
  183. subject.SocketConfigurator.Should().Be(__defaults.SocketConfigurator);
  184. subject.WriteTimeout.Should().Be(writeTimeout);
  185. }
  186. [Fact]
  187. public void With_addressFamily_should_return_expected_result()
  188. {
  189. var oldAddressFamily = AddressFamily.InterNetwork;
  190. var newAddressFamily = AddressFamily.InterNetworkV6;
  191. var subject = new TcpStreamSettings(addressFamily: oldAddressFamily);
  192. var result = subject.With(addressFamily: newAddressFamily);
  193. result.AddressFamily.Should().Be(newAddressFamily);
  194. result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  195. result.ReadTimeout.Should().Be(subject.ReadTimeout);
  196. result.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  197. result.SendBufferSize.Should().Be(subject.SendBufferSize);
  198. result.SocketConfigurator.Should().Be(subject.SocketConfigurator);
  199. result.WriteTimeout.Should().Be(subject.WriteTimeout);
  200. }
  201. [Fact]
  202. public void With_connectTimeout_should_return_expected_result()
  203. {
  204. var oldConnectTimeout = TimeSpan.FromSeconds(1);
  205. var newConnectTimeout = TimeSpan.FromSeconds(2);
  206. var subject = new TcpStreamSettings(connectTimeout: oldConnectTimeout);
  207. var result = subject.With(connectTimeout: newConnectTimeout);
  208. result.AddressFamily.Should().Be(subject.AddressFamily);
  209. result.ConnectTimeout.Should().Be(newConnectTimeout);
  210. result.ReadTimeout.Should().Be(subject.ReadTimeout);
  211. result.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  212. result.SendBufferSize.Should().Be(subject.SendBufferSize);
  213. result.SocketConfigurator.Should().Be(subject.SocketConfigurator);
  214. result.WriteTimeout.Should().Be(subject.WriteTimeout);
  215. }
  216. [Fact]
  217. public void With_readTimeout_should_return_expected_result()
  218. {
  219. var oldReadTimeout = TimeSpan.FromSeconds(1);
  220. var newOldTimeout = TimeSpan.FromSeconds(2);
  221. var subject = new TcpStreamSettings(readTimeout: oldReadTimeout);
  222. var result = subject.With(readTimeout: newOldTimeout);
  223. result.AddressFamily.Should().Be(subject.AddressFamily);
  224. result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  225. result.ReadTimeout.Should().Be(newOldTimeout);
  226. result.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  227. result.SendBufferSize.Should().Be(subject.SendBufferSize);
  228. result.SocketConfigurator.Should().Be(subject.SocketConfigurator);
  229. result.WriteTimeout.Should().Be(subject.WriteTimeout);
  230. }
  231. [Fact]
  232. public void With_receiveBufferSize_should_return_expected_result()
  233. {
  234. var oldReceiveBufferSize = 1;
  235. var newReceiveBufferSize = 2;
  236. var subject = new TcpStreamSettings(receiveBufferSize: oldReceiveBufferSize);
  237. var result = subject.With(receiveBufferSize: newReceiveBufferSize);
  238. result.AddressFamily.Should().Be(subject.AddressFamily);
  239. result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  240. result.ReadTimeout.Should().Be(subject.ReadTimeout);
  241. result.ReceiveBufferSize.Should().Be(newReceiveBufferSize);
  242. result.SendBufferSize.Should().Be(subject.SendBufferSize);
  243. result.SocketConfigurator.Should().Be(subject.SocketConfigurator);
  244. result.WriteTimeout.Should().Be(subject.WriteTimeout);
  245. }
  246. [Fact]
  247. public void With_sendBufferSize_should_return_expected_result()
  248. {
  249. var oldSendBufferSize = 1;
  250. var newSendBufferSize = 2;
  251. var subject = new TcpStreamSettings(sendBufferSize: oldSendBufferSize);
  252. var result = subject.With(sendBufferSize: newSendBufferSize);
  253. result.AddressFamily.Should().Be(subject.AddressFamily);
  254. result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  255. result.ReadTimeout.Should().Be(subject.ReadTimeout);
  256. result.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  257. result.SendBufferSize.Should().Be(newSendBufferSize);
  258. result.SocketConfigurator.Should().Be(subject.SocketConfigurator);
  259. result.WriteTimeout.Should().Be(subject.WriteTimeout);
  260. }
  261. [Fact]
  262. public void With_socketConfigurator_should_return_expected_result()
  263. {
  264. Action<Socket> oldSocketConfigurator = null;
  265. Action<Socket> newSocketConfigurator = s => { };
  266. var subject = new TcpStreamSettings(socketConfigurator: oldSocketConfigurator);
  267. var result = subject.With(socketConfigurator: newSocketConfigurator);
  268. result.AddressFamily.Should().Be(subject.AddressFamily);
  269. result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  270. result.ReadTimeout.Should().Be(subject.ReadTimeout);
  271. result.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  272. result.SendBufferSize.Should().Be(subject.SendBufferSize);
  273. result.SocketConfigurator.Should().Be(newSocketConfigurator);
  274. result.WriteTimeout.Should().Be(subject.WriteTimeout);
  275. }
  276. [Fact]
  277. public void With_writeTimeout_should_return_expected_result()
  278. {
  279. var oldWriteTimeout = TimeSpan.FromSeconds(1);
  280. var newWriteTimeout = TimeSpan.FromSeconds(2);
  281. var subject = new TcpStreamSettings(writeTimeout: oldWriteTimeout);
  282. var result = subject.With(writeTimeout: newWriteTimeout);
  283. result.AddressFamily.Should().Be(subject.AddressFamily);
  284. result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  285. result.ReadTimeout.Should().Be(subject.ReadTimeout);
  286. result.ReceiveBufferSize.Should().Be(subject.ReceiveBufferSize);
  287. result.SendBufferSize.Should().Be(subject.SendBufferSize);
  288. result.SocketConfigurator.Should().Be(subject.SocketConfigurator);
  289. result.WriteTimeout.Should().Be(newWriteTimeout);
  290. }
  291. }
  292. }