PageRenderTime 48ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/src/test/com/mongodb/MongoClientURITest.java

http://github.com/mongodb/mongo-java-driver
Java | 324 lines | 258 code | 49 blank | 17 comment | 0 complexity | 1252d59963be39c2f7bb58aabcba4779 MD5 | raw file
Possible License(s): Apache-2.0
  1. /*
  2. * Copyright (c) 2008-2014 MongoDB, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.mongodb;
  17. import org.junit.Test;
  18. import javax.net.SocketFactory;
  19. import javax.net.ssl.SSLSocketFactory;
  20. import java.net.UnknownHostException;
  21. import static org.junit.Assert.assertArrayEquals;
  22. import static org.junit.Assert.assertEquals;
  23. import static org.junit.Assert.assertFalse;
  24. import static org.junit.Assert.assertNull;
  25. import static org.junit.Assert.assertTrue;
  26. import static org.junit.Assert.fail;
  27. public class MongoClientURITest {
  28. @Test
  29. public void testUnsupportedOption() {
  30. new MongoClientURI("mongodb://localhost/?unknownOption=true");
  31. }
  32. @Test
  33. public void testURIGetter() {
  34. assertEquals("mongodb://localhost", new MongoClientURI("mongodb://localhost").getURI());
  35. }
  36. @Test
  37. public void testOptionsWithoutTrailingSlash() {
  38. try {
  39. new MongoClientURI("mongodb://localhost?wTimeout=5");
  40. fail("This is not allowed");
  41. } catch (IllegalArgumentException e) {
  42. // ok
  43. }
  44. }
  45. @Test()
  46. public void testSingleServer() {
  47. MongoClientURI u = new MongoClientURI("mongodb://db.example.com");
  48. assertEquals(1, u.getHosts().size());
  49. assertEquals("db.example.com", u.getHosts().get(0));
  50. assertNull(u.getDatabase());
  51. assertNull(u.getCollection());
  52. assertNull( u.getUsername());
  53. assertEquals(null, u.getPassword());
  54. }
  55. @Test()
  56. public void testWithDatabase() {
  57. MongoClientURI u = new MongoClientURI("mongodb://foo/bar");
  58. assertEquals(1, u.getHosts().size());
  59. assertEquals("foo", u.getHosts().get(0));
  60. assertEquals("bar", u.getDatabase());
  61. assertEquals(null, u.getCollection());
  62. assertEquals(null, u.getUsername());
  63. assertEquals(null, u.getPassword());
  64. }
  65. @Test()
  66. public void testWithCollection() {
  67. MongoClientURI u = new MongoClientURI("mongodb://localhost/test.my.coll");
  68. assertEquals("test", u.getDatabase());
  69. assertEquals("my.coll", u.getCollection());
  70. }
  71. @Test()
  72. public void testBasic2() {
  73. MongoClientURI u = new MongoClientURI("mongodb://foo/bar.goo");
  74. assertEquals(1, u.getHosts().size());
  75. assertEquals("foo", u.getHosts().get(0));
  76. assertEquals("bar", u.getDatabase());
  77. assertEquals("goo", u.getCollection());
  78. }
  79. @Test()
  80. public void testUserPass() {
  81. final String userName = "user";
  82. final char[] password = "pass".toCharArray();
  83. MongoClientURI u = new MongoClientURI("mongodb://user:pass@host/bar");
  84. assertEquals(1, u.getHosts().size());
  85. assertEquals("host", u.getHosts().get(0));
  86. assertEquals(userName, u.getUsername());
  87. assertArrayEquals(password, u.getPassword());
  88. assertEquals(MongoCredential.createMongoCRCredential(userName, "bar", password), u.getCredentials());
  89. u = new MongoClientURI("mongodb://user@host/?authMechanism=GSSAPI");
  90. assertEquals(MongoCredential.createGSSAPICredential(userName), u.getCredentials());
  91. u = new MongoClientURI("mongodb://user@host/?authMechanism=GSSAPI&gssapiServiceName=foo");
  92. assertEquals(MongoCredential.createGSSAPICredential(userName).withMechanismProperty("SERVICE_NAME", "foo"), u.getCredentials());
  93. u = new MongoClientURI("mongodb://user:pass@host/?authMechanism=MONGODB-CR");
  94. assertEquals(MongoCredential.createMongoCRCredential(userName, "admin", password), u.getCredentials());
  95. u = new MongoClientURI("mongodb://user@host/?authMechanism=MONGODB-X509");
  96. assertEquals(MongoCredential.createMongoX509Credential(userName), u.getCredentials());
  97. u = new MongoClientURI("mongodb://bob:pwd@localhost/?authMechanism=PLAIN&authSource=db1");
  98. assertEquals(MongoCredential.createPlainCredential("bob", "db1", "pwd".toCharArray()), u.getCredentials());
  99. u = new MongoClientURI("mongodb://user:pass@host/?authSource=test");
  100. assertEquals(MongoCredential.createMongoCRCredential(userName, "test", password), u.getCredentials());
  101. u = new MongoClientURI("mongodb://user:pass@host");
  102. assertEquals(MongoCredential.createMongoCRCredential(userName, "admin", password), u.getCredentials());
  103. }
  104. @Test
  105. public void testUnsupportedAuthMechanism() {
  106. try {
  107. new MongoClientURI("mongodb://user:pass@host/?authMechanism=UNKNOWN");
  108. fail("Should fail due to unknown authMechanism");
  109. } catch (IllegalArgumentException e) {
  110. // expected
  111. }
  112. }
  113. @Test
  114. public void testURIEncoding() {
  115. MongoClientURI u = new MongoClientURI("mongodb://use%24:he%21%21o@localhost");
  116. assertEquals(MongoCredential.createMongoCRCredential("use$", "admin", "he!!o".toCharArray()), u.getCredentials());
  117. }
  118. @Test()
  119. public void testUserPassAndPort() {
  120. MongoClientURI u = new MongoClientURI("mongodb://user:pass@host:27011/bar");
  121. assertEquals(1, u.getHosts().size());
  122. assertEquals("host:27011", u.getHosts().get(0));
  123. assertEquals("user", u.getUsername());
  124. assertEquals("pass", new String(u.getPassword()));
  125. }
  126. @Test()
  127. public void testUserPassAndMultipleHostsWithPort() {
  128. MongoClientURI u = new MongoClientURI("mongodb://user:pass@host:27011,host2:27012,host3:27013/bar");
  129. assertEquals(3, u.getHosts().size());
  130. assertEquals("host:27011", u.getHosts().get(0));
  131. assertEquals("host2:27012", u.getHosts().get(1));
  132. assertEquals("host3:27013", u.getHosts().get(2));
  133. assertEquals("user", u.getUsername());
  134. assertEquals("pass", new String(u.getPassword()));
  135. }
  136. @Test()
  137. public void testWriteConcern() {
  138. MongoClientURI uri = new MongoClientURI("mongodb://localhost");
  139. assertEquals(WriteConcern.ACKNOWLEDGED, uri.getOptions().getWriteConcern());
  140. uri = new MongoClientURI("mongodb://localhost/?wTimeout=5");
  141. assertEquals(new WriteConcern(1, 5, false, false), uri.getOptions().getWriteConcern());
  142. uri = new MongoClientURI("mongodb://localhost/?fsync=true");
  143. assertEquals(new WriteConcern(1, 0, true, false), uri.getOptions().getWriteConcern());
  144. uri = new MongoClientURI("mongodb://localhost/?j=true");
  145. assertEquals(new WriteConcern(1, 0, false, true), uri.getOptions().getWriteConcern());
  146. uri = new MongoClientURI("mongodb://localhost/?w=2&wtimeout=5&fsync=true&j=true");
  147. assertEquals(new WriteConcern(2, 5, true, true), uri.getOptions().getWriteConcern());
  148. uri = new MongoClientURI("mongodb://localhost/?w=majority&wtimeout=5&fsync=true&j=true");
  149. assertEquals(new WriteConcern("majority", 5, true, true), uri.getOptions().getWriteConcern());
  150. uri = new MongoClientURI("mongodb://localhost/?safe=true");
  151. assertEquals(WriteConcern.ACKNOWLEDGED, uri.getOptions().getWriteConcern());
  152. uri = new MongoClientURI("mongodb://localhost/?safe=false");
  153. assertEquals(WriteConcern.UNACKNOWLEDGED, uri.getOptions().getWriteConcern());
  154. }
  155. @Test
  156. public void testSSLOption() {
  157. MongoClientURI uri = new MongoClientURI("mongodb://localhost/?ssl=false");
  158. assertFalse(uri.getOptions().getSocketFactory() instanceof SSLSocketFactory);
  159. uri = new MongoClientURI("mongodb://localhost/?ssl=true");
  160. assertTrue(uri.getOptions().getSocketFactory() instanceof SSLSocketFactory);
  161. }
  162. @Test()
  163. public void testOptions() {
  164. MongoClientURI uAmp = new MongoClientURI("mongodb://localhost/?" +
  165. "maxPoolSize=10&waitQueueMultiple=5&waitQueueTimeoutMS=150&" +
  166. "minPoolSize=7&maxIdleTimeMS=1000&maxLifeTimeMS=2000&" +
  167. "replicaSet=test&" +
  168. "connectTimeoutMS=2500&socketTimeoutMS=5500&autoConnectRetry=true&" +
  169. "slaveOk=true&safe=false&w=1&wtimeout=2500&fsync=true");
  170. assertOnOptions(uAmp.getOptions());
  171. MongoClientURI uSemi = new MongoClientURI("mongodb://localhost/?" +
  172. "maxPoolSize=10;waitQueueMultiple=5;waitQueueTimeoutMS=150;" +
  173. "minPoolSize=7;maxIdleTimeMS=1000;maxLifeTimeMS=2000;" +
  174. "replicaSet=test;" +
  175. "connectTimeoutMS=2500;socketTimeoutMS=5500;autoConnectRetry=true;" +
  176. "slaveOk=true;safe=false;w=1;wtimeout=2500;fsync=true");
  177. assertOnOptions(uSemi.getOptions());
  178. MongoClientURI uMixed = new MongoClientURI("mongodb://localhost/test?" +
  179. "maxPoolSize=10&waitQueueMultiple=5;waitQueueTimeoutMS=150;" +
  180. "minPoolSize=7&maxIdleTimeMS=1000;maxLifeTimeMS=2000&" +
  181. "replicaSet=test;" +
  182. "connectTimeoutMS=2500;socketTimeoutMS=5500&autoConnectRetry=true;" +
  183. "slaveOk=true;safe=false&w=1;wtimeout=2500;fsync=true");
  184. assertOnOptions(uMixed.getOptions());
  185. }
  186. @Test
  187. public void testBuilderOverrides() {
  188. MongoClientURI uri = new MongoClientURI("mongodb://localhost/?maxPoolSize=150",
  189. MongoClientOptions.builder().autoConnectRetry(true).connectionsPerHost(200));
  190. assertTrue(uri.getOptions().isAutoConnectRetry());
  191. assertEquals(150, uri.getOptions().getConnectionsPerHost());
  192. }
  193. @Test()
  194. public void testURIDefaults() throws UnknownHostException {
  195. MongoClientURI uri = new MongoClientURI("mongodb://localhost");
  196. MongoClientOptions options = uri.getOptions();
  197. assertEquals(options.getConnectionsPerHost(), 100);
  198. assertEquals(options.getThreadsAllowedToBlockForConnectionMultiplier(), 5);
  199. assertEquals(options.getMaxWaitTime(), 120000);
  200. assertEquals(options.getConnectTimeout(), 10000);
  201. assertEquals(options.getSocketTimeout(), 0);
  202. assertFalse(options.isSocketKeepAlive());
  203. assertFalse(options.isAutoConnectRetry());
  204. assertEquals(options.getMaxAutoConnectRetryTime(), 0);
  205. assertEquals(options.getDbDecoderFactory(), DefaultDBDecoder.FACTORY);
  206. assertEquals(options.getDbEncoderFactory(), DefaultDBEncoder.FACTORY);
  207. assertEquals(options.getSocketFactory(), SocketFactory.getDefault());
  208. assertEquals(options.getDescription(), null);
  209. assertEquals(options.getReadPreference(), ReadPreference.primary());
  210. assertTrue(options.isCursorFinalizerEnabled());
  211. assertNull(uri.getCredentials());
  212. }
  213. @Test()
  214. public void testReadPreferenceOptions() {
  215. MongoClientURI uri = new MongoClientURI("mongodb://localhost/?readPreference=secondaryPreferred");
  216. assertEquals(ReadPreference.secondaryPreferred(), uri.getOptions().getReadPreference());
  217. uri = new MongoClientURI("mongodb://localhost/?readPreference=secondaryPreferred&" +
  218. "readPreferenceTags=dc:ny,rack:1&readPreferenceTags=dc:ny&readPreferenceTags=");
  219. assertEquals(ReadPreference.secondaryPreferred
  220. (
  221. new BasicDBObject("dc", "ny").append("rack", "1"),
  222. new BasicDBObject("dc", "ny"),
  223. new BasicDBObject()
  224. ),
  225. uri.getOptions().getReadPreference());
  226. }
  227. @Test()
  228. public void testSingleIPV6Server() {
  229. MongoClientURI u = new MongoClientURI("mongodb://[2010:836B:4179::836B:4179]");
  230. assertEquals(1, u.getHosts().size());
  231. assertEquals("[2010:836B:4179::836B:4179]", u.getHosts().get(0));
  232. }
  233. @Test()
  234. public void testSingleIPV6ServerWithPort() {
  235. MongoClientURI u = new MongoClientURI("mongodb://[2010:836B:4179::836B:4179]:1000");
  236. assertEquals(1, u.getHosts().size());
  237. assertEquals("[2010:836B:4179::836B:4179]:1000", u.getHosts().get(0));
  238. }
  239. @Test()
  240. public void testSingleIPV6ServerWithUserAndPass() {
  241. MongoClientURI u = new MongoClientURI("mongodb://user:pass@[2010:836B:4179::836B:4179]");
  242. assertEquals("user", u.getUsername());
  243. assertArrayEquals("pass".toCharArray(), u.getPassword());
  244. assertEquals(1, u.getHosts().size());
  245. assertEquals("[2010:836B:4179::836B:4179]", u.getHosts().get(0));
  246. }
  247. @Test()
  248. public void testMultipleIPV6Servers() {
  249. MongoClientURI u = new MongoClientURI("mongodb://[::1],[2010:836B:4179::836B:4179]");
  250. assertEquals(2, u.getHosts().size());
  251. assertEquals("[::1]", u.getHosts().get(0));
  252. assertEquals("[2010:836B:4179::836B:4179]", u.getHosts().get(1));
  253. }
  254. @Test()
  255. public void testMultipleIPV6ServersWithPorts() {
  256. MongoClientURI u = new MongoClientURI("mongodb://[::1]:1000,[2010:836B:4179::836B:4179]:2000");
  257. assertEquals(2, u.getHosts().size());
  258. assertEquals("[::1]:1000", u.getHosts().get(0));
  259. assertEquals("[2010:836B:4179::836B:4179]:2000", u.getHosts().get(1));
  260. }
  261. @SuppressWarnings("deprecation")
  262. private void assertOnOptions(MongoClientOptions options) {
  263. assertEquals(10, options.getConnectionsPerHost(), 10);
  264. assertEquals(7, options.getMinConnectionsPerHost());
  265. assertEquals(1000, options.getMaxConnectionIdleTime());
  266. assertEquals(2000, options.getMaxConnectionLifeTime());
  267. assertEquals(5, options.getThreadsAllowedToBlockForConnectionMultiplier());
  268. assertEquals(150, options.getMaxWaitTime());
  269. assertEquals(5500, options.getSocketTimeout());
  270. assertTrue(options.isAutoConnectRetry());
  271. assertEquals(new WriteConcern(1, 2500, true), options.getWriteConcern());
  272. assertEquals(ReadPreference.secondaryPreferred(), options.getReadPreference());
  273. assertEquals("test", options.getRequiredReplicaSetName());
  274. }
  275. }