package org.archive.wayback.accesscontrol.oracleclient; import java.util.Date; import junit.framework.TestCase; import org.archive.accesscontrol.AccessControlClient; import org.archive.accesscontrol.RobotsUnavailableException; import org.archive.accesscontrol.RuleOracleUnavailableException; import org.archive.wayback.core.CaptureSearchResult; import org.archive.wayback.core.FastCaptureSearchResult; import org.archive.wayback.resourceindex.filterfactory.ExclusionCaptureFilterGroup; /** * Test of {@link CustomPolicyOracleFilter}. * <p> * Has provision of testing error notification through * {@link ExclusionCaptureFilterGroup}, but test is not implemented, as it looks * like unused in current deployment. * </p> */ public class CustomPolicyOracleFilterTest extends TestCase { CustomPolicyOracleFilter cut; ExclusionCaptureFilterGroup filterGroup = null; TestAccessControlClient acClient; class TestAccessControlClient extends AccessControlClient { String policyToReturn = "allow"; public TestAccessControlClient() { super(""); } @Override public String getPolicy(String url, Date captureDate, Date retrievalDate, String who) throws RobotsUnavailableException, RuleOracleUnavailableException { return policyToReturn; } } /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { cut = new CustomPolicyOracleFilter("", "group", null); cut.client = (acClient = new TestAccessControlClient()); } public void testAllow() { // object properties are not really used except for originalUrl. CaptureSearchResult capture = new FastCaptureSearchResult(); capture.setOriginalUrl("http://www.example.com/"); int rv = cut.filterObject(capture); assertEquals(CustomPolicyOracleFilter.FILTER_INCLUDE, rv); } public void testBlock() { acClient.policyToReturn = "block"; // object properties are not really used except for originalUrl. CaptureSearchResult capture = new FastCaptureSearchResult(); capture.setOriginalUrl("http://www.example.com/"); int rv = cut.filterObject(capture); // Now "block" returns FILTER_INCLUDE, "X" flag in robotflags. assertEquals(CustomPolicyOracleFilter.FILTER_INCLUDE, rv); assertEquals( Character.toString(CaptureSearchResult.CAPTURE_ROBOT_BLOCKED), capture.getRobotFlags()); } public void testBlockMessage() { acClient.policyToReturn = "block-message"; // object properties are not really used except for originalUrl. CaptureSearchResult capture = new FastCaptureSearchResult(); capture.setOriginalUrl("http://www.example.com/"); int rv = cut.filterObject(capture); // Now "block" returns FILTER_INCLUDE, "X" flag in robotflags. assertEquals(CustomPolicyOracleFilter.FILTER_EXCLUDE, rv); } public void testRobots() { // AccessControlClient translates "robots" policy into either // "allow" or "block" when robotLookupsEnable is true - which // are tested above. "robots" policy is considered as "allow". acClient.policyToReturn = "robots"; // object properties are not really used except for originalUrl. CaptureSearchResult capture = new FastCaptureSearchResult(); capture.setOriginalUrl("http://www.example.com/"); int rv = cut.filterObject(capture); assertEquals(CustomPolicyOracleFilter.FILTER_INCLUDE, rv); } }