diff options
Diffstat (limited to 'gerrit-server/src/test/java/com/google/gerrit/testutil/FakeEmailSender.java')
-rw-r--r-- | gerrit-server/src/test/java/com/google/gerrit/testutil/FakeEmailSender.java | 172 |
1 files changed, 0 insertions, 172 deletions
diff --git a/gerrit-server/src/test/java/com/google/gerrit/testutil/FakeEmailSender.java b/gerrit-server/src/test/java/com/google/gerrit/testutil/FakeEmailSender.java deleted file mode 100644 index 427e3ef643..0000000000 --- a/gerrit-server/src/test/java/com/google/gerrit/testutil/FakeEmailSender.java +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright (C) 2015 The Android Open Source Project -// -// Licensed 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 com.google.gerrit.testutil; - -import static java.util.stream.Collectors.toList; - -import com.google.auto.value.AutoValue; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.gerrit.common.Nullable; -import com.google.gerrit.common.errors.EmailException; -import com.google.gerrit.server.git.WorkQueue; -import com.google.gerrit.server.mail.Address; -import com.google.gerrit.server.mail.send.EmailHeader; -import com.google.gerrit.server.mail.send.EmailSender; -import com.google.inject.AbstractModule; -import com.google.inject.Inject; -import com.google.inject.Singleton; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Email sender implementation that records messages in memory. - * - * <p>This class is mostly threadsafe. The only exception is that not all {@link EmailHeader} - * subclasses are immutable. In particular, if a caller holds a reference to an {@code AddressList} - * and mutates it after sending, the message returned by {@link #getMessages()} may or may not - * reflect mutations. - */ -@Singleton -public class FakeEmailSender implements EmailSender { - private static final Logger log = LoggerFactory.getLogger(FakeEmailSender.class); - - public static class Module extends AbstractModule { - @Override - public void configure() { - bind(EmailSender.class).to(FakeEmailSender.class); - } - } - - @AutoValue - public abstract static class Message { - private static Message create( - Address from, - Collection<Address> rcpt, - Map<String, EmailHeader> headers, - String body, - String htmlBody) { - return new AutoValue_FakeEmailSender_Message( - from, ImmutableList.copyOf(rcpt), ImmutableMap.copyOf(headers), body, htmlBody); - } - - public abstract Address from(); - - public abstract ImmutableList<Address> rcpt(); - - public abstract ImmutableMap<String, EmailHeader> headers(); - - public abstract String body(); - - @Nullable - public abstract String htmlBody(); - } - - private final WorkQueue workQueue; - private final List<Message> messages; - private int messagesRead; - - @Inject - FakeEmailSender(WorkQueue workQueue) { - this.workQueue = workQueue; - messages = Collections.synchronizedList(new ArrayList<Message>()); - messagesRead = 0; - } - - @Override - public boolean isEnabled() { - return true; - } - - @Override - public boolean canEmail(String address) { - return true; - } - - @Override - public void send( - Address from, Collection<Address> rcpt, Map<String, EmailHeader> headers, String body) - throws EmailException { - send(from, rcpt, headers, body, null); - } - - @Override - public void send( - Address from, - Collection<Address> rcpt, - Map<String, EmailHeader> headers, - String body, - String htmlBody) - throws EmailException { - messages.add(Message.create(from, rcpt, headers, body, htmlBody)); - } - - public void clear() { - waitForEmails(); - synchronized (messages) { - messages.clear(); - messagesRead = 0; - } - } - - public synchronized @Nullable Message peekMessage() { - if (messagesRead >= messages.size()) { - return null; - } - return messages.get(messagesRead); - } - - public synchronized @Nullable Message nextMessage() { - Message msg = peekMessage(); - messagesRead++; - return msg; - } - - public ImmutableList<Message> getMessages() { - waitForEmails(); - synchronized (messages) { - return ImmutableList.copyOf(messages); - } - } - - public List<Message> getMessages(String changeId, String type) { - final String idFooter = "\nGerrit-Change-Id: " + changeId + "\n"; - final String typeFooter = "\nGerrit-MessageType: " + type + "\n"; - return getMessages().stream() - .filter(in -> in.body().contains(idFooter) && in.body().contains(typeFooter)) - .collect(toList()); - } - - private void waitForEmails() { - // TODO(dborowitz): This is brittle; consider forcing emails to use - // a single thread in tests (tricky because most callers just use the - // default executor). - for (WorkQueue.Task<?> task : workQueue.getTasks()) { - if (task.toString().contains("send-email")) { - try { - task.get(); - } catch (ExecutionException | InterruptedException e) { - log.warn("error finishing email task", e); - } - } - } - } -} |