package com.aol.micro.server.mysql.distlock; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import javax.sql.DataSource; import org.junit.Before; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.SmartDataSource; public class DistributedLockServiceMySqlImplTest { DistributedLockServiceMySqlImpl service; DataSource dataSource; JdbcTemplate template; @Before public void setUp() throws Exception { service = new DistributedLockServiceMySqlImpl(); template = mock(JdbcTemplate.class); service.jdbcTemplate = template; } @Test public void setDataSourceNull() { service.setSmartDataSource(null); assertThat(service.jdbcTemplate, is(template)); } @Test public void setDataSource() { service.setSmartDataSource(mock(SmartDataSource.class)); assertThat(service.jdbcTemplate, not(template)); } @Test public void testTryLock() { when(service.jdbcTemplate.queryForObject(DistributedLockServiceMySqlImpl.GET_LOCK_TEMPLATE, new Object[]{"key1"},Integer.class)).thenReturn( 1); service.tryLock("key1"); verify(service.jdbcTemplate).queryForObject( DistributedLockServiceMySqlImpl.GET_LOCK_TEMPLATE, new Object[]{"key1"},Integer.class); } @Test public void testTryReleaseLock() { when(service.jdbcTemplate.queryForObject(DistributedLockServiceMySqlImpl.RELEASE_LOCK_TEMPLATE, new Object[]{"key1"},Integer.class)).thenReturn( 1); service.tryReleaseLock("key1"); verify(service.jdbcTemplate).queryForObject( DistributedLockServiceMySqlImpl.RELEASE_LOCK_TEMPLATE, new Object[]{"key1"},Integer.class); } @Test public void testExecuteScalarExpected() { String query = "my query"; String key = "test"; Integer expectedResult = 0; when(service.jdbcTemplate.queryForObject(query, new Object[]{key},Integer.class)).thenReturn( expectedResult); assertTrue(service.executeScalar(query, key, expectedResult)); } @Test public void testExecuteScalarUnexpected() { String query = "my query"; String key = "test"; Integer expectedResult = 0; when(service.jdbcTemplate.queryForObject(query, new Object[]{key},Integer.class)).thenReturn( expectedResult); assertFalse(service.executeScalar(query, key, expectedResult + 1)); } }