/* * Copyright 1999-2006 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.dcache.ftp.client.test; import org.dcache.ftp.client.vanilla.Reply; import java.io.BufferedReader; import java.io.StringReader; import junit.framework.TestCase; import junit.framework.Test; import junit.framework.TestSuite; import junit.framework.AssertionFailedError; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** test Reply **/ public class ReplyTest extends TestCase { Logger logger = LoggerFactory.getLogger(ReplyTest.class); public static void main(String[] argv) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ReplyTest.class); } public ReplyTest(String name) { super(name); } public void testReply() { String lineSep = System.getProperty("line.separator"); testReply("230 User pafcio logged in.\r\n", 230, "User pafcio logged in.", false); testReply("200 Command okay.\r\n", 200, "Command okay.", false); testReply("123-First line\r\n" + " Second line\r\n" + " 234 A line beginning with numbers\r\n" + "123 The last line\r\n", 123, "First line" + lineSep + " Second line" + lineSep + " 234 A line beginning with numbers" + lineSep + "123 The last line", true); //superfluous characters after EOL //this is okay; Reply would normally read from stream // so it should not read more than it has to testReply("200 Command okay.\r\naaaa", 200, "Command okay.", false); parseBadReply(""); parseBadReply("\r\n"); parseBadReply("0"); parseBadReply("1 fds\r\n"); parseBadReply(" 1 fds\r\n"); parseBadReply("200p fds\r\n"); parseBadReply("2000 fds\r\n"); parseBadReply("345454"); parseBadReply("345454\r\n"); //no EOL before last line parseBadReply("123-First line\r\n" + " Second line\r\n" + " 234 A line beginning with numbers" + "123 The last line"); } //check if bad reply gets detected private void parseBadReply(String s) { logger.info("bad construction:" + s); boolean thrown = false; try { parseReply(s); } catch (AssertionFailedError e) { thrown = true; } if ( ! thrown) fail("A faulty reply was not detected."); } // fully test reply; check if input values match parsed values private void testReply(String uReplyString, int uCode, String uMessage, boolean uMultiline) { logger.info("testing object: " + uReplyString); int uClass = uCode / 100; try { Reply r = new Reply(new BufferedReader(new StringReader(uReplyString))); int rCode = r.getCode(); arrowQuote("code", rCode); assertTrue(rCode == uCode); int rClass = r.getCategory(); arrowQuote("class", rClass); assertTrue(rClass == uClass); String rMessage = r.getMessage(); arrowQuote("message", rMessage); assertTrue(rMessage.equals(uMessage)); assertTrue(r.isMultiline() == uMultiline); } catch (Exception e) { fail("Exception thrown: " + e.toString()); } } //only parse reply and see if an exception gets thrown private void parseReply(String uReplyString) { logger.debug("parsing: " + uReplyString); try { Reply r = new Reply(new BufferedReader(new StringReader(uReplyString))); } catch (Exception e) { fail("Exception thrown: " + e.toString()); } } private static void arrowQuote(String desc, String content) { //System.out.println(desc + " ->" + content + "<-\n"); } private static void arrowQuote(String desc, int content) { //System.out.println(desc + " ->" + content + "<-\n"); } }