Skip to content

Commit 6d08459

Browse files
committed
JAVA-2815: New abort and commit specification tests
1 parent a0175e5 commit 6d08459

File tree

5 files changed

+107
-11
lines changed

5 files changed

+107
-11
lines changed

driver-async/src/test/functional/com/mongodb/async/client/TransactionsTest.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.mongodb.ClientSessionOptions;
2121
import com.mongodb.MongoCommandException;
2222
import com.mongodb.MongoNamespace;
23+
import com.mongodb.MongoWriteConcernException;
2324
import com.mongodb.ReadConcern;
2425
import com.mongodb.ReadConcernLevel;
2526
import com.mongodb.TransactionOptions;
@@ -265,11 +266,16 @@ public void execute() {
265266
String expectedError = getErrorContainsField(expectedResult);
266267
assertTrue(String.format("Expected '%s' but got '%s'", expectedError, e.getMessage()),
267268
e.getMessage().toLowerCase().contains(expectedError.toLowerCase()));
268-
} else if (hasErrorCodeNameField(expectedResult) || (e instanceof MongoCommandException)) {
269+
} else if (hasErrorCodeNameField(expectedResult) || (e instanceof MongoCommandException)
270+
|| (e instanceof MongoWriteConcernException)) {
269271
String expectedErrorCodeName = getErrorCodeNameField(expectedResult);
270-
MongoCommandException commandException = (MongoCommandException) e;
271-
assertEquals(expectedErrorCodeName,
272-
commandException.getResponse().getString("codeName", new BsonString("")).getValue());
272+
if (e instanceof MongoCommandException) {
273+
assertEquals(expectedErrorCodeName, ((MongoCommandException) e).getErrorCodeName());
274+
} else if (e instanceof MongoWriteConcernException) {
275+
assertEquals(expectedErrorCodeName, ((MongoWriteConcernException) e).getWriteConcernError().getCodeName());
276+
} else {
277+
throw e;
278+
}
273279
} else {
274280
throw e;
275281
}

driver-core/src/test/resources/transactions/README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ Null Values
144144
~~~~~~~~~~~
145145

146146
Some command-started events in ``expectations`` include ``null`` values for
147-
fields such as ``txnNumber``, ``autocommit``, ``writeConcern``, and ``stmtId``.
147+
fields such as ``txnNumber``, ``autocommit``, and ``writeConcern``.
148148
Tests MUST assert that the actual command **omits** any field that has a
149149
``null`` value in the expected command.
150150

driver-core/src/test/resources/transactions/abort.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,45 @@
537537
"data": []
538538
}
539539
}
540+
},
541+
{
542+
"description": "abort does not apply writeConcern",
543+
"operations": [
544+
{
545+
"name": "startTransaction",
546+
"arguments": {
547+
"session": "session0",
548+
"options": {
549+
"writeConcern": {
550+
"w": 10
551+
}
552+
}
553+
}
554+
},
555+
{
556+
"name": "insertOne",
557+
"arguments": {
558+
"document": {
559+
"_id": 1
560+
},
561+
"session": "session0"
562+
},
563+
"result": {
564+
"insertedId": 1
565+
}
566+
},
567+
{
568+
"name": "abortTransaction",
569+
"arguments": {
570+
"session": "session0"
571+
}
572+
}
573+
],
574+
"outcome": {
575+
"collection": {
576+
"data": []
577+
}
578+
}
540579
}
541580
]
542581
}

driver-core/src/test/resources/transactions/commit.json

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,52 @@
235235
]
236236
}
237237
}
238+
},
239+
{
240+
"description": "write concern error on commit",
241+
"operations": [
242+
{
243+
"name": "startTransaction",
244+
"arguments": {
245+
"session": "session0",
246+
"options": {
247+
"writeConcern": {
248+
"w": 10
249+
}
250+
}
251+
}
252+
},
253+
{
254+
"name": "insertOne",
255+
"arguments": {
256+
"document": {
257+
"_id": 1
258+
},
259+
"session": "session0"
260+
},
261+
"result": {
262+
"insertedId": 1
263+
}
264+
},
265+
{
266+
"name": "commitTransaction",
267+
"arguments": {
268+
"session": "session0"
269+
},
270+
"result": {
271+
"errorCodeName": "CannotSatisfyWriteConcern"
272+
}
273+
}
274+
],
275+
"outcome": {
276+
"collection": {
277+
"data": [
278+
{
279+
"_id": 1
280+
}
281+
]
282+
}
283+
}
238284
}
239285
]
240286
}

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.mongodb.ClientSessionOptions;
2121
import com.mongodb.MongoCommandException;
2222
import com.mongodb.MongoNamespace;
23+
import com.mongodb.MongoWriteConcernException;
2324
import com.mongodb.ReadConcern;
2425
import com.mongodb.ReadConcernLevel;
2526
import com.mongodb.TransactionOptions;
@@ -252,13 +253,17 @@ public void shouldPassAllOutcomes() {
252253
String expectedError = getErrorContainsField(expectedResult);
253254
assertTrue(String.format("Expected '%s' but got '%s'", expectedError, e.getMessage()),
254255
e.getMessage().toLowerCase().contains(expectedError.toLowerCase()));
255-
} else if (hasErrorCodeNameField(expectedResult) || (e instanceof MongoCommandException)) {
256+
} else if (hasErrorCodeNameField(expectedResult) || (e instanceof MongoCommandException)
257+
|| (e instanceof MongoWriteConcernException)) {
256258
String expectedErrorCodeName = getErrorCodeNameField(expectedResult);
257-
MongoCommandException commandException = (MongoCommandException) e;
258-
assertEquals(expectedErrorCodeName,
259-
commandException.getResponse().getString("codeName", new BsonString("")).getValue());
260-
}
261-
else {
259+
if (e instanceof MongoCommandException) {
260+
assertEquals(expectedErrorCodeName, ((MongoCommandException) e).getErrorCodeName());
261+
} else if (e instanceof MongoWriteConcernException) {
262+
assertEquals(expectedErrorCodeName, ((MongoWriteConcernException) e).getWriteConcernError().getCodeName());
263+
} else {
264+
throw e;
265+
}
266+
} else {
262267
throw e;
263268
}
264269
}

0 commit comments

Comments
 (0)