package uws.job.parameters; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Calendar; import java.util.Date; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import uws.ISO8601Format; import uws.job.parameters.DestructionTimeController.DateField; public class TestDestructionTimeController { @BeforeClass public static void setUpBeforeClass() throws Exception{} @AfterClass public static void tearDownAfterClass() throws Exception{} @Before public void setUp() throws Exception{} @After public void tearDown() throws Exception{} @Test public void testCheck(){ DestructionTimeController controller = new DestructionTimeController(); Calendar calendar = Calendar.getInstance(); try{ // A NULL destruction time will always return NULL: assertNull(controller.check(null)); // By default, the controller has no limit on the destruction time, so let's try with a destruction in 100 years: calendar.add(Calendar.YEAR, 100); checkDate(calendar.getTime(), controller.check(calendar.getTime())); checkDate(calendar.getTime(), controller.check(ISO8601Format.format(calendar.getTimeInMillis()))); // With just a default destruction time (of 10 minutes): controller.setDefaultDestructionInterval(10); Calendar defaultTime = Calendar.getInstance(); defaultTime.add(Calendar.MINUTE, 10); checkDate(defaultTime.getTime(), controller.check(null)); checkDate(calendar.getTime(), controller.check(calendar.getTime())); // With just a maximum destruction time (of 1 hour): controller.setDefaultDestructionInterval(0); controller.setMaxDestructionInterval(1, DateField.HOUR); Calendar maxTime = Calendar.getInstance(); maxTime.add(Calendar.HOUR, 1); checkDate(maxTime.getTime(), controller.check(null)); checkDate(defaultTime.getTime(), controller.check(defaultTime.getTime())); checkDate(maxTime.getTime(), controller.check(calendar.getTime())); // With a default (10 minutes) AND a maximum (1 hour) destruction time: controller.setDefaultDestructionInterval(10); controller.setMaxDestructionInterval(1, DateField.HOUR); checkDate(defaultTime.getTime(), controller.check(null)); checkDate(maxTime.getTime(), controller.check(calendar.getTime())); calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, 30); checkDate(calendar.getTime(), controller.check(calendar.getTime())); }catch(Exception t){ t.printStackTrace(); fail(); } } @Test public void testGetDefault(){ DestructionTimeController controller = new DestructionTimeController(); // By default, when nothing is set, the default destruction time is NULL (the job will never be destroyed): assertNull(controller.getDefault()); // With no interval, the default destruction time should remain NULL (the job will never be destroyed): controller.setDefaultDestructionInterval(DestructionTimeController.NO_INTERVAL); assertNull(controller.getDefault()); // With a negative interval, the destruction time should also be NULL: controller.setDefaultDestructionInterval(-1); assertNull(controller.getDefault()); // With a destruction interval of 100 minutes: Calendar calendar = Calendar.getInstance(); controller.setDefaultDestructionInterval(100); calendar.add(Calendar.MINUTE, 100); checkDate(calendar.getTime(), controller.getDefault()); // With a destruction interval of 100 seconds: controller.setDefaultDestructionInterval(100, DateField.SECOND); calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND, 100); checkDate(calendar.getTime(), controller.getDefault()); // With a destruction interval of 1 week: controller.setDefaultDestructionInterval(7, DateField.DAY); calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, 7); checkDate(calendar.getTime(), controller.getDefault()); } @Test public void testGetMaxDestructionTime(){ DestructionTimeController controller = new DestructionTimeController(); // By default, when nothing is set, the maximum destruction time is NULL (the job will never be destroyed): assertNull(controller.getMaxDestructionTime()); // With no interval, the maximum destruction time should remain NULL (the job will never be destroyed): controller.setMaxDestructionInterval(DestructionTimeController.NO_INTERVAL); assertNull(controller.getMaxDestructionTime()); // With a negative interval, the destruction time should also be NULL: controller.setMaxDestructionInterval(-1); assertNull(controller.getMaxDestructionTime()); // With a destruction interval of 100 minutes: Calendar calendar = Calendar.getInstance(); controller.setMaxDestructionInterval(100); calendar.add(Calendar.MINUTE, 100); checkDate(calendar.getTime(), controller.getMaxDestructionTime()); // With a destruction interval of 100 seconds: controller.setMaxDestructionInterval(100, DateField.SECOND); calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND, 100); checkDate(calendar.getTime(), controller.getMaxDestructionTime()); // With a destruction interval of 1 week: controller.setMaxDestructionInterval(7, DateField.DAY); calendar = Calendar.getInstance(); calendar.add(Calendar.DAY_OF_MONTH, 7); checkDate(calendar.getTime(), controller.getMaxDestructionTime()); } @Test public void testAllowModification(){ DestructionTimeController controller = new DestructionTimeController(); // By default, user modification of the destruction time is allowed: assertTrue(controller.allowModification()); controller.allowModification(true); assertTrue(controller.allowModification()); controller.allowModification(false); assertFalse(controller.allowModification()); } private void checkDate(final Date expected, final Object val){ assertTrue(val instanceof Date); if (expected != null && val != null){ Calendar cexpected = Calendar.getInstance(), cval = Calendar.getInstance(); cexpected.setTime(expected); cval.setTime((Date)val); try{ assertEquals(cexpected.get(Calendar.DAY_OF_MONTH), cval.get(Calendar.DAY_OF_MONTH)); assertEquals(cexpected.get(Calendar.MONTH), cval.get(Calendar.MONTH)); assertEquals(cexpected.get(Calendar.YEAR), cval.get(Calendar.YEAR)); assertEquals(cexpected.get(Calendar.HOUR), cval.get(Calendar.HOUR)); assertEquals(cexpected.get(Calendar.MINUTE), cval.get(Calendar.MINUTE)); assertEquals(cexpected.get(Calendar.SECOND), cval.get(Calendar.SECOND)); }catch(AssertionError e){ fail("Expected <" + expected + "> but was <" + val + ">"); } }else if (expected == null && val == null) return; else fail("Expected <" + expected + "> but was <" + val + ">"); } }