@Test public void handleMappingWithOnlyRemoteRecipient() throws Exception { when(domainList.getDefaultDomain()).thenReturn(Domain.of(MailAddressFixture.JAMES_LOCAL)); mappings = MappingsImpl.builder() .add(MailAddressFixture.ANY_AT_JAMES.toString()) .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES); FakeMailContext.SentMail expected = FakeMailContext.sentMailBuilder() .sender(MailAddressFixture.ANY_AT_JAMES) .recipients(ImmutableList.of(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES)) .fromMailet() .message(message) .build(); assertThat(mailetContext.getSentMails()).containsOnly(expected); assertThat(result).isEmpty(); }
String alias = jUser.getAlias(); if (alias != null) { mappingsBuilder.add(alias + "@" + domain.asString()); String forward; if (jUser.getForwardingDestination() != null && ((forward = jUser.getForwardingDestination().toString()) != null)) { mappingsBuilder.add(forward); } else { String errorBuffer = "Forwarding was enabled for " + username + " but no forwarding address was set for this account."; throw new RecipientRewriteTableException("Unable to lookup forwards/aliases", e); Mappings mappings = mappingsBuilder.build(); if (mappings.size() == 0) { return null;
@Test public void getAllMappingsShouldListAllEntries() throws Exception { String user = "test"; String user2 = "test2"; String regex = "(.*)@localhost"; String regex2 = "(.+)@test"; MappingSource source1 = MappingSource.fromUser(user, Domain.LOCALHOST); MappingSource source2 = MappingSource.fromUser(user2, Domain.LOCALHOST); virtualUserTable.addMapping(source1, Mapping.regex(regex)); virtualUserTable.addMapping(source1, Mapping.regex(regex2)); virtualUserTable.addMapping(source2, Mapping.address(user + "@" + Domain.LOCALHOST.asString())); assertThat(virtualUserTable.getAllMappings()) .describedAs("One mappingline") .containsOnly( Pair.of(source1, MappingsImpl.builder() .add(Mapping.regex(regex)) .add(Mapping.regex(regex2)) .build()), Pair.of(source2, MappingsImpl.builder() .add(Mapping.address(user + "@" + Domain.LOCALHOST.asString())) .build())); }
@Test public void handleMappingsShouldForwardEmailToRemoteServer() throws Exception { when(domainList.getDefaultDomain()).thenReturn(Domain.of(MailAddressFixture.JAMES_LOCAL)); mappings = MappingsImpl.builder() .add(MailAddressFixture.ANY_AT_JAMES.toString()) .add(NONEDOMAIN) .add(INVALID_MAIL_ADDRESS) .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES); FakeMailContext.SentMail expected = FakeMailContext.sentMailBuilder() .sender(MailAddressFixture.ANY_AT_JAMES) .recipients(ImmutableList.of(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.OTHER_AT_JAMES)) .fromMailet() .message(message) .build(); assertThat(mailetContext.getSentMails()).containsOnly(expected); }
@Test public void testAliasDomainMapping() throws ErrorMappingException, RecipientRewriteTableException { String domain = "realdomain"; Domain aliasDomain = Domain.of("aliasdomain"); String user = "user"; String user2 = "user2"; assertThat(virtualUserTable.getAllMappings()).describedAs("No mappings").isEmpty(); virtualUserTable.addMapping(MappingSource.fromDomain(aliasDomain), Mapping.address(user2 + "@" + domain)); virtualUserTable.addMapping(MappingSource.fromDomain(aliasDomain), Mapping.domain(Domain.of(domain))); assertThat(virtualUserTable.getMappings(user, aliasDomain)) .describedAs("Domain mapped as first, Address mapped as second") .isEqualTo(MappingsImpl.builder() .add(Mapping.address(user + "@" + domain)) .add(Mapping.address(user2 + "@" + domain)) .build()); virtualUserTable.removeMapping(MappingSource.fromDomain(aliasDomain), Mapping.address(user2 + "@" + domain)); virtualUserTable.removeMapping(MappingSource.fromDomain(aliasDomain), Mapping.domain(Domain.of(domain))); }
@Test public void builderShouldPutGroupsBetweenDomainAndForward() { Mapping regexMapping = Mapping.regex("regex"); Mapping forwardMapping = Mapping.forward("forward"); Mapping domainMapping = Mapping.domain(Domain.of("domain")); Mapping groupMapping = Mapping.group("group"); MappingsImpl mappingsImpl = MappingsImpl.builder() .add(regexMapping) .add(forwardMapping) .add(domainMapping) .add(groupMapping) .build(); assertThat(mappingsImpl).containsExactly(domainMapping, groupMapping, forwardMapping, regexMapping); } }
@Test public void selectShouldReturnMatchingElementsInOrderWhenMatchingMapping() { MappingsImpl mappings = MappingsImpl.builder() .add(Mapping.regex("toto")) .add(Mapping.address("toto")) .add(Mapping.domain(Domain.of("domain"))) .add(Mapping.regex("tata")) .build(); MappingsImpl expected = MappingsImpl.builder() .add(Mapping.regex("toto")) .add(Mapping.regex("tata")) .build(); assertThat(mappings.select(Mapping.Type.Regex)).isEqualTo(expected); }
@Test public void builderShouldPutDomainAliasFirstWhenVariousMappings() { Mapping addressMapping = Mapping.address("aaa"); Mapping errorMapping = Mapping.error("error"); Mapping domainMapping = Mapping.domain(Domain.of("domain")); Mapping domain2Mapping = Mapping.domain(Domain.of("domain2")); MappingsImpl mappingsImpl = MappingsImpl.builder() .add(domainMapping) .add(addressMapping) .add(errorMapping) .add(domain2Mapping) .build(); assertThat(mappingsImpl).containsExactly(domainMapping, domain2Mapping, addressMapping, errorMapping); }
@Test public void excludeShouldReturnNonMatchingElementsInOrderWhenNonMatchingMapping() { MappingsImpl mappings = MappingsImpl.builder() .add(Mapping.regex("toto")) .add(Mapping.address("toto")) .add(Mapping.domain(Domain.of("domain"))) .add(Mapping.regex("tata")) .build(); MappingsImpl expected = MappingsImpl.builder() .add(Mapping.address("toto")) .add(Mapping.domain(Domain.of("domain"))) .build(); assertThat(mappings.exclude(Mapping.Type.Regex)).isEqualTo(expected); }
@Test(expected = MessagingException.class) public void handleMappingsShouldThrowExceptionWhenMappingsContainAtLeastOneNoneDomainObjectButCannotGetDefaultDomain() throws Exception { when(domainList.getDefaultDomain()).thenThrow(DomainListException.class); mappings = MappingsImpl.builder() .add(MailAddressFixture.ANY_AT_JAMES.toString()) .add(NONEDOMAIN) .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); processor.handleMappings(mappings, FakeMail.builder().sender(MailAddressFixture.ANY_AT_JAMES).build(), MailAddressFixture.OTHER_AT_JAMES); }
@Override public void addMapping(MappingSource source, Mapping mapping) throws RecipientRewriteTableException { Mappings map = getUserDomainMappings(source); if (!map.isEmpty()) { Mappings updatedMappings = MappingsImpl.from(map).add(mapping).build(); doUpdateMapping(source, updatedMappings.serialize()); } else { doAddMapping(source, mapping.asString()); } }
@Test public void handleMappingWithOnlyLocalRecipient() throws Exception { when(domainList.getDefaultDomain()).thenReturn(Domain.of(MailAddressFixture.JAMES_LOCAL)); mappings = MappingsImpl.builder() .add(NONEDOMAIN) .add(INVALID_MAIL_ADDRESS) .add(MailAddressFixture.ANY_AT_LOCAL.toString()) .build(); Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES); assertThat(result).containsOnly(nonDomainWithDefaultLocal, MailAddressFixture.ANY_AT_LOCAL); }
@Test public void handleMappingsShouldReturnTheOnlyMailAddressBelongToLocalServer() throws Exception { when(domainList.getDefaultDomain()).thenReturn(Domain.of(MailAddressFixture.JAMES2_APACHE_ORG)); mappings = MappingsImpl.builder() .add(MailAddressFixture.ANY_AT_JAMES.toString()) .add(NONEDOMAIN) .add(MailAddressFixture.ANY_AT_LOCAL.toString()) .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES); assertThat(result).containsOnly(MailAddressFixture.ANY_AT_LOCAL); }
@Test public void handleMappingsShouldReturnTheMailAddressBelongToLocalServer() throws Exception { when(domainList.getDefaultDomain()).thenReturn(Domain.of(MailAddressFixture.JAMES_LOCAL)); mappings = MappingsImpl.builder() .add(MailAddressFixture.ANY_AT_JAMES.toString()) .add(NONEDOMAIN) .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); Collection<MailAddress> result = processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES); assertThat(result).containsOnly(nonDomainWithDefaultLocal); }
@Test public void handleMappingsShouldDoNotCareDefaultDomainWhenMappingsDoesNotContainAnyNoneDomainObject() throws Exception { when(domainList.getDefaultDomain()).thenThrow(DomainListException.class); mappings = MappingsImpl.builder() .add(MailAddressFixture.ANY_AT_JAMES.toString()) .add(MailAddressFixture.OTHER_AT_JAMES.toString()) .build(); processor.handleMappings(mappings, mail, MailAddressFixture.OTHER_AT_JAMES); }