k-9/k9mail/src/androidTest/java/com/fsck/k9/mail/store/imap/ImapConnectionTest.java

161 lines
4.3 KiB
Java

package com.fsck.k9.mail.store.imap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.fsck.k9.endtoend.framework.StubMailServer;
import com.fsck.k9.endtoend.framework.UserForImap;
import com.fsck.k9.mail.AuthType;
import com.fsck.k9.mail.AuthenticationFailedException;
import com.fsck.k9.mail.ConnectionSecurity;
import junit.framework.TestCase;
import static org.junit.Assert.assertArrayEquals;
public class ImapConnectionTest extends TestCase {
private StubMailServer stubMailServer;
private ImapConnection connection;
private TestImapSettings settings = new TestImapSettings(UserForImap.TEST_USER);
@Override
public void setUp() throws Exception {
super.setUp();
stubMailServer = new StubMailServer();
connection = new ImapConnection(settings, null,
null);
}
@Override
public void tearDown() throws Exception {
super.tearDown();
stubMailServer.stop();
}
public void testOpenConnectionWithWrongCredentials() throws Exception {
connection = new ImapConnection(new TestImapSettings("wrong", "password"), null, null);
try {
connection.open();
fail("expected exception");
} catch (AuthenticationFailedException e) {
assertTrue(e.getMessage().contains("Invalid login/password"));
assertFalse(connection.isOpen());
}
}
public void testOpenConnection() throws Exception {
connection.open();
assertTrue(connection.isOpen());
}
public void testOpenAndCloseConnection() throws Exception {
connection.open();
connection.close();
assertFalse(connection.isOpen());
}
public void testCapabilities() throws Exception {
connection.open();
List<String> capabilities = new ArrayList<String>(connection.getCapabilities());
Collections.sort(capabilities);
assertArrayEquals(new String[] { "IMAP4REV1", "LITERAL+", "QUOTA" }, capabilities.toArray());
}
public void testPathPrefixGetsSetCorrectly() throws Exception {
connection.open();
assertEquals("", settings.getPathPrefix());
}
public void testPathDelimiterGetsParsedCorrectly() throws Exception {
connection.open();
assertEquals(".", settings.getPathDelimiter());
}
private class TestImapSettings implements ImapSettings {
private String pathPrefix;
private String pathDelimiter;
private String username;
private String password;
public TestImapSettings(UserForImap userForImap) {
this(userForImap.loginUsername, userForImap.password);
}
public TestImapSettings(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public String getHost() {
return stubMailServer.getImapBindAddress();
}
@Override
public int getPort() {
return stubMailServer.getImapPort();
}
@Override
public ConnectionSecurity getConnectionSecurity() {
return ConnectionSecurity.NONE;
}
@Override
public AuthType getAuthType() {
return AuthType.PLAIN;
}
@Override
public String getUsername() {
return username;
}
@Override
public String getPassword() {
return password;
}
@Override
public String getClientCertificateAlias() {
return null;
}
@Override
public boolean useCompression(int type) {
return false;
}
@Override
public String getPathPrefix() {
return pathPrefix;
}
@Override
public void setPathPrefix(String prefix) {
pathPrefix = prefix;
}
@Override
public String getPathDelimiter() {
return pathDelimiter;
}
@Override
public void setPathDelimiter(String delimiter) {
pathDelimiter = delimiter;
}
@Override
public String getCombinedPrefix() {
return null;
}
@Override
public void setCombinedPrefix(String prefix) {
}
}
}