|
16 | 16 |
|
17 | 17 | package com.google.cloud.spanner; |
18 | 18 |
|
19 | | -import static org.junit.Assert.assertThrows; |
20 | 19 | import static org.mockito.ArgumentMatchers.any; |
21 | 20 | import static org.mockito.ArgumentMatchers.eq; |
22 | | -import static org.mockito.Mockito.clearInvocations; |
23 | | -import static org.mockito.Mockito.doThrow; |
24 | 21 | import static org.mockito.Mockito.mock; |
25 | 22 | import static org.mockito.Mockito.verify; |
26 | 23 | import static org.mockito.Mockito.when; |
27 | 24 |
|
28 | 25 | import com.google.api.core.ApiFutures; |
29 | 26 | import com.google.cloud.Timestamp; |
30 | | -import com.google.protobuf.ByteString; |
31 | 27 | import io.opentelemetry.api.trace.Span; |
32 | 28 | import io.opentelemetry.context.Scope; |
33 | 29 | import org.junit.Test; |
@@ -60,67 +56,4 @@ public void testCommitReturnsCommitStats() { |
60 | 56 | verify(transaction).commitAsync(); |
61 | 57 | } |
62 | 58 | } |
63 | | - |
64 | | - @Test |
65 | | - public void testRetryUsesPreviousTransactionIdOnMultiplexedSession() { |
66 | | - // Set up mock transaction IDs |
67 | | - final ByteString mockTransactionId = ByteString.copyFromUtf8("mockTransactionId"); |
68 | | - final ByteString mockPreviousTransactionId = |
69 | | - ByteString.copyFromUtf8("mockPreviousTransactionId"); |
70 | | - |
71 | | - Span oTspan = mock(Span.class); |
72 | | - ISpan span = new OpenTelemetrySpan(oTspan); |
73 | | - when(oTspan.makeCurrent()).thenReturn(mock(Scope.class)); |
74 | | - // Mark the session as multiplexed. |
75 | | - when(session.getIsMultiplexed()).thenReturn(true); |
76 | | - |
77 | | - // Initialize a mock transaction with transactionId = null, previousTransactionId = null. |
78 | | - transaction = mock(TransactionRunnerImpl.TransactionContextImpl.class); |
79 | | - when(transaction.ensureTxnAsync()).thenReturn(ApiFutures.immediateFuture(null)); |
80 | | - when(session.newTransaction(eq(Options.fromTransactionOptions(Options.commitStats())), any())) |
81 | | - .thenReturn(transaction); |
82 | | - |
83 | | - // Simulate an ABORTED error being thrown when `commitAsync()` is called. |
84 | | - doThrow(SpannerExceptionFactory.newSpannerException(ErrorCode.ABORTED, "")) |
85 | | - .when(transaction) |
86 | | - .commitAsync(); |
87 | | - |
88 | | - try (AsyncTransactionManagerImpl manager = |
89 | | - new AsyncTransactionManagerImpl(session, span, Options.commitStats())) { |
90 | | - manager.beginAsync(); |
91 | | - |
92 | | - // Verify that for the first transaction attempt, the `previousTransactionId` is |
93 | | - // ByteString.EMPTY. |
94 | | - // This is because no transaction has been previously aborted at this point. |
95 | | - verify(session) |
96 | | - .newTransaction(Options.fromTransactionOptions(Options.commitStats()), ByteString.EMPTY); |
97 | | - assertThrows(AbortedException.class, manager::commitAsync); |
98 | | - clearInvocations(session); |
99 | | - |
100 | | - // Mock the transaction object to contain transactionID=null and |
101 | | - // previousTransactionId=mockPreviousTransactionId |
102 | | - when(transaction.getPreviousTransactionId()).thenReturn(mockPreviousTransactionId); |
103 | | - manager.resetForRetryAsync(); |
104 | | - // Verify that in the first retry attempt, the `previousTransactionId` |
105 | | - // (mockPreviousTransactionId) is passed to the new transaction. |
106 | | - // This allows Spanner to retry the transaction using the ID of the aborted transaction. |
107 | | - verify(session) |
108 | | - .newTransaction( |
109 | | - Options.fromTransactionOptions(Options.commitStats()), mockPreviousTransactionId); |
110 | | - assertThrows(AbortedException.class, manager::commitAsync); |
111 | | - clearInvocations(session); |
112 | | - |
113 | | - // Mock the transaction object to contain transactionID=mockTransactionId and |
114 | | - // previousTransactionId=mockPreviousTransactionId and transactionID = null |
115 | | - transaction.transactionId = mockTransactionId; |
116 | | - manager.resetForRetryAsync(); |
117 | | - // Verify that the latest `transactionId` (mockTransactionId) is used in the retry. |
118 | | - // This ensures the retry logic is working as expected with the latest transaction ID. |
119 | | - verify(session) |
120 | | - .newTransaction(Options.fromTransactionOptions(Options.commitStats()), mockTransactionId); |
121 | | - |
122 | | - when(transaction.rollbackAsync()).thenReturn(ApiFutures.immediateFuture(null)); |
123 | | - manager.closeAsync(); |
124 | | - } |
125 | | - } |
126 | 59 | } |
0 commit comments