@Test public void should_throw_exception_on_cas_error() throws Exception { // Given final AtomicReference<CASResult> atomicCASResult = new AtomicReference<>(null); CASResultListener listener = new CASResultListener() { @Override public void onCASSuccess() {} @Override public void onCASError(CASResult casResult) { atomicCASResult.compareAndSet(null, casResult); } }; wrapper = new RegularStatementWrapper( CompleteBean.class, rs, new Object[] {1}, ONE, Optional.fromNullable(listener), NO_SERIAL_CONSISTENCY); wrapper.invoker = invoker; when(rs.getQueryString()).thenReturn("UPDATE table IF name='John' SET"); when(session.execute(rs)).thenReturn(resultSet); when(resultSet.one()).thenReturn(row); when(row.getBool(CAS_RESULT_COLUMN)).thenReturn(false); when(row.getColumnDefinitions()).thenReturn(columnDefinitions); when(columnDefinitions.iterator().hasNext()).thenReturn(true, true, false); Definition col1 = buildColumnDef("keyspace", "table", "[applied]", DataType.cboolean()); Definition col2 = buildColumnDef("keyspace", "table", "name", DataType.text()); when(columnDefinitions.iterator().next()).thenReturn(col1, col2); when(invoker.invokeOnRowForType(row, DataType.cboolean().asJavaClass(), "[applied]")) .thenReturn(false); when(invoker.invokeOnRowForType(row, DataType.text().asJavaClass(), "name")) .thenReturn("Helen"); // When wrapper.execute(session); // Then verify(session).execute(rs); final CASResult actual = atomicCASResult.get(); assertThat(actual).isNotNull(); assertThat(actual.operation()).isEqualTo(UPDATE); assertThat(actual.currentValues()) .contains(MapEntry.entry("[applied]", false), MapEntry.entry("name", "Helen")); }
@Test public void should_execute_cas_successfully() throws Exception { // Given final AtomicBoolean casSuccess = new AtomicBoolean(false); CASResultListener listener = new CASResultListener() { @Override public void onCASSuccess() { casSuccess.compareAndSet(false, true); } @Override public void onCASError(CASResult casResult) {} }; when(rs.getQueryString()).thenReturn("INSERT INTO table IF NOT EXISTS"); wrapper = new RegularStatementWrapper( CompleteBean.class, rs, new Object[] {1}, ONE, Optional.fromNullable(listener), NO_SERIAL_CONSISTENCY); when(session.execute(rs)).thenReturn(resultSet); when(resultSet.one().getBool(CAS_RESULT_COLUMN)).thenReturn(true); // When wrapper.execute(session); // Then verify(session).execute(rs); assertThat(casSuccess.get()).isTrue(); }
@Test public void should_activate_query_tracing() throws Exception { // Given wrapper = new RegularStatementWrapper( Entity1.class, rs, new Object[] {1}, ONE, NO_LISTENER, NO_SERIAL_CONSISTENCY); // When wrapper.activateQueryTracing(rs); // Then verify(rs).enableTracing(); }
@Test public void should_get_bound_statement() throws Exception { // Given wrapper = new RegularStatementWrapper( CompleteBean.class, rs, new Object[] {1}, ONE, NO_LISTENER, NO_SERIAL_CONSISTENCY); // When final RegularStatement expectedRs = wrapper.getStatement(); // Then assertThat(expectedRs).isSameAs(rs); }
@Test public void should_notify_listener_on_cas_error() throws Exception { // Given wrapper = new RegularStatementWrapper( CompleteBean.class, rs, new Object[] {1}, ONE, NO_LISTENER, NO_SERIAL_CONSISTENCY); wrapper.invoker = invoker; when(rs.getQueryString()).thenReturn("INSERT INTO table IF NOT EXISTS"); when(session.execute(rs)).thenReturn(resultSet); when(resultSet.one()).thenReturn(row); when(row.getBool(CAS_RESULT_COLUMN)).thenReturn(false); when(row.getColumnDefinitions()).thenReturn(columnDefinitions); when(columnDefinitions.iterator().hasNext()).thenReturn(true, true, false); Definition col1 = buildColumnDef("keyspace", "table", "[applied]", DataType.cboolean()); Definition col2 = buildColumnDef("keyspace", "table", "id", DataType.bigint()); when(columnDefinitions.iterator().next()).thenReturn(col1, col2); when(invoker.invokeOnRowForType(row, DataType.cboolean().asJavaClass(), "[applied]")) .thenReturn(false); when(invoker.invokeOnRowForType(row, DataType.bigint().asJavaClass(), "id")).thenReturn(10L); AchillesLightWeightTransactionException caughtEx = null; // When try { wrapper.execute(session); } catch (AchillesLightWeightTransactionException ace) { caughtEx = ace; } // Then verify(session).execute(rs); assertThat(caughtEx).isNotNull(); assertThat(caughtEx.operation()).isEqualTo(INSERT); assertThat(caughtEx.currentValues()) .contains(MapEntry.entry("[applied]", false), MapEntry.entry("id", 10L)); }
@Test public void should_execute() throws Exception { // Given wrapper = new RegularStatementWrapper( CompleteBean.class, rs, new Object[] {1}, ONE, NO_LISTENER, Optional.fromNullable(LOCAL_SERIAL)); // When wrapper.execute(session); // Then verify(session).execute(rs); verify(rs).setConsistencyLevel(ONE); verify(rs).setSerialConsistencyLevel(LOCAL_SERIAL); }
@Test public void should_trace_query() throws Exception { // Given wrapper = new RegularStatementWrapper( Entity1.class, rs, new Object[] {1}, ONE, NO_LISTENER, NO_SERIAL_CONSISTENCY); ExecutionInfo executionInfo = mock(ExecutionInfo.class, RETURNS_DEEP_STUBS); QueryTrace.Event event = mock(QueryTrace.Event.class); when(resultSet.getAllExecutionInfo()).thenReturn(Arrays.asList(executionInfo)); when(executionInfo.getAchievedConsistencyLevel()).thenReturn(ConsistencyLevel.ALL); when(executionInfo.getQueryTrace().getEvents()).thenReturn(Arrays.asList(event)); when(event.getDescription()).thenReturn("description"); when(event.getSource()).thenReturn(InetAddress.getLocalHost()); when(event.getSourceElapsedMicros()).thenReturn(100); when(event.getThreadName()).thenReturn("thread"); // When wrapper.tracing(resultSet); // Then }