| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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.apache.commons.net.ftp.parser; |
| |
| import java.text.SimpleDateFormat; |
| import java.util.Calendar; |
| |
| import junit.framework.TestCase; |
| |
| import org.apache.commons.net.ftp.FTPClientConfig; |
| import org.apache.commons.net.ftp.FTPFile; |
| |
| /** |
| * This is a simple TestCase that tests entry parsing using the new FTPClientConfig |
| * mechanism. The normal FTPClient cannot handle the different date formats in these |
| * entries, however using a configurable format, we can handle it easily. |
| * |
| * The original system presenting this issue was an AIX system - see bug #27437 for details. |
| * |
| * @version $Id$ |
| */ |
| public class FTPConfigEntryParserTest extends TestCase { |
| |
| private SimpleDateFormat df = new SimpleDateFormat(); |
| |
| public void testParseFieldsOnAIX() { |
| |
| // Set a date format for this server type |
| FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX); |
| config.setDefaultDateFormatStr("dd MMM HH:mm"); |
| |
| UnixFTPEntryParser parser = new UnixFTPEntryParser(); |
| parser.configure(config); |
| |
| FTPFile f = parser.parseFTPEntry("-rw-r----- 1 ravensm sca 814 02 Mar 16:27 ZMIR2.m"); |
| |
| assertNotNull("Could not parse entry.", f); |
| assertFalse("Is not a directory.", f.isDirectory()); |
| |
| assertTrue("Should have user read permission.", f.hasPermission( |
| FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION)); |
| assertTrue("Should have user write permission.", f.hasPermission( |
| FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION)); |
| assertFalse("Should NOT have user execute permission.", f |
| .hasPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION)); |
| assertTrue("Should have group read permission.", f.hasPermission( |
| FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION)); |
| assertFalse("Should NOT have group write permission.", f |
| .hasPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION)); |
| assertFalse("Should NOT have group execute permission.", |
| f.hasPermission(FTPFile.GROUP_ACCESS, |
| FTPFile.EXECUTE_PERMISSION)); |
| assertFalse("Should NOT have world read permission.", f.hasPermission( |
| FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION)); |
| assertFalse("Should NOT have world write permission.", f |
| .hasPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION)); |
| assertFalse("Should NOT have world execute permission.", |
| f.hasPermission(FTPFile.WORLD_ACCESS, |
| FTPFile.EXECUTE_PERMISSION)); |
| |
| assertEquals(1, f.getHardLinkCount()); |
| |
| assertEquals("ravensm", f.getUser()); |
| assertEquals("sca", f.getGroup()); |
| |
| assertEquals("ZMIR2.m", f.getName()); |
| assertEquals(814, f.getSize()); |
| |
| Calendar cal = Calendar.getInstance(); |
| |
| cal.set(Calendar.MONTH, Calendar.MARCH); |
| cal.set(Calendar.DATE, 2); |
| cal.set(Calendar.HOUR_OF_DAY, 16); |
| cal.set(Calendar.MINUTE, 27); |
| cal.set(Calendar.SECOND, 0); |
| |
| // With no year specified, it defaults to 1970 |
| // TODO this is probably a bug - it should default to the current year |
| cal.set(Calendar.YEAR, 1970); |
| |
| assertEquals(df.format(cal.getTime()), df.format(f.getTimestamp() |
| .getTime())); |
| } |
| |
| /** |
| * This is a new format reported on the mailing lists. Parsing this kind of |
| * entry necessitated changing the regex in the parser. |
| * |
| */ |
| public void testParseEntryWithSymlink() { |
| |
| FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX); |
| config.setDefaultDateFormatStr("yyyy-MM-dd HH:mm"); |
| |
| UnixFTPEntryParser parser = new UnixFTPEntryParser(); |
| parser.configure(config); |
| |
| FTPFile f = parser.parseFTPEntry("lrwxrwxrwx 1 neeme neeme 23 2005-03-02 18:06 macros"); |
| |
| assertNotNull("Could not parse entry.", f); |
| assertFalse("Is not a directory.", f.isDirectory()); |
| assertTrue("Is a symbolic link", f.isSymbolicLink()); |
| |
| assertTrue("Should have user read permission.", f.hasPermission( |
| FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION)); |
| assertTrue("Should have user write permission.", f.hasPermission( |
| FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION)); |
| assertTrue("Should have user execute permission.", f |
| .hasPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION)); |
| assertTrue("Should have group read permission.", f.hasPermission( |
| FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION)); |
| assertTrue("Should have group write permission.", f |
| .hasPermission(FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION)); |
| assertTrue("Should have group execute permission.", |
| f.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION)); |
| assertTrue("Should have world read permission.", f.hasPermission( |
| FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION)); |
| assertTrue("Should have world write permission.", f |
| .hasPermission(FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION)); |
| assertTrue("Should have world execute permission.", |
| f.hasPermission(FTPFile.WORLD_ACCESS, FTPFile.EXECUTE_PERMISSION)); |
| |
| assertEquals(1, f.getHardLinkCount()); |
| |
| assertEquals("neeme", f.getUser()); |
| assertEquals("neeme", f.getGroup()); |
| |
| assertEquals("macros", f.getName()); |
| assertEquals(23, f.getSize()); |
| |
| Calendar cal = Calendar.getInstance(); |
| |
| cal.set(Calendar.MONTH, Calendar.MARCH); |
| cal.set(Calendar.DATE, 2); |
| cal.set(Calendar.HOUR_OF_DAY, 18); |
| cal.set(Calendar.MINUTE, 06); |
| cal.set(Calendar.SECOND, 0); |
| cal.set(Calendar.YEAR, 2005); |
| |
| assertEquals(df.format(cal.getTime()), df.format(f.getTimestamp() |
| .getTime())); |
| |
| } |
| |
| } |