1 package com.atlassian.sal.spring.connection;
2
3 import com.atlassian.sal.api.rdbms.ConnectionCallback;
4 import com.atlassian.sal.spring.connection.SpringHostConnectionAccessor.ConnectionProvider;
5 import org.junit.Before;
6 import org.junit.Rule;
7 import org.junit.Test;
8 import org.junit.rules.ExpectedException;
9 import org.junit.runner.RunWith;
10 import org.mockito.Mock;
11 import org.mockito.runners.MockitoJUnitRunner;
12 import org.springframework.transaction.PlatformTransactionManager;
13
14 import java.sql.Connection;
15 import java.sql.SQLException;
16
17 import static org.hamcrest.CoreMatchers.is;
18 import static org.hamcrest.MatcherAssert.assertThat;
19 import static org.mockito.Mockito.doThrow;
20 import static org.mockito.Mockito.verify;
21 import static org.mockito.Mockito.verifyNoMoreInteractions;
22 import static org.mockito.Mockito.when;
23
24 @RunWith (MockitoJUnitRunner.class)
25 public class TestSpringHostConnectionAccessor
26 {
27 @Rule
28 public ExpectedException expectedException = ExpectedException.none();
29
30 private SpringHostConnectionAccessor springHostConnectionAccessor;
31
32 @Mock
33 private ConnectionProvider connectionProvider;
34 @Mock
35 private Connection connection;
36 @Mock
37 private PlatformTransactionManager transactionManager;
38 @Mock
39 private ConnectionCallback<Object> callback;
40 @Mock
41 private Object result;
42
43 @Before
44 public void before()
45 {
46 springHostConnectionAccessor = new SpringHostConnectionAccessor(connectionProvider, transactionManager);
47 }
48
49 @Test
50 public void execute() throws SQLException
51 {
52 when(connectionProvider.getConnection()).thenReturn(connection);
53 when(callback.execute(connection)).thenReturn(result);
54
55 assertThat(springHostConnectionAccessor.execute(true, true, callback), is(result));
56
57 verify(callback).execute(connection);
58 verifyNoMoreInteractions(callback);
59
60 verify(connection).close();
61 verifyNoMoreInteractions(connection);
62 }
63
64 @Test
65 public void executeCloseFail() throws SQLException
66 {
67 when(connectionProvider.getConnection()).thenReturn(connection);
68 when(callback.execute(connection)).thenReturn(result);
69 doThrow(new SQLException()).when(connection).close();
70
71 assertThat(springHostConnectionAccessor.execute(true, true, callback), is(result));
72
73 verify(callback).execute(connection);
74 verifyNoMoreInteractions(callback);
75
76 verify(connection).close();
77 verifyNoMoreInteractions(connection);
78 }
79 }