http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature index 82828d1..80570cc 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature @@ -5,26 +5,26 @@ Feature: Download GET Background: Given a domain named "domain.tld" And a connected user "[email protected]" - And "[email protected]" has a mailbox "inbox" + And "[email protected]" has a mailbox "INBOX" Scenario: Getting an attachment previously stored - Given "[email protected]" mailbox "inbox" contains a message "1" with an attachment "2" + Given "[email protected]" mailbox "INBOX" contains a message "1" with an attachment "2" When "[email protected]" downloads "2" Then the user should receive that attachment Scenario: Getting an attachment with an unknown blobId - Given "[email protected]" mailbox "inbox" contains a message "1" with an attachment "2" + Given "[email protected]" mailbox "INBOX" contains a message "1" with an attachment "2" When "[email protected]" downloads "2" with a valid authentication token but a bad blobId Then the user should receive a not found response Scenario: Getting an attachment previously stored with a desired name - Given "[email protected]" mailbox "inbox" contains a message "1" with an attachment "2" + Given "[email protected]" mailbox "INBOX" contains a message "1" with an attachment "2" When "[email protected]" downloads "2" with "myFileName.txt" name Then the user should receive that attachment And the attachment is named "myFileName.txt" Scenario: Getting an attachment previously stored with a non ASCII name - Given "[email protected]" mailbox "inbox" contains a message "1" with an attachment "2" + Given "[email protected]" mailbox "INBOX" contains a message "1" with an attachment "2" When "[email protected]" downloads "2" with "دÙÙØ§ØµÙر.odt" name Then the user should receive that attachment And the attachment is named "دÙÙØ§ØµÙر.odt" \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadPost.feature ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadPost.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadPost.feature index c748014..12d655d 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadPost.feature +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/DownloadPost.feature @@ -5,13 +5,13 @@ Feature: Alternative authentication mechanism for getting attachment via a POST Background: Given a domain named "domain.tld" And a connected user "[email protected]" - And "[email protected]" has a mailbox "inbox" + And "[email protected]" has a mailbox "INBOX" Scenario: Asking for an attachment access token with an unknown blobId When "[email protected]" asks for a token for attachment "123" Then the user should receive a not found response Scenario: Asking for an attachment access token with a previously stored blobId - Given "[email protected]" mailbox "inbox" contains a message "1" with an attachment "2" + Given "[email protected]" mailbox "INBOX" contains a message "1" with an attachment "2" When "[email protected]" asks for a token for attachment "2" Then the user should receive an attachment access token http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature index 0cd93d1..8c0bb04 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature @@ -5,16 +5,16 @@ Feature: GetMessages method Background: Given a domain named "domain.tld" And a connected user "[email protected]" - And "[email protected]" has a mailbox "inbox" + And "[email protected]" has a mailbox "INBOX" Scenario: Retrieving a message in several mailboxes should return a single message in these mailboxes Given "[email protected]" has a mailbox "custom" - And the user has a message "m1" in "inbox" and "custom" mailboxes with subject "my test subject", content "testmail" + And the user has a message "m1" in "INBOX" and "custom" mailboxes with subject "my test subject", content "testmail" When the user ask for messages "m1" Then no error is returned And the list should contain 1 message And the id of the message is "m1" - And the message is in "custom,inbox" mailboxes + And the message is in "custom,INBOX" mailboxes Scenario: Retrieving messages with a non null accountId should return a NotSupported error When the user ask for messages using its accountId @@ -42,7 +42,7 @@ Feature: GetMessages method And the notFound list should contain the requested message id Scenario: Retrieving message should return messages when exists - Given the user has a message "m1" in "inbox" mailbox with subject "my test subject", content "testmail" + Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail" When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -76,9 +76,9 @@ Feature: GetMessages method Examples: |mailbox |content-type |subject |subject-header |content |preview | - |"inbox" |"text/html" |"my test subject" |my test subject |"This is a <b>HTML</b> mail" |"This is a HTML mail" | - |"inbox" |"text/html" |"my test subject" |my test subject |"This is a <b>HTML</b> mail containing <u>underlined part</u>, <i>italic part</i> and <u><i>underlined AND italic part</i></u>" |"This is a HTML mail containing underlined part, italic part and underlined AND italic part" | - |"inbox" |"text/html" |"my test subject" |my test subject |"This is a <ganan>HTML</b> mail" |"This is a HTML mail" | + |"INBOX" |"text/html" |"my test subject" |my test subject |"This is a <b>HTML</b> mail" |"This is a HTML mail" | + |"INBOX" |"text/html" |"my test subject" |my test subject |"This is a <b>HTML</b> mail containing <u>underlined part</u>, <i>italic part</i> and <u><i>underlined AND italic part</i></u>" |"This is a HTML mail containing underlined part, italic part and underlined AND italic part" | + |"INBOX" |"text/html" |"my test subject" |my test subject |"This is a <ganan>HTML</b> mail" |"This is a HTML mail" | Scenario Outline: Retrieving message should return preview with tags when text message Given the user has a message "m1" in <mailbox> mailbox with content-type <content-type> subject <subject>, content <content> @@ -89,10 +89,10 @@ Feature: GetMessages method Examples: |mailbox |content-type |subject |content |preview | - |"inbox" |"text/plain" |"my test subject" |"Here is a listing of HTML tags : <b>jfjfjfj</b>, <i>jfhdgdgdfj</i>, <u>jfjaaafj</u>" |"Here is a listing of HTML tags : <b>jfjfjfj</b>, <i>jfhdgdgdfj</i>, <u>jfjaaafj</u>" | + |"INBOX" |"text/plain" |"my test subject" |"Here is a listing of HTML tags : <b>jfjfjfj</b>, <i>jfhdgdgdfj</i>, <u>jfjaaafj</u>" |"Here is a listing of HTML tags : <b>jfjfjfj</b>, <i>jfhdgdgdfj</i>, <u>jfjaaafj</u>" | Scenario: Retrieving message should filter properties - Given the user has a message "m1" in "inbox" mailbox with subject "my test subject", content "testmail" + Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail" When the user is getting messages "m1" with properties "id, subject" Then no error is returned And the list should contain 1 message @@ -105,7 +105,7 @@ Feature: GetMessages method And the property "date" of the message is null Scenario: Retrieving message should filter header properties - Given the user has a message "m1" in "inbox" mailbox with subject "my test subject", content "testmail", headers + Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail", headers |From |[email protected] | |header1 |Header1Content | |HEADer2 |Header2Content | @@ -123,14 +123,14 @@ Feature: GetMessages method And the property "date" of the message is null Scenario: Retrieving message should return not found when id does not match - Given the user has a message "m1" in "inbox" mailbox with subject "my test subject", content "testmail" + Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail" When the user ask for an unknown message Then no error is returned And the list of messages is empty And the notFound list should contain the requested message id Scenario: Retrieving message should return mandatory properties when not asked - Given the user has a message "m1" in "inbox" mailbox with subject "my test subject", content "testmail" + Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail" When the user is getting messages "m1" with properties "subject" Then no error is returned And the list should contain 1 message @@ -138,7 +138,7 @@ Feature: GetMessages method And the subject of the message is "my test subject" Scenario: Retrieving message should return attachments when some - Given the user has a message "m1" in "inbox" mailbox with two attachments + Given the user has a message "m1" in "INBOX" mailbox with two attachments When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -160,7 +160,7 @@ Feature: GetMessages method |isInline |true | Scenario: Retrieving message should return attachments and html body when some attachments and html message - Given the user has a message "m1" in "inbox" mailbox with two attachments + Given the user has a message "m1" in "INBOX" mailbox with two attachments When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -171,7 +171,7 @@ Feature: GetMessages method And the htmlBody of the message is "<b>html</b>\n" Scenario: Retrieving message should return attachments and text body when some attachments and text message - Given the user has a message "m1" in "inbox" mailbox with two attachments in text + Given the user has a message "m1" in "INBOX" mailbox with two attachments in text When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -182,7 +182,7 @@ Feature: GetMessages method And the property "htmlBody" of the message is null Scenario: Retrieving message should return attachments and both html/text body when some attachments and both html/text message - Given the user has a multipart message "m1" in "inbox" mailbox + Given the user has a multipart message "m1" in "INBOX" mailbox When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -193,7 +193,7 @@ Feature: GetMessages method And the htmlBody of the message is "<i>blabla</i>\n<b>bloblo</b>\n" Scenario: Retrieving message should return image and html body when multipart/alternative where first part is multipart/related with html and image - Given the user has a multipart/related message "m1" in "inbox" mailbox + Given the user has a multipart/related message "m1" in "INBOX" mailbox When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -204,7 +204,7 @@ Feature: GetMessages method And the htmlBody of the message is "<html>multipart/related content</html>\n" Scenario: Retrieving message should return textBody and htmlBody when incoming mail have an inlined HTML and text body without Content-ID - Given the user has a message "m1" in "inbox" mailbox, composed of a multipart with inlined text part and inlined html part + Given the user has a message "m1" in "INBOX" mailbox, composed of a multipart with inlined text part and inlined html part When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -212,20 +212,20 @@ Feature: GetMessages method And the htmlBody of the message is "<html>Hello html body</html>\n" Scenario: Retrieving message with more than 1000 char by line should return message when exists - Given the user has a message "m1" in "inbox" mailbox beginning by a long line + Given the user has a message "m1" in "INBOX" mailbox beginning by a long line When the user ask for messages "m1" Then no error is returned And the list should contain 1 message And the id of the message is "m1" Scenario: - Given the user has a message "m1" in "inbox" mailbox with two same attachments in text + Given the user has a message "m1" in "INBOX" mailbox with two same attachments in text When the user ask for messages "m1" Then no error is returned And the list of attachments of the message contains 2 attachments Scenario: Retrieving message should read content from multipart when some inline attachment and both html/text multipart - Given the user has a message "m1" in "inbox" mailbox with plain/text inline attachment + Given the user has a message "m1" in "INBOX" mailbox with plain/text inline attachment When the user ask for messages "m1" Then no error is returned And the list should contain 1 message @@ -233,7 +233,7 @@ Feature: GetMessages method And the htmlBody of the message is "<i>blabla</i>\n<b>bloblo</b>\n" Scenario: Retrieving message should find html body when text in main multipart and html in inner multipart - Given the user has a message "m1" in "inbox" mailbox with text in main multipart and html in inner multipart + Given the user has a message "m1" in "INBOX" mailbox with text in main multipart and html in inner multipart When the user ask for messages "m1" Then no error is returned And the list should contain 1 message http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxes.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxes.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxes.java new file mode 100644 index 0000000..7a91514 --- /dev/null +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxes.java @@ -0,0 +1,36 @@ +/**************************************************************** + * 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.jmap; + +import java.util.List; + +import org.apache.james.mailbox.model.MailboxConstants; + +import com.google.common.collect.ImmutableList; + +public interface DefaultMailboxes { + + String INBOX = MailboxConstants.INBOX; + String OUTBOX = "Outbox"; + String SENT = "Sent"; + String TRASH = "Trash"; + String DRAFTS = "Drafts"; + + List<String> DEFAULT_MAILBOXES = ImmutableList.of(INBOX, OUTBOX, SENT, TRASH, DRAFTS); +} http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilter.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilter.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilter.java new file mode 100644 index 0000000..e12014c --- /dev/null +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilter.java @@ -0,0 +1,106 @@ +/**************************************************************** + * 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.jmap; + +import java.io.IOException; +import java.util.Optional; +import java.util.function.Function; + +import javax.inject.Inject; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import org.apache.james.mailbox.MailboxManager; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MailboxSession.User; +import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.model.MailboxPath; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Throwables; + +public class DefaultMailboxesProvisioningFilter implements Filter { + + private static final Logger LOGGER = LoggerFactory.getLogger(DefaultMailboxesProvisioningFilter.class); + private final MailboxManager mailboxManager; + + @Inject + @VisibleForTesting DefaultMailboxesProvisioningFilter(MailboxManager mailboxManager) { + this.mailboxManager = mailboxManager; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + Optional<MailboxSession> session = Optional.ofNullable((MailboxSession)request.getAttribute(AuthenticationFilter.MAILBOX_SESSION)); + session.ifPresent(this::createMailboxesIfNeeded); + chain.doFilter(request, response); + } + + @VisibleForTesting + void createMailboxesIfNeeded(MailboxSession session) { + try { + User user = session.getUser(); + createDefaultMailboxes(user); + } catch (MailboxException e) { + throw Throwables.propagate(e); + } + } + + private void createDefaultMailboxes(User user) throws MailboxException { + MailboxSession session = mailboxManager.createSystemSession(user.getUserName(), LOGGER); + DefaultMailboxes.DEFAULT_MAILBOXES.stream() + .map(toMailboxPath(session)) + .filter(mailboxPath -> mailboxDoesntExist(mailboxPath, session)) + .forEach(mailboxPath -> createMailbox(mailboxPath, session)); + } + + private boolean mailboxDoesntExist(MailboxPath mailboxPath, MailboxSession session) { + try { + return !mailboxManager.mailboxExists(mailboxPath, session); + } catch (MailboxException e) { + throw Throwables.propagate(e); + } + } + + private Function<String, MailboxPath> toMailboxPath(MailboxSession session) { + return mailbox -> new MailboxPath(session.getPersonalSpace(), session.getUser().getUserName(), mailbox); + } + + private void createMailbox(MailboxPath mailboxPath, MailboxSession session) { + try { + mailboxManager.createMailbox(mailboxPath, session); + } catch (MailboxException e) { + throw Throwables.propagate(e); + } + } + + @Override + public void destroy() { + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java index 25242f4..de3ac75 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java @@ -40,7 +40,7 @@ public class JMAPServer implements Configurable { @Inject private JMAPServer(JMAPConfiguration jmapConfiguration, AuthenticationServlet authenticationServlet, JMAPServlet jmapServlet, DownloadServlet downloadServlet, UploadServlet uploadServlet, - AuthenticationFilter authenticationFilter, UserProvisioningFilter userProvisioningFilter) { + AuthenticationFilter authenticationFilter, UserProvisioningFilter userProvisioningFilter, DefaultMailboxesProvisioningFilter defaultMailboxesProvisioningFilter) { server = JettyHttpServer.create( configurationBuilderFor(jmapConfiguration) @@ -54,6 +54,7 @@ public class JMAPServer implements Configurable { .filter(JMAPUrls.JMAP) .with(new AllowAllCrossOriginRequests(bypass(authenticationFilter).on("OPTIONS").only())) .and(userProvisioningFilter) + .and(defaultMailboxesProvisioningFilter) .only() .serveAsOneLevelTemplate(JMAPUrls.DOWNLOAD) .with(downloadServlet) http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java index 6145a79..726d37f 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/UserProvisioningFilter.java @@ -21,7 +21,6 @@ package org.apache.james.jmap; import java.io.IOException; import java.util.Optional; import java.util.UUID; -import java.util.function.Function; import javax.inject.Inject; import javax.servlet.Filter; @@ -31,33 +30,24 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSession.User; import org.apache.james.mailbox.exception.BadCredentialsException; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.user.api.AlreadyExistInUsersRepositoryException; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableList; public class UserProvisioningFilter implements Filter { - private static final ImmutableList<String> DEFAULT_MAILBOXES = ImmutableList.of("INBOX", "Outbox", "Sent", "Trash"); - private static final Logger LOGGER = LoggerFactory.getLogger(UserProvisioningFilter.class); private final UsersRepository usersRepository; - private final MailboxManager mailboxManager; @Inject - @VisibleForTesting UserProvisioningFilter(UsersRepository usersRepository, MailboxManager mailboxManager) { + @VisibleForTesting UserProvisioningFilter(UsersRepository usersRepository) { this.usersRepository = usersRepository; - this.mailboxManager = mailboxManager; } @Override @@ -91,7 +81,6 @@ public class UserProvisioningFilter implements Filter { private void createAccount(User user) throws UsersRepositoryException, BadCredentialsException, MailboxException { createUser(user); - createDefaultMailboxes(user); } private void createUser(User user) throws UsersRepositoryException { @@ -101,25 +90,6 @@ public class UserProvisioningFilter implements Filter { private String generatePassword() { return UUID.randomUUID().toString(); } - - private void createDefaultMailboxes(User user) throws BadCredentialsException, MailboxException { - MailboxSession session = mailboxManager.createSystemSession(user.getUserName(), LOGGER); - DEFAULT_MAILBOXES.stream() - .map(toMailboxPath(session)) - .forEach(mailboxPath -> createMailbox(mailboxPath, session)); - } - - private Function<String, MailboxPath> toMailboxPath(MailboxSession session) { - return mailbox -> new MailboxPath(session.getPersonalSpace(), session.getUser().getUserName(), mailbox); - } - - private void createMailbox(MailboxPath mailboxPath, MailboxSession session) { - try { - mailboxManager.createMailbox(mailboxPath, session); - } catch (MailboxException e) { - throw Throwables.propagate(e); - } - } @Override public void destroy() { http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java new file mode 100644 index 0000000..ab0c546 --- /dev/null +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/DefaultMailboxesProvisioningFilterThreadTest.java @@ -0,0 +1,268 @@ +/**************************************************************** + * 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.jmap; + +import java.util.EnumSet; +import java.util.List; +import java.util.Set; + +import org.apache.james.mailbox.MailboxListener; +import org.apache.james.mailbox.MailboxManager; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.MessageManager; +import org.apache.james.mailbox.exception.BadCredentialsException; +import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.mock.MockMailboxSession; +import org.apache.james.mailbox.model.MailboxACL.MailboxACLCommand; +import org.apache.james.mailbox.model.MailboxACL.MailboxACLEntryKey; +import org.apache.james.mailbox.model.MailboxACL.MailboxACLRight; +import org.apache.james.mailbox.model.MailboxACL.MailboxACLRights; +import org.apache.james.mailbox.model.MailboxAnnotation; +import org.apache.james.mailbox.model.MailboxAnnotationKey; +import org.apache.james.mailbox.model.MailboxId; +import org.apache.james.mailbox.model.MailboxMetaData; +import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.model.MailboxQuery; +import org.apache.james.mailbox.model.MessageId; +import org.apache.james.mailbox.model.MessageRange; +import org.apache.james.mailbox.model.MultimailboxesSearchQuery; +import org.junit.Test; +import org.slf4j.Logger; + +import com.google.testing.threadtester.AnnotatedTestRunner; +import com.google.testing.threadtester.ThreadedAfter; +import com.google.testing.threadtester.ThreadedBefore; +import com.google.testing.threadtester.ThreadedMain; +import com.google.testing.threadtester.ThreadedSecondary; + +public class DefaultMailboxesProvisioningFilterThreadTest { + + private DefaultMailboxesProvisioningFilter sut; + private MailboxSession session; + private MailboxManager mailboxManager; + + @ThreadedBefore + public void before() { + session = new MockMailboxSession("username"); + mailboxManager = new FakeMailboxManager(session) ; + sut = new DefaultMailboxesProvisioningFilter(mailboxManager); + } + + @ThreadedMain + public void mainThread() { + sut.createMailboxesIfNeeded(session); + } + + @ThreadedSecondary + public void secondThread() { + sut.createMailboxesIfNeeded(session); + } + + @ThreadedAfter + public void after() { + // Exception is thrown if test fails + } + + @Test + public void testConcurrentAccessToFilterShouldNotThrow() { + AnnotatedTestRunner runner = new AnnotatedTestRunner(); + runner.runTests(this.getClass(), DefaultMailboxesProvisioningFilter.class); + } + + private static class FakeMailboxManager implements MailboxManager { + private MailboxSession mailboxSession; + + public FakeMailboxManager(MailboxSession mailboxSession) { + this.mailboxSession = mailboxSession; + } + + @Override + public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() { + return EnumSet.noneOf(SearchCapabilities.class); + } + + @Override + public void startProcessingRequest(MailboxSession session) { + } + + @Override + public void endProcessingRequest(MailboxSession session) { + } + + @Override + public void addListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException { + } + + @Override + public void removeListener(MailboxPath mailboxPath, MailboxListener listner, MailboxSession session) throws MailboxException { + } + + @Override + public void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException { + } + + @Override + public void removeGlobalListener(MailboxListener listner, MailboxSession session) throws MailboxException { + } + + @Override + public char getDelimiter() { + return 0; + } + + @Override + public MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public MessageManager getMailbox(MailboxId mailboxId, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public void createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException { + } + + @Override + public void deleteMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { + } + + @Override + public void renameMailbox(MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { + } + + @Override + public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public List<MessageRange> copyMessages(MessageRange set, MailboxId from, MailboxId to, MailboxSession session) + throws MailboxException { + return null; + } + + @Override + public List<MessageRange> moveMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public List<MailboxMetaData> search(MailboxQuery expression, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public boolean mailboxExists(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { + return false; + } + + @Override + public MailboxSession createSystemSession(String userName, Logger log) throws BadCredentialsException, MailboxException { + return mailboxSession; + } + + @Override + public MailboxSession login(String userid, String passwd, Logger log) throws BadCredentialsException, MailboxException { + return null; + } + + @Override + public void logout(MailboxSession session, boolean force) throws MailboxException { + } + + @Override + public boolean hasRight(MailboxPath mailboxPath, MailboxACLRight right, MailboxSession session) throws MailboxException { + return false; + } + + @Override + public MailboxACLRights myRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public MailboxACLRights[] listRigths(MailboxPath mailboxPath, MailboxACLEntryKey identifier, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public void setRights(MailboxPath mailboxPath, MailboxACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException { + } + + @Override + public List<MailboxPath> list(MailboxSession session) throws MailboxException { + return null; + } + + @Override + public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() { + return null; + } + + @Override + public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() { + return null; + } + + @Override + public List<MailboxAnnotation> getAllAnnotations(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { + return null; + } + + @Override + public List<MailboxAnnotation> getAnnotationsByKeys(MailboxPath mailboxPath, MailboxSession session, Set<MailboxAnnotationKey> keys) throws MailboxException { + return null; + } + + @Override + public void updateAnnotations(MailboxPath mailboxPath, MailboxSession session, List<MailboxAnnotation> mailboxAnnotations) throws MailboxException { + + } + + @Override + public boolean hasCapability(MailboxCapabilities capability) { + return false; + } + + @Override + public List<MessageId> search(MultimailboxesSearchQuery expression, MailboxSession session, long limit) throws MailboxException { + return null; + } + + @Override + public List<MailboxAnnotation> getAnnotationsByKeysWithOneDepth(MailboxPath mailboxPath, MailboxSession session, + Set<MailboxAnnotationKey> keys) throws MailboxException { + return null; + } + + @Override + public List<MailboxAnnotation> getAnnotationsByKeysWithAllDepth(MailboxPath mailboxPath, MailboxSession session, + Set<MailboxAnnotationKey> keys) throws MailboxException { + return null; + } + + @Override + public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { + return false; + } + } +} + http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java index ffc37b0..b5f6964 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterTest.java @@ -29,7 +29,6 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.james.mailbox.MailboxManager; import org.apache.james.user.api.UsersRepositoryException; import org.apache.james.user.lib.mock.InMemoryUsersRepository; import org.junit.Before; @@ -43,8 +42,7 @@ public class UserProvisioningFilterTest { @Before public void setup() { usersRepository = new InMemoryUsersRepository(); - MailboxManager mailboxManager = mock(MailboxManager.class); - sut = new UserProvisioningFilter(usersRepository, mailboxManager); + sut = new UserProvisioningFilter(usersRepository); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/844efe2a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java index eb5ec5c..d375a09 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserProvisioningFilterThreadTest.java @@ -18,33 +18,10 @@ ****************************************************************/ package org.apache.james.jmap; -import java.util.EnumSet; -import java.util.List; -import java.util.Set; - -import org.apache.james.mailbox.MailboxListener; -import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MessageManager; -import org.apache.james.mailbox.exception.BadCredentialsException; -import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.mock.MockMailboxSession; -import org.apache.james.mailbox.model.MailboxACL.MailboxACLCommand; -import org.apache.james.mailbox.model.MailboxACL.MailboxACLEntryKey; -import org.apache.james.mailbox.model.MailboxACL.MailboxACLRight; -import org.apache.james.mailbox.model.MailboxACL.MailboxACLRights; -import org.apache.james.mailbox.model.MailboxAnnotation; -import org.apache.james.mailbox.model.MailboxAnnotationKey; -import org.apache.james.mailbox.model.MailboxId; -import org.apache.james.mailbox.model.MailboxMetaData; -import org.apache.james.mailbox.model.MailboxPath; -import org.apache.james.mailbox.model.MailboxQuery; -import org.apache.james.mailbox.model.MessageId; -import org.apache.james.mailbox.model.MessageRange; -import org.apache.james.mailbox.model.MultimailboxesSearchQuery; import org.apache.james.user.lib.mock.InMemoryUsersRepository; import org.junit.Test; -import org.slf4j.Logger; import com.google.testing.threadtester.AnnotatedTestRunner; import com.google.testing.threadtester.ThreadedAfter; @@ -57,14 +34,12 @@ public class UserProvisioningFilterThreadTest { private UserProvisioningFilter sut; private InMemoryUsersRepository usersRepository; private MailboxSession session; - private MailboxManager mailboxManager; @ThreadedBefore public void before() { usersRepository = new InMemoryUsersRepository(); session = new MockMailboxSession("username"); - mailboxManager = new FakeMailboxManager(session) ; - sut = new UserProvisioningFilter(usersRepository, mailboxManager); + sut = new UserProvisioningFilter(usersRepository); } @ThreadedMain @@ -87,185 +62,5 @@ public class UserProvisioningFilterThreadTest { AnnotatedTestRunner runner = new AnnotatedTestRunner(); runner.runTests(this.getClass(), UserProvisioningFilter.class); } - - private static class FakeMailboxManager implements MailboxManager { - private MailboxSession mailboxSession; - - public FakeMailboxManager(MailboxSession mailboxSession) { - this.mailboxSession = mailboxSession; - } - - @Override - public EnumSet<SearchCapabilities> getSupportedSearchCapabilities() { - return EnumSet.noneOf(SearchCapabilities.class); - } - - @Override - public void startProcessingRequest(MailboxSession session) { - } - - @Override - public void endProcessingRequest(MailboxSession session) { - } - - @Override - public void addListener(MailboxPath mailboxPath, MailboxListener listener, MailboxSession session) throws MailboxException { - } - - @Override - public void removeListener(MailboxPath mailboxPath, MailboxListener listner, MailboxSession session) throws MailboxException { - } - - @Override - public void addGlobalListener(MailboxListener listener, MailboxSession session) throws MailboxException { - } - - @Override - public void removeGlobalListener(MailboxListener listner, MailboxSession session) throws MailboxException { - } - - @Override - public char getDelimiter() { - return 0; - } - - @Override - public MessageManager getMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public MessageManager getMailbox(MailboxId mailboxId, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public void createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException { - } - - @Override - public void deleteMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { - } - - @Override - public void renameMailbox(MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { - } - - @Override - public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public List<MessageRange> copyMessages(MessageRange set, MailboxId from, MailboxId to, MailboxSession session) - throws MailboxException { - return null; - } - - @Override - public List<MessageRange> moveMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public List<MailboxMetaData> search(MailboxQuery expression, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public boolean mailboxExists(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { - return false; - } - - @Override - public MailboxSession createSystemSession(String userName, Logger log) throws BadCredentialsException, MailboxException { - return mailboxSession; - } - - @Override - public MailboxSession login(String userid, String passwd, Logger log) throws BadCredentialsException, MailboxException { - return null; - } - - @Override - public void logout(MailboxSession session, boolean force) throws MailboxException { - } - - @Override - public boolean hasRight(MailboxPath mailboxPath, MailboxACLRight right, MailboxSession session) throws MailboxException { - return false; - } - - @Override - public MailboxACLRights myRights(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public MailboxACLRights[] listRigths(MailboxPath mailboxPath, MailboxACLEntryKey identifier, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public void setRights(MailboxPath mailboxPath, MailboxACLCommand mailboxACLCommand, MailboxSession session) throws MailboxException { - } - - @Override - public List<MailboxPath> list(MailboxSession session) throws MailboxException { - return null; - } - - @Override - public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() { - return null; - } - - @Override - public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() { - return null; - } - - @Override - public List<MailboxAnnotation> getAllAnnotations(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { - return null; - } - - @Override - public List<MailboxAnnotation> getAnnotationsByKeys(MailboxPath mailboxPath, MailboxSession session, Set<MailboxAnnotationKey> keys) throws MailboxException { - return null; - } - - @Override - public void updateAnnotations(MailboxPath mailboxPath, MailboxSession session, List<MailboxAnnotation> mailboxAnnotations) throws MailboxException { - - } - - @Override - public boolean hasCapability(MailboxCapabilities capability) { - return false; - } - - @Override - public List<MessageId> search(MultimailboxesSearchQuery expression, MailboxSession session, long limit) throws MailboxException { - return null; - } - - @Override - public List<MailboxAnnotation> getAnnotationsByKeysWithOneDepth(MailboxPath mailboxPath, MailboxSession session, - Set<MailboxAnnotationKey> keys) throws MailboxException { - return null; - } - - @Override - public List<MailboxAnnotation> getAnnotationsByKeysWithAllDepth(MailboxPath mailboxPath, MailboxSession session, - Set<MailboxAnnotationKey> keys) throws MailboxException { - return null; - } - - @Override - public boolean hasChildren(MailboxPath mailboxPath, MailboxSession session) throws MailboxException { - return false; - } - } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
