001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.commons.net.pop3;
018
019 import junit.framework.TestCase;
020 import junit.framework.TestSuite;
021
022 import java.net.InetAddress;
023 import java.io.IOException;
024
025
026 /**
027 * @author <a href="mailto:commons-dev@apache.org">[Net]</a>
028 * @version $Id: POP3ClientTest.java 631313 2008-02-26 17:41:09Z niallp $
029 *
030 * The POP3* tests all presume the existence of the following parameters:
031 * mailserver: localhost (running on the default port 110)
032 * account: username=test; password=password
033 * account: username=alwaysempty; password=password.
034 * mail: At least four emails in the test account and zero emails
035 * in the alwaysempty account
036 *
037 * If this won't work for you, you can change these parameters in the
038 * TestSetupParameters class.
039 *
040 * The tests were originally run on a default installation of James.
041 * Your mileage may vary based on the POP3 server you run the tests against.
042 * Some servers are more standards-compliant than others.
043 */
044 public class POP3ClientTest extends TestCase
045 {
046 POP3Client p = null;
047
048 String user = TestSetupParameters.user;
049 String emptyUser = TestSetupParameters.emptyuser;
050 String password = TestSetupParameters.password;
051 String mailhost = TestSetupParameters.mailhost;
052
053 /**
054 *
055 */
056 public POP3ClientTest(String name)
057 {
058 super(name);
059 }
060
061 /**
062 * Method suite.
063 * @return TestSuite
064 */
065 public static TestSuite suite()
066 {
067 return (new TestSuite(POP3ClientTest.class));
068 }
069
070 private void reset() throws IOException
071 {
072 //Case where this is the first time reset is called
073 if (p == null)
074 {
075 //Do nothing
076 }
077 else if (p.isConnected())
078 {
079 p.disconnect();
080 }
081 p = null;
082 p = new POP3Client();
083 }
084
085 private void connect() throws Exception
086 {
087 p.connect(InetAddress.getByName(mailhost));
088 assertTrue(p.isConnected());
089 assertEquals(POP3.AUTHORIZATION_STATE, p.getState());
090 }
091
092 private void login() throws Exception
093 {
094 assertTrue(p.login(user, password));
095 assertEquals(POP3.TRANSACTION_STATE, p.getState());
096 }
097
098 /**
099 * Simple test to logon to a valid server using a valid
100 * user name and password.
101 */
102 public void testValidLoginWithNameAndPassword() throws Exception
103 {
104 reset();
105 connect();
106
107 //Try with a valid user
108 login();
109 }
110
111 /**
112 *
113 */
114 public void testInvalidLoginWithBadName() throws Exception
115 {
116 reset();
117 connect();
118
119 //Try with an invalid user that doesn't exist
120 assertFalse(p.login("badusername", password));
121 }
122
123 /**
124 *
125 */
126 public void testInvalidLoginWithBadPassword() throws Exception
127 {
128 reset();
129 connect();
130
131 //Try with a bad password
132 assertFalse(p.login(user, "badpassword"));
133 }
134
135 /**
136 * Test to try to run the login method from the
137 * disconnected, transaction and update states
138 */
139 public void testLoginFromWrongState() throws Exception
140 {
141 reset();
142
143 //Not currently connected, not in authorization state
144 //Try to login with good name/password
145 assertFalse(p.login(user, password));
146
147 //Now connect and set the state to 'transaction' and try again
148 connect();
149 p.setState(POP3.TRANSACTION_STATE);
150 assertFalse(p.login(user, password));
151 p.disconnect();
152
153 //Now connect and set the state to 'update' and try again
154 connect();
155 p.setState(POP3.UPDATE_STATE);
156 assertFalse(p.login(user, password));
157 p.disconnect();
158 }
159
160 /**
161 *
162 *
163 */
164 public void testLogoutFromAllStates() throws Exception
165 {
166 //From 'transaction' state
167 reset();
168 connect();
169 login();
170 assertTrue(p.logout());
171 assertEquals(POP3.UPDATE_STATE, p.getState());
172
173 //From 'update' state
174 reset();
175 connect();
176 login();
177 p.setState(POP3.UPDATE_STATE);
178 assertTrue(p.logout());
179 }
180 }