Code style fixes
This commit is contained in:
parent
a2b545fc39
commit
82bc18673c
4 changed files with 94 additions and 128 deletions
|
@ -1,13 +1,18 @@
|
|||
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,12 +345,10 @@ 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")});
|
||||
message.setRecipients(Message.RecipientType.TO, new Address[] { new Address("user2@localhost") });
|
||||
|
||||
MockSmtpServer server = new MockSmtpServer();
|
||||
setupConnectAndPlainAuthentication(server);
|
||||
|
@ -429,19 +363,17 @@ public class SmtpTransportTest {
|
|||
server.output("250 OK: queued as 12345");
|
||||
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"));
|
||||
message.setRecipients(Message.RecipientType.TO, new Address[]{new Address("user2@localhost")});
|
||||
message.setRecipients(Message.RecipientType.TO, new Address[] { new Address("user2@localhost") });
|
||||
|
||||
MockSmtpServer server = new MockSmtpServer();
|
||||
setupConnectAndPlainAuthentication(server);
|
||||
|
@ -456,19 +388,17 @@ public class SmtpTransportTest {
|
|||
server.output("250 OK: queued as 12345");
|
||||
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"));
|
||||
message.setRecipients(Message.RecipientType.TO, new Address[]{new Address("user2@localhost")});
|
||||
message.setRecipients(Message.RecipientType.TO, new Address[] { new Address("user2@localhost") });
|
||||
message.setAttachmentCount(1);
|
||||
message.setBody(new BinaryMemoryBody(new byte[1001], "US-ASCII"));
|
||||
|
||||
|
@ -487,11 +417,10 @@ 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")});
|
||||
message.setRecipients(Message.RecipientType.TO, new Address[] { new Address("user2@localhost") });
|
||||
|
||||
MockSmtpServer server = new MockSmtpServer();
|
||||
setupConnectAndPlainAuthentication(server);
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,6 @@
|
|||
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;
|
||||
|
|
|
@ -1,28 +1,23 @@
|
|||
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
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
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)
|
||||
|
|
Loading…
Reference in a new issue