/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.statistics.util;
import mockit.Mock;
import mockit.MockUp;
import org.dspace.statistics.SolrLogger;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* @author mwood
*/
public class SpiderDetectorTest
{
private static final String NOT_A_BOT_ADDRESS = "192.168.0.1";
/**
* Test method for {@link org.dspace.statistics.util.SpiderDetector#readPatterns(java.io.File)}.
*/
@Test
public void testReadPatterns()
{
// FIXME fail("Not yet implemented");
}
/**
* Test method for {@link org.dspace.statistics.util.SpiderDetector#getSpiderIpAddresses()}.
*/
@Test
public void testGetSpiderIpAddresses()
{
// FIXME fail("Not yet implemented");
}
/**
* Test method for {@link org.dspace.statistics.util.SpiderDetector#isSpider(javax.servlet.http.HttpServletRequest)}.
*/
@Test
public void testIsSpiderHttpServletRequest()
{
DummyHttpServletRequest req = new DummyHttpServletRequest();
req.setAddress(NOT_A_BOT_ADDRESS); // avoid surprises
req.setRemoteHost("notabot.example.com"); // avoid surprises
req.setAgent("Firefox"); // avoid surprises
String candidate;
// Test agent patterns
req.setAgent("msnbot is watching you");
assertTrue("'msnbot' did not match any pattern", SpiderDetector.isSpider(req));
req.setAgent("Firefox");
assertFalse("'Firefox' matched a pattern", SpiderDetector.isSpider(req));
// Test IP patterns
candidate = "192.168.2.1";
req.setAddress(candidate);
assertTrue(candidate + " did not match IP patterns", SpiderDetector.isSpider(req));
req.setAddress(NOT_A_BOT_ADDRESS);
assertFalse(NOT_A_BOT_ADDRESS + " matched IP patterns", SpiderDetector.isSpider(req));
// Test DNS patterns
candidate = "baiduspider-dspace-test.crawl.baidu.com";
req.setRemoteHost(candidate);
assertTrue(candidate + " did not match DNS patterns", SpiderDetector.isSpider(req));
candidate = "wiki.dspace.org";
req.setRemoteHost(candidate);
assertFalse(candidate + " matched DNS patterns", SpiderDetector.isSpider(req));
req = null;
}
/**
* Test method for {@link org.dspace.statistics.util.SpiderDetector#isSpider(java.lang.String, java.lang.String, java.lang.String, java.lang.String)}.
*/
@Test
public void testIsSpiderStringStringStringString()
{
String candidate;
// Test IP patterns
candidate = "192.168.2.1";
assertTrue(candidate + " did not match IP patterns",
SpiderDetector.isSpider(candidate, null, null, null));
candidate = NOT_A_BOT_ADDRESS;
assertFalse(candidate + " matched IP patterns",
SpiderDetector.isSpider(candidate, null, null, null));
// Test DNS patterns
candidate = "baiduspider-dspace-test.crawl.baidu.com";
assertTrue(candidate + " did not match DNS patterns",
SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, candidate, null));
candidate = "wiki.dspace.org";
assertFalse(candidate + " matched DNS patterns",
SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, candidate, null));
// Test agent patterns
candidate = "msnbot is watching you";
assertTrue("'" + candidate + "' did not match agent patterns",
SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, null, candidate));
candidate = "Firefox";
assertFalse("'" + candidate + "' matched agent patterns",
SpiderDetector.isSpider(NOT_A_BOT_ADDRESS, null, null, candidate));
}
/**
* Test method for {@link org.dspace.statistics.util.SpiderDetector#isSpider(java.lang.String)}.
*/
@Test
public void testIsSpiderString()
{
String candidate;
candidate = "192.168.2.1";
assertTrue(candidate + " did not match IP patterns",
SpiderDetector.isSpider(candidate, null, null, null));
candidate = NOT_A_BOT_ADDRESS;
assertFalse(candidate + " matched IP patterns",
SpiderDetector.isSpider(candidate, null, null, null));
}
/**
* Dummy SolrLogger for testing.
* @author mwood
*/
static public class MockSolrLogger
extends MockUp<SolrLogger>
{
@Mock
public void $init() {}
@Mock
public void $clinit() {}
@Mock
public boolean isUseProxies()
{
return false;
}
}
}