PageRenderTime 59ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/src/MongoDB.Driver.Legacy.Tests/MongoServerSettingsTests.cs

http://github.com/mongodb/mongo-csharp-driver
C# | 735 lines | 602 code | 115 blank | 18 comment | 0 complexity | 491ad6c0951799c66a2e913ad58b2eba MD5 | raw file
Possible License(s): Apache-2.0
  1. /* Copyright 2010-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.Linq;
  17. using System.Net.Sockets;
  18. using System.Security.Authentication;
  19. using FluentAssertions;
  20. using MongoDB.Bson;
  21. using MongoDB.Driver;
  22. using NUnit.Framework;
  23. namespace MongoDB.Driver.Tests
  24. {
  25. [TestFixture]
  26. public class MongoServerSettingsTests
  27. {
  28. private readonly MongoServerAddress _localHost = new MongoServerAddress("localhost");
  29. [Test]
  30. [TestCase(false, AddressFamily.InterNetwork)]
  31. [TestCase(true, AddressFamily.InterNetworkV6)]
  32. public void TestAddressFamilyObsolete(bool ipv6, AddressFamily addressFamily)
  33. {
  34. #pragma warning disable 618
  35. var settings = new MongoServerSettings { IPv6 = ipv6 };
  36. Assert.AreEqual(addressFamily, settings.AddressFamily);
  37. #pragma warning restore
  38. }
  39. [Test]
  40. public void TestClone()
  41. {
  42. // set everything to non default values to test that all settings are cloned
  43. var connectionString =
  44. "mongodb://user1:password1@somehost/?" +
  45. "connect=direct;connectTimeout=123;uuidRepresentation=pythonLegacy;ipv6=true;" +
  46. "maxIdleTime=124;maxLifeTime=125;maxPoolSize=126;minPoolSize=127;" +
  47. "readPreference=secondary;readPreferenceTags=a:1,b:2;readPreferenceTags=c:3,d:4;localThreshold=128;socketTimeout=129;" +
  48. "serverSelectionTimeout=20s;ssl=true;sslVerifyCertificate=false;waitqueuesize=130;waitQueueTimeout=131;" +
  49. "w=1;fsync=true;journal=true;w=2;wtimeout=131;gssapiServiceName=other";
  50. var builder = new MongoUrlBuilder(connectionString);
  51. var url = builder.ToMongoUrl();
  52. var settings = MongoServerSettings.FromUrl(url);
  53. // a few settings can only be made in code
  54. settings.Credentials = new[] { MongoCredential.CreateMongoCRCredential("database", "username", "password").WithMechanismProperty("SERVICE_NAME", "other") };
  55. settings.SslSettings = new SslSettings { CheckCertificateRevocation = false };
  56. var clone = settings.Clone();
  57. Assert.AreEqual(settings, clone);
  58. }
  59. [Test]
  60. public void TestConnectionMode()
  61. {
  62. var settings = new MongoServerSettings();
  63. Assert.AreEqual(ConnectionMode.Automatic, settings.ConnectionMode);
  64. var connectionMode = ConnectionMode.Direct;
  65. settings.ConnectionMode = connectionMode;
  66. Assert.AreEqual(connectionMode, settings.ConnectionMode);
  67. settings.Freeze();
  68. Assert.AreEqual(connectionMode, settings.ConnectionMode);
  69. Assert.Throws<InvalidOperationException>(() => { settings.ConnectionMode = connectionMode; });
  70. }
  71. [Test]
  72. public void TestConnectTimeout()
  73. {
  74. var settings = new MongoServerSettings();
  75. Assert.AreEqual(MongoDefaults.ConnectTimeout, settings.ConnectTimeout);
  76. var connectTimeout = new TimeSpan(1, 2, 3);
  77. settings.ConnectTimeout = connectTimeout;
  78. Assert.AreEqual(connectTimeout, settings.ConnectTimeout);
  79. settings.Freeze();
  80. Assert.AreEqual(connectTimeout, settings.ConnectTimeout);
  81. Assert.Throws<InvalidOperationException>(() => { settings.ConnectTimeout = connectTimeout; });
  82. }
  83. [Test]
  84. public void TestCredentials()
  85. {
  86. var settings = new MongoServerSettings();
  87. Assert.AreEqual(0, settings.Credentials.Count());
  88. }
  89. [Test]
  90. public void TestDefaults()
  91. {
  92. var settings = new MongoServerSettings();
  93. Assert.AreEqual(ConnectionMode.Automatic, settings.ConnectionMode);
  94. Assert.AreEqual(MongoDefaults.ConnectTimeout, settings.ConnectTimeout);
  95. Assert.AreEqual(0, settings.Credentials.Count());
  96. Assert.AreEqual(MongoDefaults.GuidRepresentation, settings.GuidRepresentation);
  97. Assert.AreEqual(false, settings.IPv6);
  98. Assert.AreEqual(MongoDefaults.MaxConnectionIdleTime, settings.MaxConnectionIdleTime);
  99. Assert.AreEqual(MongoDefaults.MaxConnectionLifeTime, settings.MaxConnectionLifeTime);
  100. Assert.AreEqual(MongoDefaults.MaxConnectionPoolSize, settings.MaxConnectionPoolSize);
  101. Assert.AreEqual(MongoDefaults.MinConnectionPoolSize, settings.MinConnectionPoolSize);
  102. Assert.AreEqual(MongoDefaults.OperationTimeout, settings.OperationTimeout);
  103. Assert.AreEqual(ReadPreference.Primary, settings.ReadPreference);
  104. Assert.AreEqual(null, settings.ReplicaSetName);
  105. Assert.AreEqual(_localHost, settings.Server);
  106. Assert.AreEqual(_localHost, settings.Servers.First());
  107. Assert.AreEqual(1, settings.Servers.Count());
  108. Assert.AreEqual(MongoDefaults.ServerSelectionTimeout, settings.ServerSelectionTimeout);
  109. Assert.AreEqual(MongoDefaults.SocketTimeout, settings.SocketTimeout);
  110. Assert.AreEqual(null, settings.SslSettings);
  111. Assert.AreEqual(false, settings.UseSsl);
  112. Assert.AreEqual(true, settings.VerifySslCertificate);
  113. Assert.AreEqual(MongoDefaults.ComputedWaitQueueSize, settings.WaitQueueSize);
  114. Assert.AreEqual(MongoDefaults.WaitQueueTimeout, settings.WaitQueueTimeout);
  115. Assert.AreEqual(WriteConcern.Unacknowledged, settings.WriteConcern);
  116. }
  117. [Test]
  118. public void TestEquals()
  119. {
  120. var settings = new MongoServerSettings();
  121. var clone = settings.Clone();
  122. Assert.IsTrue(clone.Equals(settings));
  123. clone = settings.Clone();
  124. clone.ConnectionMode = ConnectionMode.Direct;
  125. Assert.IsFalse(clone.Equals(settings));
  126. clone = settings.Clone();
  127. clone.ConnectTimeout = new TimeSpan(1, 2, 3);
  128. Assert.IsFalse(clone.Equals(settings));
  129. clone = settings.Clone();
  130. clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db2", "user2", "password2") };
  131. Assert.IsFalse(clone.Equals(settings));
  132. clone = settings.Clone();
  133. clone.Credentials = new[] { MongoCredential.CreateMongoCRCredential("db1", "user2", "password2") };
  134. Assert.IsFalse(clone.Equals(settings));
  135. clone = settings.Clone();
  136. clone.GuidRepresentation = GuidRepresentation.PythonLegacy;
  137. Assert.IsFalse(clone.Equals(settings));
  138. clone = settings.Clone();
  139. clone.IPv6 = !settings.IPv6;
  140. Assert.IsFalse(clone.Equals(settings));
  141. clone = settings.Clone();
  142. clone.MaxConnectionIdleTime = new TimeSpan(1, 2, 3);
  143. Assert.IsFalse(clone.Equals(settings));
  144. clone = settings.Clone();
  145. clone.MaxConnectionLifeTime = new TimeSpan(1, 2, 3);
  146. Assert.IsFalse(clone.Equals(settings));
  147. clone = settings.Clone();
  148. clone.MaxConnectionPoolSize = settings.MaxConnectionPoolSize + 1;
  149. Assert.IsFalse(clone.Equals(settings));
  150. clone = settings.Clone();
  151. clone.MinConnectionPoolSize = settings.MinConnectionPoolSize + 1;
  152. Assert.IsFalse(clone.Equals(settings));
  153. clone = settings.Clone();
  154. clone.OperationTimeout = TimeSpan.FromMilliseconds(20);
  155. Assert.IsFalse(clone.Equals(settings));
  156. clone = settings.Clone();
  157. clone.ReadPreference = ReadPreference.Secondary;
  158. Assert.IsFalse(clone.Equals(settings));
  159. clone = settings.Clone();
  160. clone.ReplicaSetName = "abc";
  161. Assert.IsFalse(clone.Equals(settings));
  162. clone = settings.Clone();
  163. clone.LocalThreshold = new TimeSpan(1, 2, 3);
  164. Assert.IsFalse(clone.Equals(settings));
  165. clone = settings.Clone();
  166. clone.Server = new MongoServerAddress("someotherhost");
  167. Assert.IsFalse(clone.Equals(settings));
  168. clone = settings.Clone();
  169. clone.ServerSelectionTimeout = new TimeSpan(1, 2, 3);
  170. Assert.IsFalse(clone.Equals(settings));
  171. clone = settings.Clone();
  172. clone.SocketTimeout = new TimeSpan(1, 2, 3);
  173. Assert.IsFalse(clone.Equals(settings));
  174. clone = settings.Clone();
  175. clone.SslSettings = new SslSettings { CheckCertificateRevocation = false };
  176. Assert.IsFalse(clone.Equals(settings));
  177. clone = settings.Clone();
  178. clone.UseSsl = !settings.UseSsl;
  179. Assert.IsFalse(clone.Equals(settings));
  180. clone = settings.Clone();
  181. clone.VerifySslCertificate = !settings.VerifySslCertificate;
  182. Assert.IsFalse(clone.Equals(settings));
  183. clone = settings.Clone();
  184. clone.WaitQueueSize = settings.WaitQueueSize + 1;
  185. Assert.IsFalse(clone.Equals(settings));
  186. clone = settings.Clone();
  187. clone.WaitQueueTimeout = new TimeSpan(1, 2, 3);
  188. Assert.IsFalse(clone.Equals(settings));
  189. clone = settings.Clone();
  190. clone.WriteConcern = WriteConcern.W2;
  191. Assert.IsFalse(clone.Equals(settings));
  192. }
  193. [Test]
  194. public void TestFreeze()
  195. {
  196. var settings = new MongoServerSettings();
  197. Assert.IsFalse(settings.IsFrozen);
  198. var hashCode = settings.GetHashCode();
  199. var stringRepresentation = settings.ToString();
  200. settings.Freeze();
  201. Assert.IsTrue(settings.IsFrozen);
  202. Assert.AreEqual(hashCode, settings.GetHashCode());
  203. Assert.AreEqual(stringRepresentation, settings.ToString());
  204. }
  205. [Test]
  206. public void TestFromClientSettings()
  207. {
  208. // set everything to non default values to test that all settings are converted
  209. var connectionString =
  210. "mongodb://user1:password1@somehost/?authSource=db;authMechanismProperties=CANONICALIZE_HOST_NAME:true;" +
  211. "connect=direct;connectTimeout=123;uuidRepresentation=pythonLegacy;ipv6=true;" +
  212. "maxIdleTime=124;maxLifeTime=125;maxPoolSize=126;minPoolSize=127;" +
  213. "readPreference=secondary;readPreferenceTags=a:1,b:2;readPreferenceTags=c:3,d:4;localThreshold=128;socketTimeout=129;" +
  214. "serverSelectionTimeout=20s;ssl=true;sslVerifyCertificate=false;waitqueuesize=130;waitQueueTimeout=131;" +
  215. "w=1;fsync=true;journal=true;w=2;wtimeout=131;gssapiServiceName=other";
  216. var builder = new MongoUrlBuilder(connectionString);
  217. var url = builder.ToMongoUrl();
  218. var clientSettings = MongoClientSettings.FromUrl(url);
  219. var settings = MongoServerSettings.FromClientSettings(clientSettings);
  220. Assert.AreEqual(url.ConnectionMode, settings.ConnectionMode);
  221. Assert.AreEqual(url.ConnectTimeout, settings.ConnectTimeout);
  222. Assert.AreEqual(1, settings.Credentials.Count());
  223. Assert.AreEqual(url.Username, settings.Credentials.Single().Username);
  224. Assert.AreEqual(url.AuthenticationMechanism, settings.Credentials.Single().Mechanism);
  225. Assert.AreEqual("other", settings.Credentials.Single().GetMechanismProperty<string>("SERVICE_NAME", "mongodb"));
  226. Assert.AreEqual(true, settings.Credentials.Single().GetMechanismProperty<bool>("CANONICALIZE_HOST_NAME", false));
  227. Assert.AreEqual(url.AuthenticationSource, settings.Credentials.Single().Source);
  228. Assert.AreEqual(new PasswordEvidence(builder.Password), settings.Credentials.Single().Evidence);
  229. Assert.AreEqual(url.GuidRepresentation, settings.GuidRepresentation);
  230. Assert.AreEqual(url.IPv6, settings.IPv6);
  231. Assert.AreEqual(url.MaxConnectionIdleTime, settings.MaxConnectionIdleTime);
  232. Assert.AreEqual(url.MaxConnectionLifeTime, settings.MaxConnectionLifeTime);
  233. Assert.AreEqual(url.MaxConnectionPoolSize, settings.MaxConnectionPoolSize);
  234. Assert.AreEqual(url.MinConnectionPoolSize, settings.MinConnectionPoolSize);
  235. Assert.AreEqual(url.ReadPreference, settings.ReadPreference);
  236. Assert.AreEqual(url.ReplicaSetName, settings.ReplicaSetName);
  237. Assert.AreEqual(url.LocalThreshold, settings.LocalThreshold);
  238. Assert.IsTrue(url.Servers.SequenceEqual(settings.Servers));
  239. Assert.AreEqual(url.ServerSelectionTimeout, settings.ServerSelectionTimeout);
  240. Assert.AreEqual(url.SocketTimeout, settings.SocketTimeout);
  241. Assert.AreEqual(null, settings.SslSettings);
  242. Assert.AreEqual(url.UseSsl, settings.UseSsl);
  243. Assert.AreEqual(url.VerifySslCertificate, settings.VerifySslCertificate);
  244. Assert.AreEqual(url.ComputedWaitQueueSize, settings.WaitQueueSize);
  245. Assert.AreEqual(url.WaitQueueTimeout, settings.WaitQueueTimeout);
  246. Assert.AreEqual(url.GetWriteConcern(true), settings.WriteConcern);
  247. }
  248. [Test]
  249. public void TestFromUrl()
  250. {
  251. // set everything to non default values to test that all settings are converted
  252. var connectionString =
  253. "mongodb://user1:password1@somehost/?authSource=db;" +
  254. "connect=direct;connectTimeout=123;uuidRepresentation=pythonLegacy;ipv6=true;" +
  255. "maxIdleTime=124;maxLifeTime=125;maxPoolSize=126;minPoolSize=127;" +
  256. "readPreference=secondary;readPreferenceTags=a:1,b:2;readPreferenceTags=c:3,d:4;localThreshold=128;socketTimeout=129;" +
  257. "serverSelectionTimeout=20s;ssl=true;sslVerifyCertificate=false;waitqueuesize=130;waitQueueTimeout=131;" +
  258. "w=1;fsync=true;journal=true;w=2;wtimeout=131";
  259. var builder = new MongoUrlBuilder(connectionString);
  260. var url = builder.ToMongoUrl();
  261. var settings = MongoServerSettings.FromUrl(url);
  262. Assert.AreEqual(url.ConnectionMode, settings.ConnectionMode);
  263. Assert.AreEqual(url.ConnectTimeout, settings.ConnectTimeout);
  264. Assert.AreEqual(1, settings.Credentials.Count());
  265. Assert.AreEqual(url.Username, settings.Credentials.Single().Username);
  266. Assert.AreEqual(url.AuthenticationMechanism, settings.Credentials.Single().Mechanism);
  267. Assert.AreEqual(url.AuthenticationSource, settings.Credentials.Single().Source);
  268. Assert.AreEqual(new PasswordEvidence(url.Password), settings.Credentials.Single().Evidence);
  269. Assert.AreEqual(url.GuidRepresentation, settings.GuidRepresentation);
  270. Assert.AreEqual(url.IPv6, settings.IPv6);
  271. Assert.AreEqual(url.MaxConnectionIdleTime, settings.MaxConnectionIdleTime);
  272. Assert.AreEqual(url.MaxConnectionLifeTime, settings.MaxConnectionLifeTime);
  273. Assert.AreEqual(url.MaxConnectionPoolSize, settings.MaxConnectionPoolSize);
  274. Assert.AreEqual(url.MinConnectionPoolSize, settings.MinConnectionPoolSize);
  275. Assert.AreEqual(url.ReadPreference, settings.ReadPreference);
  276. Assert.AreEqual(url.ReplicaSetName, settings.ReplicaSetName);
  277. Assert.AreEqual(url.LocalThreshold, settings.LocalThreshold);
  278. Assert.IsTrue(url.Servers.SequenceEqual(settings.Servers));
  279. Assert.AreEqual(url.ServerSelectionTimeout, settings.ServerSelectionTimeout);
  280. Assert.AreEqual(url.SocketTimeout, settings.SocketTimeout);
  281. Assert.AreEqual(null, settings.SslSettings);
  282. Assert.AreEqual(url.UseSsl, settings.UseSsl);
  283. Assert.AreEqual(url.VerifySslCertificate, settings.VerifySslCertificate);
  284. Assert.AreEqual(url.ComputedWaitQueueSize, settings.WaitQueueSize);
  285. Assert.AreEqual(url.WaitQueueTimeout, settings.WaitQueueTimeout);
  286. Assert.AreEqual(url.GetWriteConcern(false), settings.WriteConcern);
  287. }
  288. [Test]
  289. public void TestFrozenCopy()
  290. {
  291. var settings = new MongoServerSettings();
  292. Assert.AreEqual(false, settings.IsFrozen);
  293. var frozenCopy = settings.FrozenCopy();
  294. Assert.AreEqual(true, frozenCopy.IsFrozen);
  295. Assert.AreNotSame(settings, frozenCopy);
  296. Assert.AreEqual(settings, frozenCopy);
  297. var secondFrozenCopy = frozenCopy.FrozenCopy();
  298. Assert.AreSame(frozenCopy, secondFrozenCopy);
  299. }
  300. [Test]
  301. public void TestGuidRepresentation()
  302. {
  303. var settings = new MongoServerSettings();
  304. Assert.AreEqual(MongoDefaults.GuidRepresentation, settings.GuidRepresentation);
  305. var guidRepresentation = GuidRepresentation.PythonLegacy;
  306. settings.GuidRepresentation = guidRepresentation;
  307. Assert.AreEqual(guidRepresentation, settings.GuidRepresentation);
  308. settings.Freeze();
  309. Assert.AreEqual(guidRepresentation, settings.GuidRepresentation);
  310. Assert.Throws<InvalidOperationException>(() => { settings.GuidRepresentation = guidRepresentation; });
  311. }
  312. [Test]
  313. public void TestIPv6()
  314. {
  315. var settings = new MongoServerSettings();
  316. Assert.AreEqual(false, settings.IPv6);
  317. var ipv6 = true;
  318. settings.IPv6 = ipv6;
  319. Assert.AreEqual(ipv6, settings.IPv6);
  320. settings.Freeze();
  321. Assert.AreEqual(ipv6, settings.IPv6);
  322. Assert.Throws<InvalidOperationException>(() => { settings.IPv6 = ipv6; });
  323. }
  324. [Test]
  325. public void TestMaxConnectionIdleTime()
  326. {
  327. var settings = new MongoServerSettings();
  328. Assert.AreEqual(MongoDefaults.MaxConnectionIdleTime, settings.MaxConnectionIdleTime);
  329. var maxConnectionIdleTime = new TimeSpan(1, 2, 3);
  330. settings.MaxConnectionIdleTime = maxConnectionIdleTime;
  331. Assert.AreEqual(maxConnectionIdleTime, settings.MaxConnectionIdleTime);
  332. settings.Freeze();
  333. Assert.AreEqual(maxConnectionIdleTime, settings.MaxConnectionIdleTime);
  334. Assert.Throws<InvalidOperationException>(() => { settings.MaxConnectionIdleTime = maxConnectionIdleTime; });
  335. }
  336. [Test]
  337. public void TestMaxConnectionLifeTime()
  338. {
  339. var settings = new MongoServerSettings();
  340. Assert.AreEqual(MongoDefaults.MaxConnectionLifeTime, settings.MaxConnectionLifeTime);
  341. var maxConnectionLifeTime = new TimeSpan(1, 2, 3);
  342. settings.MaxConnectionLifeTime = maxConnectionLifeTime;
  343. Assert.AreEqual(maxConnectionLifeTime, settings.MaxConnectionLifeTime);
  344. settings.Freeze();
  345. Assert.AreEqual(maxConnectionLifeTime, settings.MaxConnectionLifeTime);
  346. Assert.Throws<InvalidOperationException>(() => { settings.MaxConnectionLifeTime = maxConnectionLifeTime; });
  347. }
  348. [Test]
  349. public void TestMaxConnectionPoolSize()
  350. {
  351. var settings = new MongoServerSettings();
  352. Assert.AreEqual(MongoDefaults.MaxConnectionPoolSize, settings.MaxConnectionPoolSize);
  353. var maxConnectionPoolSize = 123;
  354. settings.MaxConnectionPoolSize = maxConnectionPoolSize;
  355. Assert.AreEqual(maxConnectionPoolSize, settings.MaxConnectionPoolSize);
  356. settings.Freeze();
  357. Assert.AreEqual(maxConnectionPoolSize, settings.MaxConnectionPoolSize);
  358. Assert.Throws<InvalidOperationException>(() => { settings.MaxConnectionPoolSize = maxConnectionPoolSize; });
  359. }
  360. [Test]
  361. public void TestMinConnectionPoolSize()
  362. {
  363. var settings = new MongoServerSettings();
  364. Assert.AreEqual(MongoDefaults.MinConnectionPoolSize, settings.MinConnectionPoolSize);
  365. var minConnectionPoolSize = 123;
  366. settings.MinConnectionPoolSize = minConnectionPoolSize;
  367. Assert.AreEqual(minConnectionPoolSize, settings.MinConnectionPoolSize);
  368. settings.Freeze();
  369. Assert.AreEqual(minConnectionPoolSize, settings.MinConnectionPoolSize);
  370. Assert.Throws<InvalidOperationException>(() => { settings.MinConnectionPoolSize = minConnectionPoolSize; });
  371. }
  372. [Test]
  373. public void TestOperationTimeout()
  374. {
  375. var settings = new MongoServerSettings();
  376. Assert.AreEqual(MongoDefaults.OperationTimeout, settings.OperationTimeout);
  377. var operationTimeout = new TimeSpan(1, 2, 3);
  378. settings.OperationTimeout = operationTimeout;
  379. Assert.AreEqual(operationTimeout, settings.OperationTimeout);
  380. settings.Freeze();
  381. Assert.AreEqual(operationTimeout, settings.OperationTimeout);
  382. Assert.Throws<InvalidOperationException>(() => { settings.OperationTimeout = operationTimeout; });
  383. }
  384. [Test]
  385. public void TestReadPreference()
  386. {
  387. var settings = new MongoServerSettings();
  388. Assert.AreEqual(ReadPreference.Primary, settings.ReadPreference);
  389. var readPreference = ReadPreference.Primary;
  390. settings.ReadPreference = readPreference;
  391. Assert.AreSame(readPreference, settings.ReadPreference);
  392. settings.Freeze();
  393. Assert.AreEqual(readPreference, settings.ReadPreference);
  394. Assert.Throws<InvalidOperationException>(() => { settings.ReadPreference = readPreference; });
  395. }
  396. [Test]
  397. public void TestReplicaSetName()
  398. {
  399. var settings = new MongoServerSettings();
  400. Assert.AreEqual(null, settings.ReplicaSetName);
  401. var replicaSetName = "abc";
  402. settings.ReplicaSetName = replicaSetName;
  403. Assert.AreSame(replicaSetName, settings.ReplicaSetName);
  404. settings.Freeze();
  405. Assert.AreSame(replicaSetName, settings.ReplicaSetName);
  406. Assert.Throws<InvalidOperationException>(() => { settings.ReplicaSetName = replicaSetName; });
  407. }
  408. [Test]
  409. public void TestLocalThreshold()
  410. {
  411. var settings = new MongoServerSettings();
  412. Assert.AreEqual(MongoDefaults.LocalThreshold, settings.LocalThreshold);
  413. var localThreshold = new TimeSpan(1, 2, 3);
  414. settings.LocalThreshold = localThreshold;
  415. Assert.AreEqual(localThreshold, settings.LocalThreshold);
  416. settings.Freeze();
  417. Assert.AreEqual(localThreshold, settings.LocalThreshold);
  418. Assert.Throws<InvalidOperationException>(() => { settings.LocalThreshold = localThreshold; });
  419. }
  420. [Test]
  421. public void TestServer()
  422. {
  423. var settings = new MongoServerSettings();
  424. Assert.AreEqual(_localHost, settings.Server);
  425. Assert.IsTrue(new[] { _localHost }.SequenceEqual(settings.Servers));
  426. var server = new MongoServerAddress("server");
  427. var servers = new[] { server };
  428. settings.Server = server;
  429. Assert.AreEqual(server, settings.Server);
  430. Assert.IsTrue(servers.SequenceEqual(settings.Servers));
  431. settings.Freeze();
  432. Assert.AreEqual(server, settings.Server);
  433. Assert.IsTrue(servers.SequenceEqual(settings.Servers));
  434. Assert.Throws<InvalidOperationException>(() => { settings.Server = server; });
  435. }
  436. [Test]
  437. public void TestServersWithOneServer()
  438. {
  439. var settings = new MongoServerSettings();
  440. Assert.AreEqual(_localHost, settings.Server);
  441. Assert.IsTrue(new[] { _localHost }.SequenceEqual(settings.Servers));
  442. var server = new MongoServerAddress("server");
  443. var servers = new[] { server };
  444. settings.Servers = servers;
  445. Assert.AreEqual(server, settings.Server);
  446. Assert.IsTrue(servers.SequenceEqual(settings.Servers));
  447. settings.Freeze();
  448. Assert.AreEqual(server, settings.Server);
  449. Assert.IsTrue(servers.SequenceEqual(settings.Servers));
  450. Assert.Throws<InvalidOperationException>(() => { settings.Server = server; });
  451. }
  452. [Test]
  453. public void TestServersWithTwoServers()
  454. {
  455. var settings = new MongoServerSettings();
  456. Assert.AreEqual(_localHost, settings.Server);
  457. Assert.IsTrue(new[] { _localHost }.SequenceEqual(settings.Servers));
  458. var servers = new MongoServerAddress[]
  459. {
  460. new MongoServerAddress("server1"),
  461. new MongoServerAddress("server2")
  462. };
  463. settings.Servers = servers;
  464. Assert.Throws<InvalidOperationException>(() => { var s = settings.Server; });
  465. Assert.IsTrue(servers.SequenceEqual(settings.Servers));
  466. settings.Freeze();
  467. Assert.Throws<InvalidOperationException>(() => { var s = settings.Server; });
  468. Assert.IsTrue(servers.SequenceEqual(settings.Servers));
  469. Assert.Throws<InvalidOperationException>(() => { settings.Servers = servers; });
  470. }
  471. [Test]
  472. public void TestServerSelectionTimeout()
  473. {
  474. var settings = new MongoServerSettings();
  475. Assert.AreEqual(MongoDefaults.ServerSelectionTimeout, settings.ServerSelectionTimeout);
  476. var serverSelectionTimeout = new TimeSpan(1, 2, 3);
  477. settings.ServerSelectionTimeout = serverSelectionTimeout;
  478. Assert.AreEqual(serverSelectionTimeout, settings.ServerSelectionTimeout);
  479. settings.Freeze();
  480. Assert.AreEqual(serverSelectionTimeout, settings.ServerSelectionTimeout);
  481. Assert.Throws<InvalidOperationException>(() => { settings.ServerSelectionTimeout = serverSelectionTimeout; });
  482. }
  483. [Test]
  484. public void TestSocketTimeout()
  485. {
  486. var settings = new MongoServerSettings();
  487. Assert.AreEqual(MongoDefaults.SocketTimeout, settings.SocketTimeout);
  488. var socketTimeout = new TimeSpan(1, 2, 3);
  489. settings.SocketTimeout = socketTimeout;
  490. Assert.AreEqual(socketTimeout, settings.SocketTimeout);
  491. settings.Freeze();
  492. Assert.AreEqual(socketTimeout, settings.SocketTimeout);
  493. Assert.Throws<InvalidOperationException>(() => { settings.SocketTimeout = socketTimeout; });
  494. }
  495. [Test]
  496. public void TestSslSettings()
  497. {
  498. var settings = new MongoServerSettings();
  499. Assert.AreEqual(null, settings.SslSettings);
  500. var sslSettings = new SslSettings { CheckCertificateRevocation = false };
  501. settings.SslSettings = sslSettings;
  502. Assert.AreEqual(sslSettings, settings.SslSettings);
  503. settings.Freeze();
  504. Assert.AreEqual(sslSettings, settings.SslSettings);
  505. Assert.Throws<InvalidOperationException>(() => { settings.SslSettings = sslSettings; });
  506. }
  507. [Test]
  508. public void TestUseSsl()
  509. {
  510. var settings = new MongoServerSettings();
  511. Assert.AreEqual(false, settings.UseSsl);
  512. var useSsl = true;
  513. settings.UseSsl = useSsl;
  514. Assert.AreEqual(useSsl, settings.UseSsl);
  515. settings.Freeze();
  516. Assert.AreEqual(useSsl, settings.UseSsl);
  517. Assert.Throws<InvalidOperationException>(() => { settings.UseSsl = useSsl; });
  518. }
  519. [Test]
  520. public void TestVerifySslCertificate()
  521. {
  522. var settings = new MongoServerSettings();
  523. Assert.AreEqual(true, settings.VerifySslCertificate);
  524. var verifySslCertificate = false;
  525. settings.VerifySslCertificate = verifySslCertificate;
  526. Assert.AreEqual(verifySslCertificate, settings.VerifySslCertificate);
  527. settings.Freeze();
  528. Assert.AreEqual(verifySslCertificate, settings.VerifySslCertificate);
  529. Assert.Throws<InvalidOperationException>(() => { settings.VerifySslCertificate = verifySslCertificate; });
  530. }
  531. [Test]
  532. public void TestWaitQueueSize()
  533. {
  534. var settings = new MongoServerSettings();
  535. Assert.AreEqual(MongoDefaults.ComputedWaitQueueSize, settings.WaitQueueSize);
  536. var waitQueueSize = 123;
  537. settings.WaitQueueSize = waitQueueSize;
  538. Assert.AreEqual(waitQueueSize, settings.WaitQueueSize);
  539. settings.Freeze();
  540. Assert.AreEqual(waitQueueSize, settings.WaitQueueSize);
  541. Assert.Throws<InvalidOperationException>(() => { settings.WaitQueueSize = waitQueueSize; });
  542. }
  543. [Test]
  544. public void TestWaitQueueTimeout()
  545. {
  546. var settings = new MongoServerSettings();
  547. Assert.AreEqual(MongoDefaults.WaitQueueTimeout, settings.WaitQueueTimeout);
  548. var waitQueueTimeout = new TimeSpan(1, 2, 3);
  549. settings.WaitQueueTimeout = waitQueueTimeout;
  550. Assert.AreEqual(waitQueueTimeout, settings.WaitQueueTimeout);
  551. settings.Freeze();
  552. Assert.AreEqual(waitQueueTimeout, settings.WaitQueueTimeout);
  553. Assert.Throws<InvalidOperationException>(() => { settings.WaitQueueTimeout = waitQueueTimeout; });
  554. }
  555. [Test]
  556. public void TestWriteConcern()
  557. {
  558. var settings = new MongoServerSettings();
  559. Assert.AreEqual(WriteConcern.Unacknowledged, settings.WriteConcern);
  560. var writeConcern = new WriteConcern();
  561. settings.WriteConcern = writeConcern;
  562. Assert.AreSame(writeConcern, settings.WriteConcern);
  563. settings.Freeze();
  564. Assert.AreEqual(writeConcern, settings.WriteConcern);
  565. Assert.Throws<InvalidOperationException>(() => { settings.WriteConcern = writeConcern; });
  566. }
  567. [Test]
  568. public void ToClusterKey_should_copy_relevant_values()
  569. {
  570. var credentials = new[] { MongoCredential.CreateMongoCRCredential("source", "username", "password") };
  571. var servers = new[] { new MongoServerAddress("localhost") };
  572. var sslSettings = new SslSettings
  573. {
  574. CheckCertificateRevocation = true,
  575. EnabledSslProtocols = SslProtocols.Ssl3
  576. };
  577. var subject = new MongoServerSettings
  578. {
  579. ConnectionMode = ConnectionMode.Direct,
  580. ConnectTimeout = TimeSpan.FromSeconds(1),
  581. Credentials = credentials,
  582. GuidRepresentation = GuidRepresentation.Standard,
  583. IPv6 = true,
  584. MaxConnectionIdleTime = TimeSpan.FromSeconds(2),
  585. MaxConnectionLifeTime = TimeSpan.FromSeconds(3),
  586. MaxConnectionPoolSize = 10,
  587. MinConnectionPoolSize = 5,
  588. ReplicaSetName = "rs",
  589. LocalThreshold = TimeSpan.FromMilliseconds(20),
  590. Servers = servers,
  591. ServerSelectionTimeout = TimeSpan.FromSeconds(6),
  592. SocketTimeout = TimeSpan.FromSeconds(4),
  593. SslSettings = sslSettings,
  594. UseSsl = true,
  595. VerifySslCertificate = true,
  596. WaitQueueSize = 20,
  597. WaitQueueTimeout = TimeSpan.FromSeconds(5)
  598. };
  599. var result = subject.ToClusterKey();
  600. result.ConnectionMode.Should().Be(subject.ConnectionMode);
  601. result.ConnectTimeout.Should().Be(subject.ConnectTimeout);
  602. result.Credentials.Should().Equal(subject.Credentials);
  603. result.IPv6.Should().Be(subject.IPv6);
  604. result.MaxConnectionIdleTime.Should().Be(subject.MaxConnectionIdleTime);
  605. result.MaxConnectionLifeTime.Should().Be(subject.MaxConnectionLifeTime);
  606. result.MaxConnectionPoolSize.Should().Be(subject.MaxConnectionPoolSize);
  607. result.MinConnectionPoolSize.Should().Be(subject.MinConnectionPoolSize);
  608. result.ReplicaSetName.Should().Be(subject.ReplicaSetName);
  609. result.LocalThreshold.Should().Be(subject.LocalThreshold);
  610. result.Servers.Should().Equal(subject.Servers);
  611. result.ServerSelectionTimeout.Should().Be(subject.ServerSelectionTimeout);
  612. result.SocketTimeout.Should().Be(subject.SocketTimeout);
  613. result.SslSettings.Should().Be(subject.SslSettings);
  614. result.UseSsl.Should().Be(subject.UseSsl);
  615. result.VerifySslCertificate.Should().Be(subject.VerifySslCertificate);
  616. result.WaitQueueSize.Should().Be(subject.WaitQueueSize);
  617. result.WaitQueueTimeout.Should().Be(subject.WaitQueueTimeout);
  618. }
  619. }
  620. }