package org.limewire.core.impl.spam; import java.util.ArrayList; import java.util.List; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.jmock.Expectations; import org.jmock.Mockery; import org.jmock.lib.legacy.ClassImposteriser; import org.limewire.core.api.search.SearchResult; import org.limewire.core.impl.search.RemoteFileDescAdapter; import org.limewire.util.BaseTestCase; import com.limegroup.gnutella.RemoteFileDesc; import com.limegroup.gnutella.SpamServices; import com.limegroup.gnutella.spam.SpamManager; public class SpamManagerImplTest extends BaseTestCase { public SpamManagerImplTest(String name) { super(name); } public void testMarkAsSpam() { Mockery context = new Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; final RemoteFileDescAdapter remoteFileDescAdapter1 = context .mock(RemoteFileDescAdapter.class); final RemoteFileDescAdapter remoteFileDescAdapter2 = context .mock(RemoteFileDescAdapter.class); final RemoteFileDesc remoteFileDesc1 = context.mock(RemoteFileDesc.class); final RemoteFileDesc remoteFileDesc2 = context.mock(RemoteFileDesc.class); final SpamManager spamManager = context.mock(SpamManager.class); final SpamServices spamServices = context.mock(SpamServices.class); final List<SearchResult> searchResults = new ArrayList<SearchResult>(); searchResults.add(remoteFileDescAdapter1); searchResults.add(remoteFileDescAdapter2); final List<RemoteFileDesc> remoteFileDescs = new ArrayList<RemoteFileDesc>(); remoteFileDescs.add(remoteFileDesc1); remoteFileDescs.add(remoteFileDesc2); context.checking(new Expectations() { { one(spamManager).handleUserMarkedSpam( with(new RemoteFileDescMatcher(remoteFileDescs))); allowing(remoteFileDescAdapter1).getRfd(); will(returnValue(remoteFileDesc1)); allowing(remoteFileDescAdapter2).getRfd(); will(returnValue(remoteFileDesc2)); } }); SpamManagerImpl spamManagerImpl = new SpamManagerImpl(spamManager, spamServices); spamManagerImpl.handleUserMarkedSpam(searchResults); context.assertIsSatisfied(); } public void testMarkAsGood() { Mockery context = new Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; final RemoteFileDescAdapter remoteFileDescAdapter1 = context .mock(RemoteFileDescAdapter.class); final RemoteFileDescAdapter remoteFileDescAdapter2 = context .mock(RemoteFileDescAdapter.class); final RemoteFileDesc remoteFileDesc1 = context.mock(RemoteFileDesc.class); final RemoteFileDesc remoteFileDesc2 = context.mock(RemoteFileDesc.class); final SpamManager spamManager = context.mock(SpamManager.class); final SpamServices spamServices = context.mock(SpamServices.class); final List<SearchResult> searchResults = new ArrayList<SearchResult>(); searchResults.add(remoteFileDescAdapter1); searchResults.add(remoteFileDescAdapter2); final List<RemoteFileDesc> remoteFileDescs = new ArrayList<RemoteFileDesc>(); remoteFileDescs.add(remoteFileDesc1); remoteFileDescs.add(remoteFileDesc2); context.checking(new Expectations() { { one(spamManager).handleUserMarkedGood( with(new RemoteFileDescMatcher(remoteFileDescs))); allowing(remoteFileDescAdapter1).getRfd(); will(returnValue(remoteFileDesc1)); allowing(remoteFileDescAdapter2).getRfd(); will(returnValue(remoteFileDesc2)); } }); SpamManagerImpl spamManagerImpl = new SpamManagerImpl(spamManager, spamServices); spamManagerImpl.handleUserMarkedGood(searchResults); context.assertIsSatisfied(); } public void testClearFilterData() { Mockery context = new Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; final SpamManager spamManager = context.mock(SpamManager.class); final SpamServices spamServices = context.mock(SpamServices.class); context.checking(new Expectations() { { one(spamManager).clearFilterData(); } }); SpamManagerImpl spamManagerImpl = new SpamManagerImpl(spamManager, spamServices); spamManagerImpl.clearFilterData(); context.assertIsSatisfied(); } public void testReloadIPFilter() { Mockery context = new Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; final SpamManager spamManager = context.mock(SpamManager.class); final SpamServices spamServices = context.mock(SpamServices.class); context.checking(new Expectations() { { one(spamServices).reloadIPFilter(); } }); SpamManagerImpl spamManagerImpl = new SpamManagerImpl(spamManager, spamServices); spamManagerImpl.reloadIPFilter(); context.assertIsSatisfied(); } public void testAdjustSpamFilters() { Mockery context = new Mockery() { { setImposteriser(ClassImposteriser.INSTANCE); } }; final SpamManager spamManager = context.mock(SpamManager.class); final SpamServices spamServices = context.mock(SpamServices.class); context.checking(new Expectations() { { one(spamServices).adjustSpamFilters(); } }); SpamManagerImpl spamManagerImpl = new SpamManagerImpl(spamManager, spamServices); spamManagerImpl.adjustSpamFilters(); context.assertIsSatisfied(); } /** * Makes sure that the method called with the RemoteFileDesc array is * equivalent to the expectedRemoteFileDesc Array. */ private final class RemoteFileDescMatcher extends BaseMatcher<RemoteFileDesc[]> { private final List<RemoteFileDesc> expectedRemoteFileDescs; private RemoteFileDescMatcher(List<RemoteFileDesc> remoteFileDescs) { this.expectedRemoteFileDescs = remoteFileDescs; } @Override public void describeTo(Description description) { } @Override public boolean matches(Object item) { if (!(item instanceof RemoteFileDesc[])) { return false; } RemoteFileDesc[] remoteFileDescArray = (RemoteFileDesc[]) item; if (remoteFileDescArray.length != expectedRemoteFileDescs.size()) { return false; } for (RemoteFileDesc remoteFileDesc : remoteFileDescArray) { if (!expectedRemoteFileDescs.contains(remoteFileDesc)) { return false; } } return true; } } }