package com.limegroup.gnutella.filters;
import junit.framework.Test;
import org.limewire.util.BaseTestCase;
import com.limegroup.gnutella.messages.PingRequest;
import com.limegroup.gnutella.messages.QueryRequest;
import org.jmock.Expectations;
import org.jmock.Mockery;
/**
* Unit tests for GreedyQueryFilter
*/
public class GreedyQueryFilterTest extends BaseTestCase {
private Mockery context;
private SpamFilter filter;
public GreedyQueryFilterTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(GreedyQueryFilterTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
@Override
public void setUp()
{ context = new Mockery();
filter = new GreedyQueryFilter();
}
/**
* Should only return true on allow if not a QueryRequest
*/
public void testPingRequest() throws Exception {
final PingRequest req = context.mock(PingRequest.class);
context.checking(new Expectations() {
{
never(req);
}
});
assertTrue(filter.allow(req));
context.assertIsSatisfied();
}
public void testQueryVariousDeny() throws Exception {
QueryRequest req;
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "a",(byte)5);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*", (byte)5);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "a.asf", (byte)5);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "z.mpg", (byte)5);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
}
public void testQueryVariousAllow() throws Exception {
QueryRequest req;
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "z.mp", (byte)5);
assertTrue(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "z mpg", (byte)5);
assertTrue(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "1.mpg", (byte)5);
mockQueryRequestDefHops(req);
mockQueryRequestSetTTL(req);
assertTrue(filter.allow(req));
context.assertIsSatisfied();
}
public void testNetworkVariousAllow() throws Exception {
QueryRequest req;
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "--**.*-", (byte)3, (byte)2);
mockQueryRequestSetTTL(req);
assertTrue(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "britney*.*", (byte)2, (byte)3);
assertTrue(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "new order*", (byte)1, (byte)6);
assertTrue(filter.allow(req));
context.assertIsSatisfied();
}
public void testNetworkVariousDeny() throws Exception {
QueryRequest req;
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*.mpg", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*.mp3", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*.*", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*.MP3", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*.mp3", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "mpg", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "MP3", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "MPG", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "a.b", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*.*-", (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*****" , (byte)1, (byte)4);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
req = context.mock(QueryRequest.class);
mockQueryRequest(req, "*.*.", (byte)2, (byte)3);
assertFalse(filter.allow(req));
context.assertIsSatisfied();
}
private void mockQueryRequest(final QueryRequest req, final String query, final byte ttl) {
context.checking(new Expectations() {
{
atLeast(1).of(req).getQuery();
will(returnValue(query));
allowing(req).getTTL();
will(returnValue(ttl));
allowing(req).hasQueryUrns();
will(returnValue(false));
}
});
}
private void mockQueryRequest(final QueryRequest req, final String query, final byte ttl, final byte hops) {
mockQueryRequest(req, query, ttl);
context.checking(new Expectations() {
{
allowing(req).getHops();
will(returnValue(hops));
}
});
}
public void mockQueryRequestSetTTL(final QueryRequest req) {
context.checking(new Expectations() {
{
allowing(req).setTTL(with(any(byte.class)));
}
});
}
public void mockQueryRequestDefHops(final QueryRequest msg) {
context.checking(new Expectations() {
{
allowing(msg).getHops();
will(returnValue((byte) 0));
}
});
}
}