- @Test
- public void submitTxTimeoutTransactionTest() {
- ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor());
- Mockito.when(rwTransactionMock.commit()).then(invocation -> Futures.makeChecked(executor.submit(() -> {
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- Assert.fail("Exception catched in future! " + e);
- }
- return null;
- }), input -> input));
-
- Future<java.util.Optional<DeviceTransaction>> deviceTxFuture =
- transactionManager.getDeviceTransaction(defaultDeviceId);
- DeviceTransaction deviceTx;
- try {
- deviceTx = deviceTxFuture.get().get();
- } catch (InterruptedException | ExecutionException e) {
- Assert.fail("Exception catched! " + e);
- return;
- }
-
- deviceTx.put(defaultDatastore, defaultIid, defaultData);
-
- Exception throwedException = null;
-
- ListenableFuture<Void> submitFuture = deviceTx.submit(200, defaultTimeUnit);
- try {
- submitFuture.get();
- } catch (InterruptedException e) {
- Assert.fail("Exception catched! " + e);
- } catch (ExecutionException e) {
- throwedException = e;
- }
-
- if (throwedException == null
- || !throwedException.getMessage().contains(TimeoutException.class.getName())) {
- Assert.fail("TimeoutException inside of should be thrown!");
- return;
- }
-
-
- Mockito.doReturn(FluentFutures.immediateNullFluentFuture()).when(rwTransactionMock.commit());
-
- try {
- putAndSubmit(transactionManager, defaultDeviceId, defaultDatastore, defaultIid, defaultData);
- } catch (InterruptedException | ExecutionException e) {
- Assert.fail("Exception catched! " + e);
- return;
- }
-
- Mockito.verify(rwTransactionMock, Mockito.times(2)).put(defaultDatastore, defaultIid, defaultData);
- Mockito.verify(rwTransactionMock, Mockito.times(2)).commit();
-
- executor.shutdown();
- }
-