Merge pull request #328 from morokosi/fix-matchesregexdeciderule

Fix match result is always false in MatchesListRegexDecideRule
This commit is contained in:
Alex Osborne
2020-05-01 12:56:44 +09:00
committed by GitHub
2 changed files with 18 additions and 3 deletions
@@ -20,7 +20,6 @@ package org.archive.modules.deciderules;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.FutureTask;
@@ -118,7 +117,7 @@ public class MatchesListRegexDecideRule extends PredicatedDecideRule {
FutureTask<Boolean> matchesFuture = new FutureTask<>(() -> p.matcher(interruptible).matches());
ForkJoinPool.commonPool().submit(matchesFuture);
try {
matchesFuture.get(getTimeoutPerRegexSeconds(), TimeUnit.SECONDS);
matches = matchesFuture.get(getTimeoutPerRegexSeconds(), TimeUnit.SECONDS);
} catch (TimeoutException e) {
matchesFuture.cancel(true);
logger.warning("Timed out after " + getTimeoutPerRegexSeconds() + " seconds waiting for '" + p + "' to match.");
@@ -1,6 +1,5 @@
package org.archive.modules.deciderules;
import com.google.common.annotations.VisibleForTesting;
import junit.framework.TestCase;
import org.apache.commons.httpclient.URIException;
import org.archive.modules.CrawlURI;
@@ -32,4 +31,21 @@ public class MatchesListRegexDecideRuleTest extends TestCase {
final DecideResult decideResult = rule.decisionFor(curi);
assertEquals("Expected NONE not " + decideResult , DecideResult.NONE, decideResult);
}
public void testEvaluateInTime() throws URIException {
final String regex = "http://www\\.netarkivet\\.dk/x+";
String seed = "http://www.netarkivet.dk/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
MatchesListRegexDecideRule rule = new MatchesListRegexDecideRule();
List<Pattern> patternList = new ArrayList<>();
patternList.add(Pattern.compile(regex));
rule.setRegexList(patternList);
rule.setEnabled(true);
rule.setListLogicalOr(true);
rule.setDecision(DecideResult.REJECT);
rule.setTimeoutPerRegexSeconds(2);
final CrawlURI curi = new CrawlURI(UURIFactory.getInstance(seed));
final DecideResult decideResult = rule.decisionFor(curi);
assertEquals("Expected REJECT not " + decideResult , DecideResult.REJECT, decideResult);
}
}