package hudson.plugins.jobConfigHistory;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
/**
*
* @author Mirko Friedenhagen
*/
public class JobConfigHistoryPurgerTest {
final JobConfigHistory mockedPlugin = mock(JobConfigHistory.class);
final Purgeable mockedDao = mock(Purgeable.class);
final OverviewHistoryDao mockedOverviewDao = mock(OverviewHistoryDao.class);
@Rule
public TemporaryFolder tempFolder = new TemporaryFolder(new File("target"));
/**
* Test of getRecurrencePeriod method, of class JobConfigHistoryPurger.
*/
@Test
public void testGetRecurrencePeriod() {
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
long expResult = 24 * 60 * 60 * 1000;
long result = sut.getRecurrencePeriod();
assertEquals(expResult, result);
}
/**
* Test of doRun method, of class JobConfigHistoryPurger.
*/
@Test
public void testDoRun() throws Exception {
when(mockedPlugin.getMaxDaysToKeepEntries()).thenReturn("1");
JobConfigHistoryPurgerWithoutPurging sut = new JobConfigHistoryPurgerWithoutPurging(
mockedPlugin, mockedDao, mockedOverviewDao);
sut.doRun();
assertTrue(sut.purgeCalled);
}
/**
* Test of doRun method, of class JobConfigHistoryPurger.
*/
@Test
public void testDoRunNegative() throws Exception {
when(mockedPlugin.getMaxDaysToKeepEntries()).thenReturn("-1");
JobConfigHistoryPurgerWithoutPurging sut = new JobConfigHistoryPurgerWithoutPurging(
mockedPlugin, mockedDao, mockedOverviewDao);
sut.doRun();
assertFalse(sut.purgeCalled);
}
/**
* Test of doRun method, of class JobConfigHistoryPurger.
*/
@Test
public void testDoRunNoNumber() throws Exception {
when(mockedPlugin.getMaxDaysToKeepEntries()).thenReturn("A");
JobConfigHistoryPurgerWithoutPurging sut = new JobConfigHistoryPurgerWithoutPurging(
mockedPlugin, mockedDao, mockedOverviewDao);
sut.doRun();
assertFalse(sut.purgeCalled);
}
/**
* Test of doRun method, of class JobConfigHistoryPurger.
*/
@Test
public void testDoRunEmpty() throws Exception {
when(mockedPlugin.getMaxDaysToKeepEntries()).thenReturn("");
JobConfigHistoryPurgerWithoutPurging sut = new JobConfigHistoryPurgerWithoutPurging(
mockedPlugin, mockedDao, mockedOverviewDao);
sut.doRun();
assertFalse(sut.purgeCalled);
}
/**
* Test of purgeSystemOrJobHistory method, of class JobConfigHistoryPurger.
*/
@Test
public void testPurgeSystemOrJobHistory() throws IOException {
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.setMaxAge(1);
final File oldItemDir = tempFolder
.newFolder(getFormattedDate(twoDaysAgo()));
new File(oldItemDir, JobConfigHistoryConsts.HISTORY_FILE)
.createNewFile();
final File newItemDir = tempFolder.newFolder(getFormattedDate(now()));
new File(newItemDir, JobConfigHistoryConsts.HISTORY_FILE)
.createNewFile();
File[] itemDirs = {tempFolder.getRoot()};
sut.purgeSystemOrJobHistory(itemDirs);
assertFalse(oldItemDir.exists());
assertTrue(newItemDir.exists());
}
/**
* Test of purgeSystemOrJobHistory method, of class JobConfigHistoryPurger.
*/
@Test
public void testPurgeSystemOrJobHistoryNoItems() throws IOException {
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.setMaxAge(1);
File[] itemDirs = {};
sut.purgeSystemOrJobHistory(itemDirs);
sut.purgeSystemOrJobHistory(null);
}
/**
* Test of purgeSystemOrJobHistory method, of class JobConfigHistoryPurger.
*/
@Test
public void testPurgeSystemOrJobHistoryItemIsAFile() throws IOException {
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.setMaxAge(1);
final File newFile = tempFolder.newFile(getFormattedDate(now()));
File[] itemDirs = {newFile};
sut.purgeSystemOrJobHistory(itemDirs);
assertTrue(newFile.exists());
}
/**
* Test of purgeSystemOrJobHistory method, of class JobConfigHistoryPurger.
*/
@Test
public void testPurgeSystemOrJobHistoryItemHasNoHistory()
throws IOException {
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.setMaxAge(1);
final File newFolder = tempFolder
.newFolder(getFormattedDate(twoDaysAgo()));
File[] itemDirs = {newFolder};
sut.purgeSystemOrJobHistory(itemDirs);
assertTrue(newFolder.exists());
}
/**
* Test of isTooOld method, of class JobConfigHistoryPurger.
*/
@Test
public void testIsNotTooOld() {
assertFalse(testIsOlderThanOneDay(now()));
}
/**
* Test of isTooOld method, of class JobConfigHistoryPurger.
*/
@Test
public void testIsTooOld() {
assertTrue(testIsOlderThanOneDay(twoDaysAgo()));
}
/**
* Test of isTooOld method, of class JobConfigHistoryPurger.
*/
@Test
public void testIsTooOldInvalidFormat() {
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.setMaxAge(1);
assertFalse(sut.isTooOld(new File("invalid format")));
}
/**
* Test of deleteDirectory method, of class JobConfigHistoryPurger.
*/
@Test
public void testDeleteDirectoryWithWarnings() {
File dirMock = mock(File.class);
when(dirMock.listFiles())
.thenReturn(new File[]{new File("ABC"), new File("DEF")});
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.deleteDirectory(dirMock);
}
/**
* Test of deleteDirectory method, of class JobConfigHistoryPurger.
*/
@Test
public void testDeleteDirectory() throws IOException {
final File newFile = tempFolder.newFile();
assertTrue(newFile.exists());
File dir = tempFolder.getRoot();
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.deleteDirectory(dir);
assertFalse(newFile.exists());
assertFalse(dir.exists());
}
private boolean testIsOlderThanOneDay(final Date date) {
JobConfigHistoryPurger sut = new JobConfigHistoryPurger(mockedPlugin,
mockedDao, mockedOverviewDao);
sut.setMaxAge(1);
File historyDir = new File(getFormattedDate(date));
return sut.isTooOld(historyDir);
}
private Date twoDaysAgo() {
return new Date(System.currentTimeMillis()
- TimeUnit.MILLISECONDS.convert(2, TimeUnit.DAYS));
}
private String getFormattedDate(Date date) {
final SimpleDateFormat dateParser = new SimpleDateFormat(
JobConfigHistoryConsts.ID_FORMATTER);
return dateParser.format(date);
}
private Date now() {
return new Date();
}
private static class JobConfigHistoryPurgerWithoutPurging
extends
JobConfigHistoryPurger {
boolean purgeCalled = false;
public JobConfigHistoryPurgerWithoutPurging(JobConfigHistory plugin,
Purgeable purgeable, OverviewHistoryDao overviewHistoryDao) {
super(plugin, purgeable, overviewHistoryDao);
}
@Override
void purgeHistoryByAge() {
purgeCalled = true;
}
}
}