Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82bc1867 authored by cketti's avatar cketti
Browse files

Code style fixes

parent a2b545fc
Loading
Loading
Loading
Loading
+81 −107
Original line number Diff line number Diff line
package com.fsck.k9.mail.transport;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.AuthType;
import com.fsck.k9.mail.AuthenticationFailedException;
import com.fsck.k9.mail.CertificateValidationException;
import com.fsck.k9.mail.ConnectionSecurity;
import com.fsck.k9.mail.Message;
import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mail.ServerSettings;
import com.fsck.k9.mail.ServerSettings.Type;
import com.fsck.k9.mail.filter.Base64;
import com.fsck.k9.mail.internet.MimeMessage;
import com.fsck.k9.mail.ssl.TrustedSocketFactory;
@@ -16,30 +21,22 @@ import com.fsck.k9.mail.transport.mockServer.MockSmtpServer;
import com.fsck.k9.mail.transport.mockServer.TestMessage;
import com.fsck.k9.mailstore.BinaryMemoryBody;
import com.fsck.k9.testHelpers.TestTrustedSocketFactory;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;


@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 21)
public class SmtpTransportTest {

    private String host;
    private int port;
    private ConnectionSecurity connectionSecurity;
@@ -51,71 +48,24 @@ public class SmtpTransportTest {
    private StoreConfig storeConfig = mock(StoreConfig.class);
    private TrustedSocketFactory socketFactory;

    
    @Before
    public void before() {
        socketFactory = new TestTrustedSocketFactory();
        resetConnectionParameters();
    }

    private void resetConnectionParameters() {
        host = null;
        port = -1;
        username = null;
        password = null;
        authenticationType = null;
        clientCertificateAlias = null;
        connectionSecurity = null;
        extensions = new ArrayList<>();
    }

    private SmtpTransport startServerAndCreateSmtpTransport(MockSmtpServer server)
            throws IOException, MessagingException {
        server.start();
        host = server.getHost();
        port = server.getPort();
        String uri = SmtpTransport.createUri(new ServerSettings(
                ServerSettings.Type.SMTP, host, port, connectionSecurity, authenticationType,
                username, password, clientCertificateAlias));
        when(storeConfig.getTransportUri()).thenReturn(uri);
        return createSmtpTransport(storeConfig, socketFactory);
    }

    private SmtpTransport createSmtpTransport(
            StoreConfig storeConfig, TrustedSocketFactory socketFactory)
            throws MessagingException {
        return new SmtpTransport(storeConfig, socketFactory);
    }

    private void setupConnectAndPlainAuthentication(MockSmtpServer server) {
        username = "user";
        password = "password";
        authenticationType = AuthType.PLAIN;
        connectionSecurity = ConnectionSecurity.NONE;

        server.output("220 localhost Simple Mail Transfer Service Ready");
        server.expect("EHLO localhost");
        server.output("250-localhost Hello client.localhost");
        for (String extension: extensions) {
            server.output("250-"+extension);
        }
        server.output("250 AUTH LOGIN PLAIN CRAM-MD5");
        server.expect("AUTH PLAIN AHVzZXIAcGFzc3dvcmQ=");
        server.output("235 2.7.0 Authentication successful");
    }

    @Test
    public void SmtpTransport_withValidUri_canBeCreated() throws MessagingException {
    public void SmtpTransport_withValidUri_canBeCreated() throws Exception {
        StoreConfig storeConfig = mock(StoreConfig.class);
        when(storeConfig.getTransportUri()).thenReturn(
                "smtp://user:password:CRAM_MD5@server:123456");
        when(storeConfig.getTransportUri()).thenReturn("smtp://user:password:CRAM_MD5@server:123456");
        TrustedSocketFactory trustedSocketFactory = mock(TrustedSocketFactory.class);

        new SmtpTransport(storeConfig, trustedSocketFactory);
    }

    @Test(expected = MessagingException.class)
    public void SmtpTransport_withInvalidUri_throwsMessagingException()
            throws MessagingException {
    public void SmtpTransport_withInvalidUri_throwsMessagingException() throws Exception {
        StoreConfig storeConfig = mock(StoreConfig.class);
        when(storeConfig.getTransportUri()).thenReturn("smpt://");
        TrustedSocketFactory trustedSocketFactory = mock(TrustedSocketFactory.class);
@@ -124,8 +74,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityOrPasswordPlainAuth_connectsToServer_withoutLogin()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityOrPasswordPlainAuth_connectsToServer_withoutLogin() throws Exception {
        username = "user";
        authenticationType = AuthType.PLAIN;
        connectionSecurity = ConnectionSecurity.NONE;
@@ -144,8 +93,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityPlainAuth_connectsToServer()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityPlainAuth_connectsToServer() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.PLAIN;
@@ -167,8 +115,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityPlainAuth_usesLoginIfPlainUnavailable()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityPlainAuth_usesLoginIfPlainUnavailable() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.PLAIN;
@@ -194,8 +141,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityPlainAuth_withNeither_throwsException()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityPlainAuth_withNeither_throwsException() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.PLAIN;
@@ -212,8 +158,7 @@ public class SmtpTransportTest {
            transport.open();
            fail("Exception expected");
        } catch (MessagingException e) {
            assertEquals("Authentication methods SASL PLAIN and LOGIN are unavailable.",
                    e.getMessage());
            assertEquals("Authentication methods SASL PLAIN and LOGIN are unavailable.", e.getMessage());
        }

        server.verifyConnectionStillOpen();
@@ -221,8 +166,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityCramMd5Auth_connectsToServer()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityCramMd5Auth_connectsToServer() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.CRAM_MD5;
@@ -246,8 +190,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityCramMd5Auth_withNoSupport_throwsException()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityCramMd5Auth_withNoSupport_throwsException() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.CRAM_MD5;
@@ -264,8 +207,7 @@ public class SmtpTransportTest {
            transport.open();
            fail("Exception expected");
        } catch (MessagingException e) {
            assertEquals("Authentication method CRAM-MD5 is unavailable.",
                    e.getMessage());
            assertEquals("Authentication method CRAM-MD5 is unavailable.", e.getMessage());
        }

        server.verifyConnectionStillOpen();
@@ -273,8 +215,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityExternalAuth_connectsToServer()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityExternalAuth_connectsToServer() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.EXTERNAL;
@@ -296,8 +237,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityExternal_withNoSupport_throwsException()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityExternal_withNoSupport_throwsException() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.EXTERNAL;
@@ -320,9 +260,9 @@ public class SmtpTransportTest {
        server.verifyConnectionStillOpen();
        server.verifyInteractionCompleted();
    }

    @Test
    public void open_withNoSecurityAutomatic_connectsToServerWithCramMD5IfSupported()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityAutomatic_connectsToServerWithCramMD5IfSupported() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.AUTOMATIC;
@@ -346,8 +286,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_withNoSecurityAutomatic_withCramMD5Unsupported_throwsException()
            throws MessagingException, IOException, InterruptedException {
    public void open_withNoSecurityAutomatic_withCramMD5Unsupported_throwsException() throws Exception {
        username = "user";
        password = "password";
        authenticationType = AuthType.AUTOMATIC;
@@ -373,8 +312,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void open_triesHELO_whenServerDoesntSupportEHLO()
            throws MessagingException, IOException, InterruptedException {
    public void open_triesHELO_whenServerDoesntSupportEHLO() throws Exception {
        username = "user";
        authenticationType = AuthType.PLAIN;
        connectionSecurity = ConnectionSecurity.NONE;
@@ -394,9 +332,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void sendMessage_withNoAddressToSendTo_doesntOpenConnection()
            throws MessagingException, IOException, InterruptedException {

    public void sendMessage_withNoAddressToSendTo_doesntOpenConnection() throws Exception {
        MimeMessage message = new MimeMessage();

        MockSmtpServer server = new MockSmtpServer();
@@ -409,9 +345,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void sendMessage_withToAddressToSendTo_opensConnection()
            throws MessagingException, IOException, InterruptedException {

    public void sendMessage_withToAddressToSendTo_opensConnection() throws Exception {
        TestMessage message = new TestMessage();
        message.setFrom(new Address("user@localhost"));
        message.setRecipients(Message.RecipientType.TO, new Address[] { new Address("user2@localhost") });
@@ -430,14 +364,12 @@ public class SmtpTransportTest {
        server.expect("QUIT");
        server.output("221 BYE");
        

        SmtpTransport transport = startServerAndCreateSmtpTransport(server);
        transport.sendMessage(message);
    }

    @Test
    public void sendMessage_with8BitEncoding_usesEncoding()
            throws MessagingException, IOException, InterruptedException {
    public void sendMessage_with8BitEncoding_usesEncoding() throws Exception {
        extensions.add("8BITMIME");
        TestMessage message = new TestMessage();
        message.setFrom(new Address("user@localhost"));
@@ -457,14 +389,12 @@ public class SmtpTransportTest {
        server.expect("QUIT");
        server.output("221 BYE");
        

        SmtpTransport transport = startServerAndCreateSmtpTransport(server);
        transport.sendMessage(message);
    }

    @Test
    public void sendMessage_withMessageTooLarge_throwsException()
            throws MessagingException, IOException, InterruptedException {
    public void sendMessage_withMessageTooLarge_throwsException() throws Exception {
        extensions.add("SIZE 1000");
        TestMessage message = new TestMessage();
        message.setFrom(new Address("user@localhost"));
@@ -487,8 +417,7 @@ public class SmtpTransportTest {
    }

    @Test
    public void sendMessage_withNegativeReply_throwsException()
            throws MessagingException, IOException, InterruptedException {
    public void sendMessage_withNegativeReply_throwsException() throws Exception {
        TestMessage message = new TestMessage();
        message.setFrom(new Address("user@localhost"));
        message.setRecipients(Message.RecipientType.TO, new Address[] { new Address("user2@localhost") });
@@ -518,4 +447,49 @@ public class SmtpTransportTest {
            assertEquals("4.7.0 Temporary system problem", e.getReplyText());
        }
    }

    private void resetConnectionParameters() {
        host = null;
        port = -1;
        username = null;
        password = null;
        authenticationType = null;
        clientCertificateAlias = null;
        connectionSecurity = null;
        extensions = new ArrayList<>();
    }

    private SmtpTransport startServerAndCreateSmtpTransport(MockSmtpServer server) throws IOException,
            MessagingException {
        server.start();
        host = server.getHost();
        port = server.getPort();
        ServerSettings serverSettings = new ServerSettings(Type.SMTP, host, port, connectionSecurity,
                authenticationType, username, password, clientCertificateAlias);
        String uri = SmtpTransport.createUri(serverSettings);
        when(storeConfig.getTransportUri()).thenReturn(uri);
        return createSmtpTransport(storeConfig, socketFactory);
    }

    private SmtpTransport createSmtpTransport(StoreConfig storeConfig, TrustedSocketFactory socketFactory)
            throws MessagingException {
        return new SmtpTransport(storeConfig, socketFactory);
    }

    private void setupConnectAndPlainAuthentication(MockSmtpServer server) {
        username = "user";
        password = "password";
        authenticationType = AuthType.PLAIN;
        connectionSecurity = ConnectionSecurity.NONE;

        server.output("220 localhost Simple Mail Transfer Service Ready");
        server.expect("EHLO localhost");
        server.output("250-localhost Hello client.localhost");
        for (String extension : extensions) {
            server.output("250-" + extension);
        }
        server.output("250 AUTH LOGIN PLAIN CRAM-MD5");
        server.expect("AUTH PLAIN AHVzZXIAcGFzc3dvcmQ=");
        server.output("235 2.7.0 Authentication successful");
    }
}
+8 −9
Original line number Diff line number Diff line
package com.fsck.k9.mail.transport.mockServer;


import android.annotation.SuppressLint;

import com.jcraft.jzlib.JZlib;
import com.jcraft.jzlib.ZOutputStream;

import org.apache.commons.io.IOUtils;

import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
@@ -28,14 +21,18 @@ import java.util.concurrent.TimeUnit;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;

import android.annotation.SuppressLint;

import com.jcraft.jzlib.JZlib;
import com.jcraft.jzlib.ZOutputStream;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

import okio.BufferedSink;
import okio.BufferedSource;
import okio.Okio;
import org.apache.commons.io.IOUtils;


@SuppressLint("NewApi")
@@ -185,10 +182,12 @@ public class MockSmtpServer {

    public interface Logger {
        void log(String message);

        void log(String format, Object... args);
    }

    private interface SmtpInteraction {}
    private interface SmtpInteraction {
    }

    private static class ExpectedCommand implements SmtpInteraction {
        private final String command;
+2 −9
Original line number Diff line number Diff line
package com.fsck.k9.mail.transport.mockServer;


import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.Flag;
import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mail.internet.MimeMessage;

public class TestMessage extends MimeMessage {

public class TestMessage extends MimeMessage {
    private long mId;
    private int mAttachmentCount;
    private String mSubject;

    private String mPreview = "";

    private long mThreadId;
    private long mRootId;
    private long messagePartId;
    private String mimeType;


    public long getMessagePartId() {
        return messagePartId;
    }
@@ -72,7 +67,6 @@ public class TestMessage extends MimeMessage {
        this.mFrom = new Address[] { from };
    }


    @Override
    public void setReplyTo(Address[] replyTo) {
        if (replyTo == null || replyTo.length == 0) {
@@ -82,7 +76,6 @@ public class TestMessage extends MimeMessage {
        }
    }


    /*
     * For performance reasons, we add headers instead of setting them (see super implementation)
     * which removes (expensive) them before adding them
+3 −3
Original line number Diff line number Diff line
package com.fsck.k9.testHelpers;

import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mail.ssl.TrustedSocketFactory;
import com.fsck.k9.mail.store.imap.ImapConnectionTest;

import java.io.IOException;
import java.net.Socket;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;

import com.fsck.k9.mail.MessagingException;
import com.fsck.k9.mail.ssl.TrustedSocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;


public class TestTrustedSocketFactory implements TrustedSocketFactory {
    @Override
    public Socket createSocket(Socket socket, String host, int port, String clientCertificateAlias)