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 <[email protected]>
Authored: Tue Dec 27 11:31:38 2016 +0700
Committer: benwa <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]