Skip to content

Commit b4eb41b

Browse files
committed
JAVA-694: throw exception if ? in URI without a trailing slash
1 parent ab54332 commit b4eb41b

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

src/main/com/mongodb/MongoClientURI.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ public MongoClientURI(final String uri) {
152152
{
153153
int idx = uri.lastIndexOf("/");
154154
if (idx < 0) {
155+
if (uri.contains("?")) {
156+
throw new IllegalArgumentException("URI contains options without trailing slash");
157+
}
155158
serverPart = uri;
156159
nsPart = null;
157160
optionsPart = "";

src/test/com/mongodb/MongoClientURITest.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,29 @@
2424

2525
public class MongoClientURITest extends TestCase {
2626

27+
@Test
28+
public void testOptionsWithoutTrailingSlash() {
29+
try {
30+
new MongoClientURI("mongodb://localhost?wTimeout=5");
31+
fail("This is not allowed");
32+
} catch (IllegalArgumentException e) {
33+
// ok
34+
}
35+
36+
}
37+
@Test()
38+
public void testSingleServer() {
39+
MongoClientURI u = new MongoClientURI("mongodb://db.example.com");
40+
assertEquals(1, u.getHosts().size());
41+
assertEquals("db.example.com", u.getHosts().get(0));
42+
assertNull(u.getDatabase());
43+
assertNull(u.getCollection());
44+
assertNull( u.getUsername());
45+
assertEquals(null, u.getPassword());
46+
}
47+
2748
@Test()
28-
public void testBasic1() {
49+
public void testWithDatabase() {
2950
MongoClientURI u = new MongoClientURI("mongodb://foo/bar");
3051
assertEquals(1, u.getHosts().size());
3152
assertEquals("foo", u.getHosts().get(0));
@@ -36,7 +57,7 @@ public void testBasic1() {
3657
}
3758

3859
@Test()
39-
public void testCollection() {
60+
public void testWithCollection() {
4061
MongoClientURI u = new MongoClientURI("mongodb://localhost/test.my.coll");
4162
assertEquals("test", u.getDatabase());
4263
assertEquals("my.coll", u.getCollection());
@@ -111,12 +132,12 @@ public void testWriteConcern() {
111132

112133
@Test()
113134
public void testOptions() {
114-
MongoClientURI uAmp = new MongoClientURI("mongodb://localhost/test?" +
135+
MongoClientURI uAmp = new MongoClientURI("mongodb://localhost/?" +
115136
"maxPoolSize=10&waitQueueMultiple=5&waitQueueTimeoutMS=150&" +
116137
"connectTimeoutMS=2500&socketTimeoutMS=5500&autoConnectRetry=true&" +
117138
"slaveOk=true&safe=false&w=1&wtimeout=2500&fsync=true");
118139
assertOnOptions(uAmp.getOptions());
119-
MongoClientURI uSemi = new MongoClientURI("mongodb://localhost/test?" +
140+
MongoClientURI uSemi = new MongoClientURI("mongodb://localhost/?" +
120141
"maxPoolSize=10;waitQueueMultiple=5;waitQueueTimeoutMS=150;" +
121142
"connectTimeoutMS=2500;socketTimeoutMS=5500;autoConnectRetry=true;" +
122143
"slaveOk=true;safe=false;w=1;wtimeout=2500;fsync=true");

0 commit comments

Comments
 (0)