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 import java.io.Reader; 022 023 /** 024 * @author <a href="mailto:commons-dev@apache.org">[Net]</a> 025 * @version $Id: POP3ConstructorTest.java 631313 2008-02-26 17:41:09Z niallp $ 026 * 027 * The POP3* tests all presume the existence of the following parameters: 028 * mailserver: localhost (running on the default port 110) 029 * account: username=test; password=password 030 * account: username=alwaysempty; password=password. 031 * mail: At least four emails in the test account and zero emails 032 * in the alwaysempty account 033 * 034 * If this won't work for you, you can change these parameters in the 035 * TestSetupParameters class. 036 * 037 * The tests were originally run on a default installation of James. 038 * Your mileage may vary based on the POP3 server you run the tests against. 039 * Some servers are more standards-compliant than others. 040 */ 041 public class POP3ConstructorTest extends TestCase 042 { 043 String user = TestSetupParameters.user; 044 String emptyUser = TestSetupParameters.emptyuser; 045 String password = TestSetupParameters.password; 046 String mailhost = TestSetupParameters.mailhost; 047 048 /** 049 * 050 */ 051 public POP3ConstructorTest(String name) 052 { 053 super(name); 054 } 055 056 /** 057 * Method suite. 058 * @return TestSuite 059 */ 060 public static TestSuite suite() 061 { 062 return (new TestSuite(POP3ConstructorTest.class)); 063 } 064 065 066 /** 067 * This test will ensure that the constants are not inadvertently changed. 068 * If the constants are changed in org.apache.commons.net.pop3 for some 069 * reason, this test will have to be updated. 070 */ 071 public void testConstants() 072 { 073 //From POP3 074 assertEquals(110, POP3.DEFAULT_PORT); 075 assertEquals(-1, POP3.DISCONNECTED_STATE); 076 assertEquals(0, POP3.AUTHORIZATION_STATE); 077 assertEquals(1, POP3.TRANSACTION_STATE); 078 assertEquals(2, POP3.UPDATE_STATE); 079 080 //From POP3Command 081 assertEquals(0, POP3Command.USER); 082 assertEquals(1, POP3Command.PASS); 083 assertEquals(2, POP3Command.QUIT); 084 assertEquals(3, POP3Command.STAT); 085 assertEquals(4, POP3Command.LIST); 086 assertEquals(5, POP3Command.RETR); 087 assertEquals(6, POP3Command.DELE); 088 assertEquals(7, POP3Command.NOOP); 089 assertEquals(8, POP3Command.RSET); 090 assertEquals(9, POP3Command.APOP); 091 assertEquals(10, POP3Command.TOP); 092 assertEquals(11, POP3Command.UIDL); 093 } 094 095 /** 096 * Test the default constructor 097 * 098 */ 099 public void testPOP3DefaultConstructor() 100 { 101 POP3 pop = new POP3(); 102 103 assertEquals(110, pop.getDefaultPort()); 104 assertEquals(POP3.DISCONNECTED_STATE, pop.getState()); 105 assertNull(pop._reader); 106 assertNotNull(pop._replyLines); 107 } 108 109 /** 110 * Test the default constructor 111 * 112 */ 113 public void testPOP3ClientStateTransition() throws Exception 114 { 115 POP3Client pop = new POP3Client(); 116 117 //Initial state 118 assertEquals(110, pop.getDefaultPort()); 119 assertEquals(POP3.DISCONNECTED_STATE, pop.getState()); 120 assertNull(pop._reader); 121 assertNotNull(pop._replyLines); 122 123 //Now connect 124 pop.connect(mailhost); 125 assertEquals(POP3.AUTHORIZATION_STATE, pop.getState()); 126 127 //Now authenticate 128 pop.login(user, password); 129 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 130 131 //Now do a series of commands and make sure the state stays as it should 132 pop.noop(); 133 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 134 pop.status(); 135 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 136 137 //Make sure we have at least one message to test 138 POP3MessageInfo[] msg = pop.listMessages(); 139 140 if (msg.length > 0) 141 { 142 pop.deleteMessage(1); 143 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 144 145 pop.reset(); 146 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 147 148 pop.listMessage(1); 149 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 150 151 pop.listMessages(); 152 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 153 154 pop.listUniqueIdentifier(1); 155 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 156 157 pop.listUniqueIdentifiers(); 158 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 159 160 Reader r = pop.retrieveMessage(1); 161 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 162 163 //Add some sleep here to handle network latency 164 while(!r.ready()) 165 { 166 Thread.sleep(10); 167 } 168 r.close(); 169 r = null; 170 171 r = pop.retrieveMessageTop(1, 10); 172 assertEquals(POP3.TRANSACTION_STATE, pop.getState()); 173 174 //Add some sleep here to handle network latency 175 while(!r.ready()) 176 { 177 Thread.sleep(10); 178 } 179 r.close(); 180 r = null; 181 182 } 183 184 //Now logout 185 pop.logout(); 186 assertEquals(POP3.UPDATE_STATE, pop.getState()); 187 } 188 }