Skip to content

Commit b791c86

Browse files
authored
test: fix flaky InlineBeginTransactionTest (#664)
The query_ThenUpdate_ThenConsumeResultSet did not take into account that the session pool initialization will execute 4 BatchCreateSessions requests. These will normally be executed before the test transaction, but sometimes at least one of those requests might arrive after the transaction has started. That could cause the last 3 requests on the mock server to be different from what the test expected.
1 parent 0f9b7bd commit b791c86

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

google-cloud-spanner/src/test/java/com/google/cloud/spanner/InlineBeginTransactionTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1248,14 +1248,13 @@ public Long run(TransactionContext transaction) throws Exception {
12481248
// id returned by the update.
12491249
assertThat(mockSpanner.countRequestsOfType(BeginTransactionRequest.class)).isEqualTo(0L);
12501250
assertThat(mockSpanner.countRequestsOfType(ExecuteSqlRequest.class)).isEqualTo(2L);
1251+
assertThat(mockSpanner.countRequestsOfType(CommitRequest.class)).isEqualTo(1L);
12511252
assertThat(countTransactionsStarted()).isEqualTo(1);
1252-
List<AbstractMessage> requests = mockSpanner.getRequests();
1253-
requests = requests.subList(requests.size() - 3, requests.size());
1253+
List<AbstractMessage> requests = mockSpanner.getRequestsOfType(ExecuteSqlRequest.class);
12541254
assertThat(requests.get(0)).isInstanceOf(ExecuteSqlRequest.class);
12551255
assertThat(((ExecuteSqlRequest) requests.get(0)).getSql()).isEqualTo(UPDATE_STATEMENT.getSql());
12561256
assertThat(requests.get(1)).isInstanceOf(ExecuteSqlRequest.class);
12571257
assertThat(((ExecuteSqlRequest) requests.get(1)).getSql()).isEqualTo(SELECT1.getSql());
1258-
assertThat(requests.get(2)).isInstanceOf(CommitRequest.class);
12591258
}
12601259

12611260
private int countRequests(Class<? extends AbstractMessage> requestType) {

google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1905,6 +1905,20 @@ public List<AbstractMessage> getRequests() {
19051905
return new ArrayList<>(this.requests);
19061906
}
19071907

1908+
public void clearRequests() {
1909+
this.requests.clear();
1910+
}
1911+
1912+
public List<AbstractMessage> getRequestsOfType(Class<? extends AbstractMessage> type) {
1913+
List<AbstractMessage> res = new ArrayList<>();
1914+
for (AbstractMessage m : this.requests) {
1915+
if (m.getClass().equals(type)) {
1916+
res.add(m);
1917+
}
1918+
}
1919+
return res;
1920+
}
1921+
19081922
public Iterable<Class<? extends AbstractMessage>> getRequestTypes() {
19091923
List<Class<? extends AbstractMessage>> res = new LinkedList<>();
19101924
for (AbstractMessage m : this.requests) {

0 commit comments

Comments
 (0)