package mireka.filter.builtin; import static org.mockito.Mockito.*; import java.io.IOException; import mireka.ExampleMailData; import mireka.MailData; import mireka.MailDataWithSameContent; import mireka.filter.Filter; import mireka.filter.FilterChain; import mireka.filter.misc.RejectLargeMail; import mireka.smtp.RejectExceptionExt; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.subethamail.smtp.TooMuchDataException; public class RejectLargeMailTest { @Mock private FilterChain chain; private Filter filter; @Before public void setup() { MockitoAnnotations.initMocks(this); RejectLargeMail rejectLargeMail = new RejectLargeMail(); rejectLargeMail.setMaxAllowedSize(3000); filter = rejectLargeMail.createInstance(null); filter.setChain(chain); } @Test public void testSmallMail() throws TooMuchDataException, RejectExceptionExt, IOException { filter.data(ExampleMailData.simple()); verify(chain).data(exampleSimpleMail()); } private MailData exampleSimpleMail() { return Matchers.argThat(new MailDataWithSameContent(ExampleMailData .simple())); } @Test(expected = TooMuchDataException.class) public void testLargeMail() throws TooMuchDataException, RejectExceptionExt, IOException { filter.data(ExampleMailData.mail4k()); ArgumentCaptor<MailData> producedMailDataArgument = ArgumentCaptor.forClass(MailData.class); verify(chain).data(producedMailDataArgument.capture()); MailData producedMailData = producedMailDataArgument.getValue(); byte[] buffer = new byte[5000]; // larger then allowed producedMailData.getInputStream().read(buffer); } }