PageRenderTime 47ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/src/MongoDB.Driver.Tests/MongoClientSettingsTests.cs

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