@Test public void doRcptShouldDeclineValidUsersWhenRelay() throws Exception { SMTPSession session = setupMockedSMTPSession(RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, validUserEmail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void doRcptShouldDeclineNonLocalUsersWhenNoRelay() throws Exception { MailAddress mailAddress = new MailAddress(INVALID_USER + "@otherdomain"); SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, mailAddress).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void doRcptShouldDeclineNonLocalUsersWhenRelay() throws Exception { MailAddress mailAddress = new MailAddress(INVALID_USER + "@otherdomain"); SMTPSession session = setupMockedSMTPSession(RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, mailAddress).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void testNullSenderNotReject() { ValidSenderDomainHandler handler = createHandler(); HookReturnCode response = handler.doMail(setupMockedSession(null),null).getResult(); assertThat(HookReturnCode.declined()).describedAs("Not blocked cause its a nullsender").isEqualTo(response); }
@Test public void doRcptShouldDeclineWhenHasErrorMapping() throws Exception { memoryRecipientRewriteTable.addErrorMapping(MappingSource.fromUser(USER1, Domain.LOCALHOST), "554 BOUNCE"); SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, user1mail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void testSPFsoftFail() throws Exception { MailAddress sender = new MailAddress("test@spf3.james.apache.org"); MailAddress rcpt = new MailAddress("test@localhost"); setupMockedSMTPSession("192.168.100.1", "spf3.james.apache.org"); SPFHandler spf = new SPFHandler(); spf.setDNSService(mockedDnsService); assertThat(spf.doMail(mockedSMTPSession, sender).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); assertThat(spf.doRcpt(mockedSMTPSession, sender, rcpt).getResult()).describedAs("softfail declined").isEqualTo(HookReturnCode.declined()); }
@Test public void testSPFpass() throws Exception { MailAddress sender = new MailAddress("test@spf1.james.apache.org"); MailAddress rcpt = new MailAddress("test@localhost"); setupMockedSMTPSession("192.168.100.1", "spf1.james.apache.org"); SPFHandler spf = new SPFHandler(); spf.setDNSService(mockedDnsService); assertThat(spf.doMail(mockedSMTPSession, sender).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); assertThat(spf.doRcpt(mockedSMTPSession, sender, rcpt).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); }
@Test public void testSPFpermErrorRejectDisabled() throws Exception { MailAddress sender = new MailAddress("test@spf4.james.apache.org"); MailAddress rcpt = new MailAddress("test@localhost"); setupMockedSMTPSession("192.168.100.1", "spf4.james.apache.org"); SPFHandler spf = new SPFHandler(); spf.setDNSService(mockedDnsService); spf.setBlockPermError(false); assertThat(spf.doMail(mockedSMTPSession, sender).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); assertThat(spf.doRcpt(mockedSMTPSession, sender, rcpt).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); } }
@Test public void testNullSenderNotReject() { ValidSenderDomainHandler handler = createHandler(); HookReturnCode response = handler.doMail(setupMockedSession(null), MaybeSender.nullSender()).getResult(); assertThat(HookReturnCode.declined()).describedAs("Not blocked cause its a nullsender").isEqualTo(response); }
@Test public void testNotBlocked() throws IOException, MessagingException { ArrayList<String> servers = new ArrayList<>(); servers.add(URISERVER); SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage( "http://" + GOOD_DOMAIN + "/"))); URIRBLHandler handler = new URIRBLHandler(); handler.setDNSService(setupMockedDnsServer()); handler.setUriRblServer(servers); HookResult response = handler.onMessage(session, mockedMail); assertThat(HookReturnCode.declined()).describedAs("Email was not rejected").isEqualTo(response.getResult()); }
@Test public void doRcptShouldDenyWhenHasMappingLoop() throws Exception { memoryRecipientRewriteTable.addAddressMapping(MappingSource.fromUser(USER1, Domain.LOCALHOST), USER2 + "@localhost"); memoryRecipientRewriteTable.addAddressMapping(MappingSource.fromUser(USER2, Domain.LOCALHOST), USER1 + "@localhost"); SMTPSession session = setupMockedSMTPSession(!RELAYING_ALLOWED); HookReturnCode rCode = handler.doRcpt(session, SENDER, user1mail).getResult(); assertThat(rCode).isEqualTo(HookReturnCode.declined()); }
@Test public void testNotRejectMaxRcpt() throws Exception { SMTPSession session = setupMockedSession(3); MaxRcptHandler handler = new MaxRcptHandler(); handler.setMaxRcpt(4); HookReturnCode resp = handler.doRcpt(session,null,new MailAddress("test@test")).getResult(); assertThat(HookReturnCode.declined()).describedAs("Not Rejected..").isEqualTo(resp); }
@Test public void testSPFtempError() throws Exception { MailAddress sender = new MailAddress("test@spf5.james.apache.org"); MailAddress rcpt = new MailAddress("test@localhost"); setupMockedSMTPSession("192.168.100.1", "spf5.james.apache.org"); SPFHandler spf = new SPFHandler(); spf.setDNSService(mockedDnsService); assertThat(spf.doMail(mockedSMTPSession, sender).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); assertThat(spf.doRcpt(mockedSMTPSession, sender, rcpt).getResult()).describedAs("temperror denysoft").isEqualTo(HookReturnCode.denySoft()); }
@Test public void testNotRejectMaxRcpt() throws Exception { SMTPSession session = setupMockedSession(3); MaxRcptHandler handler = new MaxRcptHandler(); handler.setMaxRcpt(4); HookReturnCode resp = handler.doRcpt(session, MaybeSender.nullSender(), new MailAddress("test@test")).getResult(); assertThat(HookReturnCode.declined()).describedAs("Not Rejected..").isEqualTo(resp); }
@Test public void testNotRejectValidHelo() throws Exception { MailAddress mailAddress = new MailAddress("test@localhost"); SMTPSession session = setupMockSession(VALID_HOST,false,false,null,mailAddress); ResolvableEhloHeloHandler handler = createHandler(); handler.doHelo(session, VALID_HOST); assertThat(session.getAttachment(BAD_EHLO_HELO, Transaction)).withFailMessage("Valid HELO").isNull(); HookReturnCode result = handler.doRcpt(session,null, mailAddress).getResult(); assertThat(HookReturnCode.declined()).describedAs("Not reject").isEqualTo(result); }
@Test public void testSPFfail() throws Exception { MailAddress sender = new MailAddress("test@spf2.james.apache.org"); MailAddress rcpt = new MailAddress("test@localhost"); setupMockedSMTPSession("192.168.100.1", "spf2.james.apache.org"); SPFHandler spf = new SPFHandler(); spf.setDNSService(mockedDnsService); assertThat(spf.doMail(mockedSMTPSession, sender).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); assertThat(spf.doRcpt(mockedSMTPSession, sender, rcpt).getResult()).describedAs("fail").isEqualTo(HookReturnCode.deny()); }
@Test public void testNotRejectValidHelo() throws Exception { MailAddress mailAddress = new MailAddress("test@localhost"); SMTPSession session = setupMockSession(VALID_HOST,false,false,null,mailAddress); ResolvableEhloHeloHandler handler = createHandler(); handler.doHelo(session, VALID_HOST); assertThat(session.getAttachment(BAD_EHLO_HELO, Transaction)).withFailMessage("Valid HELO").isNull(); HookReturnCode result = handler.doRcpt(session, MaybeSender.nullSender(), mailAddress).getResult(); assertThat(HookReturnCode.declined()).describedAs("Not reject").isEqualTo(result); }
@Test public void testNonSpam() throws Exception { SMTPSession session = setupMockedSMTPSession(setupMockedMail(setupMockedMimeMessage("test"))); SpamAssassinHandler handler = new SpamAssassinHandler(new NoopMetricFactory()); handler.setSpamdHost(SPAMD_HOST); handler.setSpamdPort(spamd.getPort()); handler.setSpamdRejectionHits(200.0); HookResult response = handler.onMessage(session, mockedMail); assertThat(HookReturnCode.declined()).describedAs("Email was not rejected").isEqualTo(response.getResult()); assertThat("NO").describedAs("email was not spam").isEqualTo(mockedMail.getAttribute(SpamAssassinResult.FLAG_MAIL_ATTRIBUTE_NAME)); assertThat(mockedMail.getAttribute(STATUS_MAIL_ATTRIBUTE_NAME)).withFailMessage("spam hits").isNotNull(); }
@Test public void testSPFsoftFailRejectEnabled() throws Exception { MailAddress sender = new MailAddress("test@spf3.james.apache.org"); MailAddress rcpt = new MailAddress("test@localhost"); setupMockedSMTPSession("192.168.100.1", "spf3.james.apache.org"); SPFHandler spf = new SPFHandler(); spf.setDNSService(mockedDnsService); spf.setBlockSoftFail(true); assertThat(spf.doMail(mockedSMTPSession, sender).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); assertThat(spf.doRcpt(mockedSMTPSession, sender, rcpt).getResult()).describedAs("softfail reject").isEqualTo(HookReturnCode.deny()); }
@Test public void testSPFpermError() throws Exception { MailAddress sender = new MailAddress("test@spf4.james.apache.org"); MailAddress rcpt = new MailAddress("test@localhost"); setupMockedSMTPSession("192.168.100.1", "spf4.james.apache.org"); SPFHandler spf = new SPFHandler(); spf.setDNSService(mockedDnsService); spf.setBlockSoftFail(true); assertThat(spf.doMail(mockedSMTPSession, sender).getResult()).describedAs("declined").isEqualTo(HookReturnCode.declined()); assertThat(spf.doRcpt(mockedSMTPSession, sender, rcpt).getResult()).describedAs("permerror reject").isEqualTo(HookReturnCode.deny()); }