use of com.google.cloud.spanner.SessionPool.Clock in project java-spanner by googleapis.
the class SessionPoolTest method testSessionNotFoundReadOnlyTransaction.
@Test
public void testSessionNotFoundReadOnlyTransaction() {
Statement statement = Statement.of("SELECT 1");
final SessionImpl closedSession = mockSession();
when(closedSession.readOnlyTransaction()).thenThrow(SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName));
final SessionImpl openSession = mockSession();
ReadOnlyTransaction openTransaction = mock(ReadOnlyTransaction.class);
ResultSet openResultSet = mock(ResultSet.class);
when(openResultSet.next()).thenReturn(true, false);
when(openTransaction.executeQuery(statement)).thenReturn(openResultSet);
when(openSession.readOnlyTransaction()).thenReturn(openTransaction);
doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(closedSession);
});
return null;
}).doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(openSession);
});
return null;
}).when(sessionClient).asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class));
FakeClock clock = new FakeClock();
clock.currentTimeMillis = System.currentTimeMillis();
pool = createPool(clock);
ReadOnlyTransaction transaction = pool.getSession().readOnlyTransaction();
ResultSet resultSet = transaction.executeQuery(statement);
assertThat(resultSet.next()).isTrue();
}
use of com.google.cloud.spanner.SessionPool.Clock in project java-spanner by googleapis.
the class SessionPoolTest method testSessionNotFoundSingleUse.
@Test
public void testSessionNotFoundSingleUse() {
Statement statement = Statement.of("SELECT 1");
final SessionImpl closedSession = mockSession();
ReadContext closedContext = mock(ReadContext.class);
ResultSet closedResultSet = mock(ResultSet.class);
when(closedResultSet.next()).thenThrow(SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName));
when(closedContext.executeQuery(statement)).thenReturn(closedResultSet);
when(closedSession.singleUse()).thenReturn(closedContext);
final SessionImpl openSession = mockSession();
ReadContext openContext = mock(ReadContext.class);
ResultSet openResultSet = mock(ResultSet.class);
when(openResultSet.next()).thenReturn(true, false);
when(openContext.executeQuery(statement)).thenReturn(openResultSet);
when(openSession.singleUse()).thenReturn(openContext);
doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(closedSession);
});
return null;
}).doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(openSession);
});
return null;
}).when(sessionClient).asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class));
FakeClock clock = new FakeClock();
clock.currentTimeMillis = System.currentTimeMillis();
pool = createPool(clock);
ReadContext context = pool.getSession().singleUse();
ResultSet resultSet = context.executeQuery(statement);
assertThat(resultSet.next()).isTrue();
}
use of com.google.cloud.spanner.SessionPool.Clock in project java-spanner by googleapis.
the class SessionPoolTest method testSessionNotFoundWriteAtLeastOnce.
@Test
public void testSessionNotFoundWriteAtLeastOnce() {
SpannerException sessionNotFound = SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName);
List<Mutation> mutations = Collections.singletonList(Mutation.newInsertBuilder("FOO").build());
final SessionImpl closedSession = mockSession();
when(closedSession.writeAtLeastOnceWithOptions(mutations)).thenThrow(sessionNotFound);
final SessionImpl openSession = mockSession();
com.google.cloud.spanner.CommitResponse response = mock(com.google.cloud.spanner.CommitResponse.class);
when(response.getCommitTimestamp()).thenReturn(Timestamp.now());
when(openSession.writeAtLeastOnceWithOptions(mutations)).thenReturn(response);
doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(closedSession);
});
return null;
}).doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(openSession);
});
return null;
}).when(sessionClient).asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class));
FakeClock clock = new FakeClock();
clock.currentTimeMillis = System.currentTimeMillis();
pool = createPool(clock);
DatabaseClientImpl impl = new DatabaseClientImpl(pool);
assertThat(impl.writeAtLeastOnce(mutations)).isNotNull();
}
use of com.google.cloud.spanner.SessionPool.Clock in project java-spanner by googleapis.
the class SessionPoolTest method testSessionNotFoundWrite.
@Test
public void testSessionNotFoundWrite() {
SpannerException sessionNotFound = SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName);
List<Mutation> mutations = Collections.singletonList(Mutation.newInsertBuilder("FOO").build());
final SessionImpl closedSession = mockSession();
when(closedSession.writeWithOptions(mutations)).thenThrow(sessionNotFound);
final SessionImpl openSession = mockSession();
com.google.cloud.spanner.CommitResponse response = mock(com.google.cloud.spanner.CommitResponse.class);
when(response.getCommitTimestamp()).thenReturn(Timestamp.now());
when(openSession.writeWithOptions(mutations)).thenReturn(response);
doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(closedSession);
});
return null;
}).doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(openSession);
});
return null;
}).when(sessionClient).asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class));
FakeClock clock = new FakeClock();
clock.currentTimeMillis = System.currentTimeMillis();
pool = createPool(clock);
DatabaseClientImpl impl = new DatabaseClientImpl(pool);
assertThat(impl.write(mutations)).isNotNull();
}
use of com.google.cloud.spanner.SessionPool.Clock in project java-spanner by googleapis.
the class SessionPoolTest method testSessionNotFoundPartitionedUpdate.
@Test
public void testSessionNotFoundPartitionedUpdate() {
SpannerException sessionNotFound = SpannerExceptionFactoryTest.newSessionNotFoundException(sessionName);
Statement statement = Statement.of("UPDATE FOO SET BAR=1 WHERE 1=1");
final SessionImpl closedSession = mockSession();
when(closedSession.executePartitionedUpdate(statement)).thenThrow(sessionNotFound);
final SessionImpl openSession = mockSession();
when(openSession.executePartitionedUpdate(statement)).thenReturn(1L);
doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(closedSession);
});
return null;
}).doAnswer(invocation -> {
executor.submit(() -> {
SessionConsumerImpl consumer = invocation.getArgument(2, SessionConsumerImpl.class);
consumer.onSessionReady(openSession);
});
return null;
}).when(sessionClient).asyncBatchCreateSessions(Mockito.eq(1), Mockito.anyBoolean(), any(SessionConsumer.class));
FakeClock clock = new FakeClock();
clock.currentTimeMillis = System.currentTimeMillis();
pool = createPool(clock);
DatabaseClientImpl impl = new DatabaseClientImpl(pool);
assertThat(impl.executePartitionedUpdate(statement)).isEqualTo(1L);
}
Aggregations