package org.archive.accesscontrol.model;
import java.util.GregorianCalendar;
import org.archive.accesscontrol.model.Rule;
import junit.framework.TestCase;
public class RuleTest extends TestCase {
Rule rule;
public void testBasicMatching() {
rule = new Rule();
rule.setSurt("(org,archive,)/");
assertTrue("exact surt match", rule.matches("(org,archive,)/"));
assertTrue("prefix surt match", rule.matches("(org,archive,)/foobar/fishing.html?foo=bar"));
assertFalse("surt non-match", rule.matches("(org,example,)/blah"));
assertTrue("capture date always match", rule.matches("(org,archive,)/", new GregorianCalendar(2007, 4, 12).getTime()));
assertTrue("retrieval date always match", rule.matches("(org,archive,)/", null, new GregorianCalendar(2007, 4, 12).getTime()));
assertTrue("capture and retrieval date always match", rule.matches("(org,archive,)/", new GregorianCalendar(2007, 4, 12).getTime(), new GregorianCalendar(2007, 4, 12).getTime()));
assertFalse("capture and retrieval date, surt non-match", rule.matches("(org,example,)/", new GregorianCalendar(2007, 4, 12).getTime(), new GregorianCalendar(2007, 4, 12).getTime()));
}
public void testCaptureDateMatching() {
rule = new Rule();
rule.setSurt("(org,archive,)/");
rule.setCaptureStart(new GregorianCalendar(2007, 1, 12).getTime());
assertTrue("start-bounded capture date match", rule.matches("(org,archive,)/", new GregorianCalendar(2007, 4, 12).getTime()));
assertFalse("start-bounded capture date non-match", rule.matches("(org,archive,)/", new GregorianCalendar(2005, 4, 12).getTime()));
rule.setCaptureStart(null);
rule.setCaptureEnd(new GregorianCalendar(2007, 1, 12).getTime());
assertTrue("end-bounded capture date match", rule.matches("(org,archive,)/", new GregorianCalendar(2005, 4, 12).getTime()));
assertFalse("end-bounded capture date non-match", rule.matches("(org,archive,)/", new GregorianCalendar(2007, 4, 12).getTime()));
rule.setCaptureStart(new GregorianCalendar(2007, 1, 12).getTime());
rule.setCaptureEnd(new GregorianCalendar(2007, 12, 12).getTime());
assertTrue("capture date match", rule.matches("(org,archive,)/", new GregorianCalendar(2007, 4, 12).getTime()));
assertFalse("capture date too early", rule.matches("(org,archive,)/", new GregorianCalendar(2005, 1, 11).getTime()));
assertFalse("capture date too late", rule.matches("(org,archive,)/", new GregorianCalendar(2008, 9, 11).getTime()));
}
public void testRetrievalDateMatching() {
rule = new Rule();
rule.setSurt("(org,archive,)/");
rule.setRetrievalStart(new GregorianCalendar(2007, 1, 12).getTime());
assertTrue("start-bounded retrieval date match", rule.matches("(org,archive,)/", null, new GregorianCalendar(2007, 4, 12).getTime()));
assertFalse("start-bounded retrieval date non-match", rule.matches("(org,archive,)/", null, new GregorianCalendar(2005, 4, 12).getTime()));
rule.setRetrievalStart(null);
rule.setRetrievalEnd(new GregorianCalendar(2007, 1, 12).getTime());
assertTrue("end-bounded retrieval date match", rule.matches("(org,archive,)/", null, new GregorianCalendar(2005, 4, 12).getTime()));
assertFalse("end-bounded retrieval date non-match", rule.matches("(org,archive,)/", null, new GregorianCalendar(2007, 4, 12).getTime()));
rule.setRetrievalStart(new GregorianCalendar(2007, 1, 12).getTime());
rule.setRetrievalEnd(new GregorianCalendar(2007, 12, 12).getTime());
assertTrue("retrieval date match", rule.matches("(org,archive,)/", null, new GregorianCalendar(2007, 4, 12).getTime()));
assertFalse("retrieval date too early", rule.matches("(org,archive,)/", null, new GregorianCalendar(2005, 1, 11).getTime()));
assertFalse("retrieval date too late", rule.matches("(org,archive,)/", null, new GregorianCalendar(2008, 9, 11).getTime()));
}
public void testEmbargoPeriodMatching() {
rule = new Rule();
rule.setSurt("(org,archive,)/");
rule.setSecondsSinceCapture(60 * 60 * 24 * 5); // embargo period of 5 days
assertFalse("under embargo, so non-match", rule.matches("(org,archive,)/", new GregorianCalendar(2007, 4, 10).getTime(), new GregorianCalendar(2007, 4, 12).getTime()));
assertTrue("outside embargo, so match", rule.matches("(org,archive,)/", new GregorianCalendar(2007, 4, 10).getTime(), new GregorianCalendar(2007, 4, 25).getTime()));
}
public void testBlankGroupMatching() {
rule = new Rule();
rule.setSurt("(");
rule.setWho("");
assertTrue(rule.matches("(org,",null, null, "blah"));
}
}