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.ftp.parser; 018 019 import java.text.SimpleDateFormat; 020 import java.util.Calendar; 021 022 import junit.framework.TestCase; 023 024 import org.apache.commons.net.ftp.FTPClientConfig; 025 import org.apache.commons.net.ftp.FTPFile; 026 027 /** 028 * This is a simple TestCase that tests entry parsing using the new FTPClientConfig 029 * mechanism. The normal FTPClient cannot handle the different date formats in these 030 * entries, however using a configurable format, we can handle it easily. 031 * 032 * The original system presenting this issue was an AIX system - see bug #27437 for details. 033 * 034 * @version $Id$ 035 */ 036 public class FTPConfigEntryParserTest extends TestCase { 037 038 private SimpleDateFormat df = new SimpleDateFormat(); 039 040 public void testParseFieldsOnAIX() { 041 042 // Set a date format for this server type 043 FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX); 044 config.setDefaultDateFormatStr("dd MMM HH:mm"); 045 046 UnixFTPEntryParser parser = new UnixFTPEntryParser(); 047 parser.configure(config); 048 049 FTPFile f = parser.parseFTPEntry("-rw-r----- 1 ravensm sca 814 02 Mar 16:27 ZMIR2.m"); 050 051 assertNotNull("Could not parse entry.", f); 052 assertFalse("Is not a directory.", f.isDirectory()); 053 054 assertTrue("Should have user read permission.", f.hasPermission( 055 FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION)); 056 assertTrue("Should have user write permission.", f.hasPermission( 057 FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION)); 058 assertFalse("Should NOT have user execute permission.", f 059 .hasPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION)); 060 assertTrue("Should have group read permission.", f.hasPermission( 061 FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION)); 062 assertFalse("Should NOT have group write permission.", f 063 .hasPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION)); 064 assertFalse("Should NOT have group execute permission.", 065 f.hasPermission(FTPFile.GROUP_ACCESS, 066 FTPFile.EXECUTE_PERMISSION)); 067 assertFalse("Should NOT have world read permission.", f.hasPermission( 068 FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION)); 069 assertFalse("Should NOT have world write permission.", f 070 .hasPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION)); 071 assertFalse("Should NOT have world execute permission.", 072 f.hasPermission(FTPFile.WORLD_ACCESS, 073 FTPFile.EXECUTE_PERMISSION)); 074 075 assertEquals(1, f.getHardLinkCount()); 076 077 assertEquals("ravensm", f.getUser()); 078 assertEquals("sca", f.getGroup()); 079 080 assertEquals("ZMIR2.m", f.getName()); 081 assertEquals(814, f.getSize()); 082 083 Calendar cal = Calendar.getInstance(); 084 085 cal.set(Calendar.MONTH, Calendar.MARCH); 086 cal.set(Calendar.DATE, 2); 087 cal.set(Calendar.HOUR_OF_DAY, 16); 088 cal.set(Calendar.MINUTE, 27); 089 cal.set(Calendar.SECOND, 0); 090 091 // With no year specified, it defaults to 1970 092 // TODO this is probably a bug - it should default to the current year 093 cal.set(Calendar.YEAR, 1970); 094 095 assertEquals(df.format(cal.getTime()), df.format(f.getTimestamp() 096 .getTime())); 097 } 098 099 /** 100 * This is a new format reported on the mailing lists. Parsing this kind of 101 * entry necessitated changing the regex in the parser. 102 * 103 */ 104 public void testParseEntryWithSymlink() { 105 106 FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX); 107 config.setDefaultDateFormatStr("yyyy-MM-dd HH:mm"); 108 109 UnixFTPEntryParser parser = new UnixFTPEntryParser(); 110 parser.configure(config); 111 112 FTPFile f = parser.parseFTPEntry("lrwxrwxrwx 1 neeme neeme 23 2005-03-02 18:06 macros"); 113 114 assertNotNull("Could not parse entry.", f); 115 assertFalse("Is not a directory.", f.isDirectory()); 116 assertTrue("Is a symbolic link", f.isSymbolicLink()); 117 118 assertTrue("Should have user read permission.", f.hasPermission( 119 FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION)); 120 assertTrue("Should have user write permission.", f.hasPermission( 121 FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION)); 122 assertTrue("Should have user execute permission.", f 123 .hasPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION)); 124 assertTrue("Should have group read permission.", f.hasPermission( 125 FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION)); 126 assertTrue("Should have group write permission.", f 127 .hasPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION)); 128 assertTrue("Should have group execute permission.", 129 f.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION)); 130 assertTrue("Should have world read permission.", f.hasPermission( 131 FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION)); 132 assertTrue("Should have world write permission.", f 133 .hasPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION)); 134 assertTrue("Should have world execute permission.", 135 f.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.EXECUTE_PERMISSION)); 136 137 assertEquals(1, f.getHardLinkCount()); 138 139 assertEquals("neeme", f.getUser()); 140 assertEquals("neeme", f.getGroup()); 141 142 assertEquals("macros", f.getName()); 143 assertEquals(23, f.getSize()); 144 145 Calendar cal = Calendar.getInstance(); 146 147 cal.set(Calendar.MONTH, Calendar.MARCH); 148 cal.set(Calendar.DATE, 2); 149 cal.set(Calendar.HOUR_OF_DAY, 18); 150 cal.set(Calendar.MINUTE, 06); 151 cal.set(Calendar.SECOND, 0); 152 cal.set(Calendar.YEAR, 2005); 153 154 assertEquals(df.format(cal.getTime()), df.format(f.getTimestamp() 155 .getTime())); 156 157 } 158 159 }