Skip to content

Commit 4e91fb3

Browse files
committed
chore(spanner): add unit tests in TransactionManagerImplTest
1 parent 144f706 commit 4e91fb3

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public void removeListener(Runnable listener) {
209209

210210
volatile ByteString transactionId;
211211

212-
final ByteString previousAbortedTransactionId;
212+
ByteString previousAbortedTransactionId;
213213

214214
private CommitResponse commitResponse;
215215
private final Clock clock;

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

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public void setUp() {
9898

9999
@Test
100100
public void beginCalledTwiceFails() {
101-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
101+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
102102
assertThat(manager.begin()).isEqualTo(txn);
103103
assertThat(manager.getState()).isEqualTo(TransactionState.STARTED);
104104
IllegalStateException e = assertThrows(IllegalStateException.class, () -> manager.begin());
@@ -126,7 +126,7 @@ public void resetBeforeBeginFails() {
126126

127127
@Test
128128
public void transactionRolledBackOnClose() {
129-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
129+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
130130
when(txn.isAborted()).thenReturn(false);
131131
manager.begin();
132132
manager.close();
@@ -135,7 +135,7 @@ public void transactionRolledBackOnClose() {
135135

136136
@Test
137137
public void commitSucceeds() {
138-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
138+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
139139
Timestamp commitTimestamp = Timestamp.ofTimeMicroseconds(1);
140140
CommitResponse response = new CommitResponse(commitTimestamp);
141141
when(txn.getCommitResponse()).thenReturn(response);
@@ -147,7 +147,7 @@ public void commitSucceeds() {
147147

148148
@Test
149149
public void resetAfterSuccessfulCommitFails() {
150-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
150+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
151151
manager.begin();
152152
manager.commit();
153153
IllegalStateException e =
@@ -157,21 +157,21 @@ public void resetAfterSuccessfulCommitFails() {
157157

158158
@Test
159159
public void resetAfterAbortSucceeds() {
160-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
160+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
161161
manager.begin();
162162
doThrow(SpannerExceptionFactory.newSpannerException(ErrorCode.ABORTED, "")).when(txn).commit();
163163
assertThrows(AbortedException.class, () -> manager.commit());
164164
assertEquals(TransactionState.ABORTED, manager.getState());
165165

166166
txn = Mockito.mock(TransactionRunnerImpl.TransactionContextImpl.class);
167-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
167+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
168168
assertThat(manager.resetForRetry()).isEqualTo(txn);
169169
assertThat(manager.getState()).isEqualTo(TransactionState.STARTED);
170170
}
171171

172172
@Test
173173
public void resetAfterErrorFails() {
174-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
174+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
175175
manager.begin();
176176
doThrow(SpannerExceptionFactory.newSpannerException(ErrorCode.UNKNOWN, "")).when(txn).commit();
177177
SpannerException e = assertThrows(SpannerException.class, () -> manager.commit());
@@ -184,7 +184,7 @@ public void resetAfterErrorFails() {
184184

185185
@Test
186186
public void rollbackAfterCommitFails() {
187-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
187+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
188188
manager.begin();
189189
manager.commit();
190190
IllegalStateException e = assertThrows(IllegalStateException.class, () -> manager.rollback());
@@ -193,7 +193,7 @@ public void rollbackAfterCommitFails() {
193193

194194
@Test
195195
public void commitAfterRollbackFails() {
196-
when(session.newTransaction(Options.fromTransactionOptions())).thenReturn(txn);
196+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
197197
manager.begin();
198198
manager.rollback();
199199
IllegalStateException e = assertThrows(IllegalStateException.class, () -> manager.commit());
@@ -363,4 +363,42 @@ public void inlineBegin() {
363363
assertThat(transactionsStarted.get()).isEqualTo(1);
364364
}
365365
}
366+
367+
@Test
368+
public void storePreviousTxnIdOnAbortForMultiplexedSession() {
369+
txn = Mockito.mock(TransactionRunnerImpl.TransactionContextImpl.class);
370+
final ByteString mockTransactionId = ByteString.copyFromUtf8("mockTransactionId");
371+
txn.transactionId = mockTransactionId;
372+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
373+
manager.begin();
374+
doThrow(SpannerExceptionFactory.newSpannerException(ErrorCode.ABORTED, "")).when(txn).commit();
375+
assertThrows(AbortedException.class, () -> manager.commit());
376+
assertEquals(TransactionState.ABORTED, manager.getState());
377+
378+
txn = Mockito.mock(TransactionRunnerImpl.TransactionContextImpl.class);
379+
txn.previousAbortedTransactionId = mockTransactionId;
380+
when(session.newTransaction(Options.fromTransactionOptions(), mockTransactionId))
381+
.thenReturn(txn);
382+
when(session.getIsMultiplexed()).thenReturn(true);
383+
assertThat(manager.resetForRetry()).isEqualTo(txn);
384+
assertThat(manager.getState()).isEqualTo(TransactionState.STARTED);
385+
}
386+
387+
@Test
388+
public void skipTxnIdStorageOnAbortForRegularSession() {
389+
txn = Mockito.mock(TransactionRunnerImpl.TransactionContextImpl.class);
390+
final ByteString mockTransactionId = ByteString.copyFromUtf8("mockTransactionId");
391+
txn.transactionId = mockTransactionId;
392+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
393+
manager.begin();
394+
doThrow(SpannerExceptionFactory.newSpannerException(ErrorCode.ABORTED, "")).when(txn).commit();
395+
assertThrows(AbortedException.class, () -> manager.commit());
396+
assertEquals(TransactionState.ABORTED, manager.getState());
397+
398+
txn = Mockito.mock(TransactionRunnerImpl.TransactionContextImpl.class);
399+
when(session.newTransaction(Options.fromTransactionOptions(), null)).thenReturn(txn);
400+
when(session.getIsMultiplexed()).thenReturn(false);
401+
assertThat(manager.resetForRetry()).isEqualTo(txn);
402+
assertThat(manager.getState()).isEqualTo(TransactionState.STARTED);
403+
}
366404
}

0 commit comments

Comments
 (0)