JAMES-1978 Provide tests for InMemorySubscriptionMapper With many thanks to:
Nguyen Thi Mai and Le Thi Huong Lai for their work on Quotas and In memory subscriptions Tran Thi & My Linh for their work on TooMuchLines txc1996 & Van Thanh For improving readability of SMTPAuthIsSuccessfulTest thienan090196 & Tran Thi & My Linh for their tests on RecipientIsLocalTest >From Passerelle Numeriques VietNam Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f1ea1225 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f1ea1225 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f1ea1225 Branch: refs/heads/master Commit: f1ea122561dc701fe869c75eaf14d2eaa1069437 Parents: bde101f Author: Benoit Tellier <btell...@linagora.com> Authored: Tue Dec 27 11:31:38 2016 +0700 Committer: benwa <btell...@linagora.com> Committed: Wed Mar 29 08:00:16 2017 +0700 ---------------------------------------------------------------------- .../user/InMemorySubscriptionMapper.java | 26 +--- .../user/InMemorySubscriptionMapperTest.java | 126 +++++++++++++++++++ .../user/model/impl/SimpleSubscription.java | 23 +++- 3 files changed, 148 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/f1ea1225/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java index de5ff53..741799c 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java @@ -28,6 +28,8 @@ import org.apache.james.mailbox.store.transaction.NonTransactionalMapper; import org.apache.james.mailbox.store.user.SubscriptionMapper; import org.apache.james.mailbox.store.user.model.Subscription; +import com.google.common.collect.ImmutableList; + public class InMemorySubscriptionMapper extends NonTransactionalMapper implements SubscriptionMapper { private static final int INITIAL_SIZE = 64; @@ -37,9 +39,6 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement subscriptionsByUser = new ConcurrentHashMap<String, List<Subscription>>(INITIAL_SIZE); } - /** - * @see org.apache.james.mailbox.store.user.SubscriptionMapper#delete(org.apache.james.mailbox.store.user.model.Subscription) - */ public synchronized void delete(Subscription subscription) { final String user = subscription.getUser(); final List<Subscription> subscriptions = subscriptionsByUser.get(user); @@ -48,9 +47,6 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement } } - /** - * @see org.apache.james.mailbox.store.user.SubscriptionMapper#findMailboxSubscriptionForUser(java.lang.String, java.lang.String) - */ public Subscription findMailboxSubscriptionForUser(String user, String mailbox) { final List<Subscription> subscriptions = subscriptionsByUser.get(user); Subscription result = null; @@ -65,25 +61,17 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement return result; } - /** - * @see org.apache.james.mailbox.store.user.SubscriptionMapper#findSubscriptionsForUser(java.lang.String) - */ - @SuppressWarnings("unchecked") public List<Subscription> findSubscriptionsForUser(String user) { final List<Subscription> subcriptions = subscriptionsByUser.get(user); final List<Subscription> results; if (subcriptions == null) { - results = Collections.EMPTY_LIST; + results = ImmutableList.of(); } else { - // Make a copy to prevent concurrent modifications - results = new ArrayList<Subscription>(subcriptions); + results = ImmutableList.copyOf(subcriptions); } return results; } - /** - * @see org.apache.james.mailbox.store.user.SubscriptionMapper#save(org.apache.james.mailbox.store.user.model.Subscription) - */ public synchronized void save(Subscription subscription) { final String user = subscription.getUser(); final List<Subscription> subscriptions = subscriptionsByUser.get(user); @@ -100,12 +88,8 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement subscriptionsByUser.clear(); } - /** - * Do nothing - */ public void endRequest() { - // nothing todo - + // nothing to do } } http://git-wip-us.apache.org/repos/asf/james-project/blob/f1ea1225/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java new file mode 100644 index 0000000..8ef5b2e --- /dev/null +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java @@ -0,0 +1,126 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox.inmemory.user; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; + +import org.apache.james.mailbox.store.user.model.Subscription; +import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription; +import org.junit.Before; +import org.junit.Test; + +public class InMemorySubscriptionMapperTest { + + private static final String USER_1 = "user1"; + private static final String USER_2 = "user2"; + private static final String MAILBOX_1 = "mailbox1"; + private static final String MAILBOX_2 = "mailbox2"; + + private InMemorySubscriptionMapper testee; + + @Before + public void setUp() { + testee = new InMemorySubscriptionMapper(); + } + + @Test + public void findSubscriptionsForUserShouldBeEmptyByDefault() { + List<Subscription> subscriptions = testee.findSubscriptionsForUser(USER_1); + + assertThat(subscriptions).isEmpty(); + } + + @Test + public void findMailboxSubscriptionForUserShouldReturnNullByDefault() { + Subscription subscriptions = testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1); + + assertThat(subscriptions).isNull(); + } + + @Test + public void findMailboxSubscriptionForUserShouldReturnSubscription() { + SimpleSubscription subscription = new SimpleSubscription(USER_1, MAILBOX_1); + testee.save(subscription); + + List<Subscription> results = testee.findSubscriptionsForUser(USER_1); + + assertThat(results).containsOnly(subscription); + } + + @Test + public void findSubscriptionsForUserShouldReturnSubscriptions() { + SimpleSubscription subscription1 = new SimpleSubscription(USER_1, MAILBOX_1); + SimpleSubscription subscription2 = new SimpleSubscription(USER_1, MAILBOX_2); + testee.save(subscription1); + testee.save(subscription2); + + List<Subscription> results = testee.findSubscriptionsForUser(USER_1); + + assertThat(results).containsOnly(subscription1, subscription2); + } + + @Test + public void findSubscriptionsForUserShouldReturnOnlyUserSubscriptions() { + SimpleSubscription subscription1 = new SimpleSubscription(USER_1,MAILBOX_1); + SimpleSubscription subscription2 = new SimpleSubscription(USER_2,MAILBOX_2); + testee.save(subscription1); + testee.save(subscription2); + + List<Subscription> results = testee.findSubscriptionsForUser(USER_1); + + assertThat(results).containsOnly(subscription1); + } + + @Test + public void findMailboxSubscriptionForUserShouldReturnOnlyUserSubscriptions() { + SimpleSubscription subscription1 = new SimpleSubscription(USER_1,MAILBOX_1); + SimpleSubscription subscription2 = new SimpleSubscription(USER_2,MAILBOX_1); + testee.save(subscription1); + testee.save(subscription2); + + Subscription result = testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1); + + assertThat(result).isEqualTo(result); + } + + @Test + public void findMailboxSubscriptionForUserShouldReturnSubscriptionConcerningTheMailbox() { + SimpleSubscription subscription1 = new SimpleSubscription(USER_1,MAILBOX_1); + SimpleSubscription subscription2 = new SimpleSubscription(USER_1,MAILBOX_2); + testee.save(subscription1); + testee.save(subscription2); + + Subscription result = testee.findMailboxSubscriptionForUser(USER_1,MAILBOX_1); + + assertThat(result).isEqualTo(result); + } + + @Test + public void deleteShouldRemoveSubscription() { + SimpleSubscription subscription = new SimpleSubscription(USER_1, MAILBOX_1); + testee.save(subscription); + + testee.delete(subscription); + + assertThat(testee.findSubscriptionsForUser(USER_1)).isEmpty(); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/f1ea1225/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java index beb5af6..39bf245 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/impl/SimpleSubscription.java @@ -20,6 +20,8 @@ package org.apache.james.mailbox.store.user.model.impl; import org.apache.james.mailbox.store.user.model.Subscription; +import com.google.common.base.Objects; + public class SimpleSubscription implements Subscription { private final String user; @@ -30,18 +32,27 @@ public class SimpleSubscription implements Subscription { this.mailbox = mailbox; } - /** - * @see org.apache.james.mailbox.store.user.model.Subscription#getMailbox() - */ public String getMailbox() { return mailbox; } - /** - * @see org.apache.james.mailbox.store.user.model.Subscription#getUser() - */ public String getUser() { return user; } + @Override + public final boolean equals(Object o) { + if (o instanceof SimpleSubscription) { + SimpleSubscription that = (SimpleSubscription) o; + + return Objects.equal(this.user, that.user) + && Objects.equal(this.mailbox, that.mailbox); + } + return false; + } + + @Override + public final int hashCode() { + return Objects.hashCode(user, mailbox); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org