blob: d5646d641f7762afb64086c67fe461c6257df02c [file] [log] [blame]
/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.aurora.scheduler.cron;
import java.util.List;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public class CrontabEntryTest {
@Test
public void testHashCodeAndEquals() {
List<CrontabEntry> entries = ImmutableList.of(
CrontabEntry.parse("* * * * *"),
CrontabEntry.parse("0-59 * * * *"),
CrontabEntry.parse("0-57,58,59 * * * *"),
CrontabEntry.parse("* 23,1,2,4,0-22 * * *"),
CrontabEntry.parse("1-50,0,51-59 * * * sun-sat"));
for (CrontabEntry lhs : entries) {
for (CrontabEntry rhs : entries) {
assertEquals(lhs, rhs);
}
}
assertEquals(1, ImmutableSet.copyOf(entries).size());
}
@Test
public void testEqualsCoverage() {
assertNotEquals(CrontabEntry.parse("* * * * *"), new Object());
assertNotEquals(CrontabEntry.parse("* * * * *"), CrontabEntry.parse("1 * * * *"));
assertEquals(CrontabEntry.parse("1,2,3 * * * *"), CrontabEntry.parse("1-3 * * * *"));
assertNotEquals(CrontabEntry.parse("* 0-22 * * *"), CrontabEntry.parse("* * * * *"));
assertEquals(CrontabEntry.parse("* 0-23 * * *"), CrontabEntry.parse("* * * * *"));
assertNotEquals(CrontabEntry.parse("1 1 1-30 * *"), CrontabEntry.parse("1 1 * * *"));
assertEquals(CrontabEntry.parse("1 1 1-31 * *"), CrontabEntry.parse("1 1 * * *"));
assertNotEquals(CrontabEntry.parse("1 1 * JAN,FEB-NOV *"), CrontabEntry.parse("1 1 * * *"));
assertEquals(CrontabEntry.parse("1 1 * JAN,FEB-DEC *"), CrontabEntry.parse("1 1 * * *"));
assertNotEquals(CrontabEntry.parse("* * * * SUN"), CrontabEntry.parse("* * * * SAT"));
assertEquals(CrontabEntry.parse("* * * * 0"), CrontabEntry.parse("* * * * SUN"));
}
@Test
public void testSkip() {
assertEquals(CrontabEntry.parse("*/15 * * * *"), CrontabEntry.parse("0,15,30,45 * * * *"));
assertEquals(
CrontabEntry.parse("* */2 * * *"),
CrontabEntry.parse("0-59 0,2,4,6,8,10,12-23/2 * * *"));
}
@Test
public void testToString() {
assertEquals("0-58 * * * *", CrontabEntry.parse("0,1-57,58 * * * *").toString());
assertEquals("* * * * *", CrontabEntry.parse("* * * * *").toString());
}
@Test
public void testWildcards() {
CrontabEntry wildcardMinuteEntry = CrontabEntry.parse("* 1 1 1 *");
assertEquals("*", wildcardMinuteEntry.getMinuteAsString());
assertTrue(wildcardMinuteEntry.hasWildcardMinute());
assertFalse(wildcardMinuteEntry.hasWildcardHour());
assertFalse(wildcardMinuteEntry.hasWildcardDayOfMonth());
assertFalse(wildcardMinuteEntry.hasWildcardMonth());
assertTrue(wildcardMinuteEntry.hasWildcardDayOfWeek());
CrontabEntry wildcardHourEntry = CrontabEntry.parse("1 * 1 1 *");
assertEquals("*", wildcardHourEntry.getHourAsString());
assertFalse(wildcardHourEntry.hasWildcardMinute());
assertTrue(wildcardHourEntry.hasWildcardHour());
assertFalse(wildcardHourEntry.hasWildcardDayOfMonth());
assertFalse(wildcardHourEntry.hasWildcardMonth());
assertTrue(wildcardHourEntry.hasWildcardDayOfWeek());
CrontabEntry wildcardDayOfMonth = CrontabEntry.parse("1 1 * 1 *");
assertEquals("*", wildcardDayOfMonth.getDayOfMonthAsString());
assertFalse(wildcardDayOfMonth.hasWildcardMinute());
assertFalse(wildcardDayOfMonth.hasWildcardHour());
assertTrue(wildcardDayOfMonth.hasWildcardDayOfMonth());
assertFalse(wildcardDayOfMonth.hasWildcardMonth());
assertTrue(wildcardDayOfMonth.hasWildcardDayOfWeek());
CrontabEntry wildcardMonth = CrontabEntry.parse("1 1 1 * *");
assertEquals("*", wildcardMonth.getMonthAsString());
assertFalse(wildcardMonth.hasWildcardMinute());
assertFalse(wildcardMonth.hasWildcardHour());
assertFalse(wildcardMonth.hasWildcardDayOfMonth());
assertTrue(wildcardMonth.hasWildcardMonth());
assertTrue(wildcardMonth.hasWildcardDayOfWeek());
CrontabEntry wildcardDayOfWeek = CrontabEntry.parse("1 1 1 1 *");
assertEquals("*", wildcardDayOfWeek.getDayOfWeekAsString());
assertFalse(wildcardDayOfWeek.hasWildcardMinute());
assertFalse(wildcardDayOfWeek.hasWildcardHour());
assertFalse(wildcardDayOfWeek.hasWildcardDayOfMonth());
assertFalse(wildcardDayOfWeek.hasWildcardMonth());
assertTrue(wildcardDayOfWeek.hasWildcardDayOfWeek());
}
@Test
public void testEqualsIsCanonical() {
String rawEntry = "* * */3 * *";
CrontabEntry input = CrontabEntry.parse(rawEntry);
assertNotEquals(
rawEntry + " is not the canonical form of " + input,
rawEntry,
input.toString());
assertEquals(
"The form returned by toString is canonical",
input.toString(),
CrontabEntry.parse(input.toString()).toString());
}
@Test
public void testBadEntries() {
List<String> badPatterns = ImmutableList.of(
"* * * * MON-SUN",
"* * **",
"0-59 0-59 * * *",
"1/1 * * * *",
"5 5 * MAR-JAN *",
"*/0 * * * *",
"0-59/0 * * * *",
"0-59/60 * * * *",
"* * 1 * 1"
);
for (String pattern : badPatterns) {
assertNull(CrontabEntry.tryParse(pattern).orElse(null));
}
}
@Test
public void testExpectedTriggerPredictionsParse() {
for (ExpectedPrediction prediction : ExpectedPrediction.getAll()) {
prediction.parseCrontabEntry();
}
}
}