PageRenderTime 69ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

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

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