Skip to content

Commit 388c4c6

Browse files
committed
Update UnifiedCrudHelper with new operations and arguments
JAVA-4798
1 parent d68e311 commit 388c4c6

File tree

4 files changed

+87
-6
lines changed

4 files changed

+87
-6
lines changed

driver-core/src/test/resources/unified-test-format/retryable-reads/handshakeError.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"sharded",
1010
"load-balanced"
1111
],
12-
"auth": true
12+
"auth": false
1313
}
1414
],
1515
"createEntities": [

driver-core/src/test/resources/unified-test-format/retryable-writes/handshakeError.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@
208208
"x": 22
209209
}
210210
}
211-
}
211+
} ¡¡
212212
],
213213
"expectEvents": [
214214
{

driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedCrudHelper.java

Lines changed: 77 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.mongodb.client.MongoCollection;
3939
import com.mongodb.client.MongoCursor;
4040
import com.mongodb.client.MongoDatabase;
41+
import com.mongodb.client.MongoIterable;
4142
import com.mongodb.client.model.BulkWriteOptions;
4243
import com.mongodb.client.model.ChangeStreamPreAndPostImagesOptions;
4344
import com.mongodb.client.model.ClusteredIndexOptions;
@@ -169,10 +170,12 @@ OperationResult executeListDatabases(final BsonDocument operation) {
169170
: client.listDatabases(session, BsonDocument.class);
170171

171172
for (Map.Entry<String, BsonValue> cur : arguments.entrySet()) {
172-
//noinspection SwitchStatementWithTooFewBranches
173173
switch (cur.getKey()) {
174174
case "session":
175175
break;
176+
case "filter":
177+
iterable.filter(cur.getValue().asDocument());
178+
break;
176179
default:
177180
throw new UnsupportedOperationException("Unsupported argument: " + cur.getKey());
178181
}
@@ -182,6 +185,29 @@ OperationResult executeListDatabases(final BsonDocument operation) {
182185
new BsonArray(iterable.into(new ArrayList<>())));
183186
}
184187

188+
OperationResult executeListDatabaseNames(final BsonDocument operation) {
189+
MongoClient client = entities.getClient(operation.getString("object").getValue());
190+
191+
BsonDocument arguments = operation.getDocument("arguments", new BsonDocument());
192+
ClientSession session = getSession(arguments);
193+
MongoIterable<String> iterable = session == null
194+
? client.listDatabaseNames()
195+
: client.listDatabaseNames(session);
196+
197+
for (Map.Entry<String, BsonValue> cur : arguments.entrySet()) {
198+
//noinspection SwitchStatementWithTooFewBranches
199+
switch (cur.getKey()) {
200+
case "session":
201+
break;
202+
default:
203+
throw new UnsupportedOperationException("Unsupported argument: " + cur.getKey());
204+
}
205+
}
206+
207+
return resultOf(() ->
208+
new BsonArray(iterable.into(new ArrayList<>()).stream().map(BsonString::new).collect(toList())));
209+
}
210+
185211
OperationResult executeListCollections(final BsonDocument operation) {
186212
MongoDatabase database = entities.getDatabase(operation.getString("object").getValue());
187213

@@ -209,7 +235,51 @@ OperationResult executeListCollections(final BsonDocument operation) {
209235
new BsonArray(iterable.into(new ArrayList<>())));
210236
}
211237

238+
OperationResult executeListCollectionNames(final BsonDocument operation) {
239+
MongoDatabase database = entities.getDatabase(operation.getString("object").getValue());
240+
241+
BsonDocument arguments = operation.getDocument("arguments");
242+
ClientSession session = getSession(arguments);
243+
MongoIterable<String> iterable = session == null
244+
? database.listCollectionNames()
245+
: database.listCollectionNames(session);
246+
for (Map.Entry<String, BsonValue> cur : arguments.entrySet()) {
247+
switch (cur.getKey()) {
248+
case "session":
249+
break;
250+
case "filter":
251+
BsonDocument filter = cur.getValue().asDocument();
252+
if (!filter.isEmpty()) {
253+
throw new UnsupportedOperationException("The driver does not support filtering of collection names");
254+
}
255+
break;
256+
case "batchSize":
257+
iterable.batchSize(cur.getValue().asNumber().intValue());
258+
break;
259+
default:
260+
throw new UnsupportedOperationException("Unsupported argument: " + cur.getKey());
261+
}
262+
}
263+
264+
return resultOf(() ->
265+
new BsonArray(iterable.into(new ArrayList<>()).stream().map(BsonString::new).collect(toList())));
266+
}
267+
212268
OperationResult executeListIndexes(final BsonDocument operation) {
269+
ListIndexesIterable<BsonDocument> iterable = createListIndexesIterable(operation);
270+
271+
return resultOf(() ->
272+
new BsonArray(iterable.into(new ArrayList<>())));
273+
}
274+
275+
OperationResult executeListIndexNames(final BsonDocument operation) {
276+
ListIndexesIterable<BsonDocument> iterable = createListIndexesIterable(operation);
277+
278+
return resultOf(() ->
279+
new BsonArray(iterable.into(new ArrayList<>()).stream().map(document -> document.getString("name")).collect(toList())));
280+
}
281+
282+
private ListIndexesIterable<BsonDocument> createListIndexesIterable(final BsonDocument operation) {
213283
MongoCollection<BsonDocument> collection = entities.getCollection(operation.getString("object").getValue());
214284
BsonDocument arguments = operation.getDocument("arguments", new BsonDocument());
215285
ClientSession session = getSession(arguments);
@@ -227,9 +297,7 @@ OperationResult executeListIndexes(final BsonDocument operation) {
227297
throw new UnsupportedOperationException("Unsupported argument: " + cur.getKey());
228298
}
229299
}
230-
231-
return resultOf(() ->
232-
new BsonArray(iterable.into(new ArrayList<>())));
300+
return iterable;
233301
}
234302

235303
OperationResult executeFind(final BsonDocument operation) {
@@ -238,6 +306,11 @@ OperationResult executeFind(final BsonDocument operation) {
238306
new BsonArray(iterable.into(new ArrayList<>())));
239307
}
240308

309+
OperationResult executeFindOne(final BsonDocument operation) {
310+
FindIterable<BsonDocument> iterable = createFindIterable(operation);
311+
return resultOf(iterable::first);
312+
}
313+
241314
OperationResult createFindCursor(final BsonDocument operation) {
242315
FindIterable<BsonDocument> iterable = createFindIterable(operation);
243316
return resultOf(() -> {

driver-sync/src/test/functional/com/mongodb/client/unified/UnifiedTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ private OperationResult executeOperation(final UnifiedTestContext context, final
357357
return crudHelper.executeAggregate(operation);
358358
case "find":
359359
return crudHelper.executeFind(operation);
360+
case "findOne":
361+
return crudHelper.executeFindOne(operation);
360362
case "distinct":
361363
return crudHelper.executeDistinct(operation);
362364
case "countDocuments":
@@ -371,10 +373,16 @@ private OperationResult executeOperation(final UnifiedTestContext context, final
371373
return crudHelper.executeFindOneAndDelete(operation);
372374
case "listDatabases":
373375
return crudHelper.executeListDatabases(operation);
376+
case "listDatabaseNames":
377+
return crudHelper.executeListDatabaseNames(operation);
374378
case "listCollections":
375379
return crudHelper.executeListCollections(operation);
380+
case "listCollectionNames":
381+
return crudHelper.executeListCollectionNames(operation);
376382
case "listIndexes":
377383
return crudHelper.executeListIndexes(operation);
384+
case "listIndexNames":
385+
return crudHelper.executeListIndexNames(operation);
378386
case "dropCollection":
379387
return crudHelper.executeDropCollection(operation);
380388
case "createCollection":

0 commit comments

Comments
 (0)