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.util.Calendar; 020 021 import junit.framework.TestSuite; 022 import org.apache.commons.net.ftp.FTPFile; 023 import org.apache.commons.net.ftp.FTPFileEntryParser; 024 025 /** 026 * @author <a href="mailto:scohen@apache.org">Steve Cohen</a> 027 * @version $Id: NTFTPEntryParserTest.java 629276 2008-02-19 23:31:25Z rwinston $ 028 */ 029 public class NTFTPEntryParserTest extends CompositeFTPParseTestFramework 030 { 031 032 private static final String [][] goodsamples = { 033 { 034 "05-26-95 10:57AM 143712 $LDR$", 035 "05-20-97 03:31PM 681 .bash_history", 036 "12-05-96 05:03PM <DIR> absoft2", 037 "11-14-97 04:21PM 953 AUDITOR3.INI", 038 "05-22-97 08:08AM 828 AUTOEXEC.BAK", 039 "01-22-98 01:52PM 795 AUTOEXEC.BAT", 040 "05-13-97 01:46PM 828 AUTOEXEC.DOS", 041 "12-03-96 06:38AM 403 AUTOTOOL.LOG", 042 "12-03-96 06:38AM <DIR> 123xyz", 043 "01-20-97 03:48PM <DIR> bin", 044 "05-26-1995 10:57AM 143712 $LDR$", 045 }, 046 { 047 "-rw-r--r-- 1 root root 111325 Apr 27 2001 zxJDBC-2.0.1b1.tar.gz", 048 "-rw-r--r-- 1 root root 190144 Apr 27 2001 zxJDBC-2.0.1b1.zip", 049 "-rwxr-xr-x 2 500 500 166 Nov 2 2001 73131-testtes1.afp", 050 "-rw-r--r-- 1 500 500 166 Nov 9 2001 73131-testtes1.AFP", 051 "drwx------ 4 maxm Domain Users 512 Oct 2 10:59 .metadata", 052 } 053 }; 054 055 private static final String[][] badsamples = 056 { 057 { 058 "20-05-97 03:31PM 681 .bash_history", 059 "drwxr-xr-x 2 root 99 4096 Feb 23 30:01 zzplayer", 060 "12-05-96 17:03 <DIR> absoft2", 061 "05-22-97 08:08 828 AUTOEXEC.BAK", 062 " 0 DIR 05-19-97 12:56 local", 063 " 0 DIR 05-12-97 16:52 Maintenance Desktop", 064 }, 065 { 066 "20-05-97 03:31PM 681 .bash_history", 067 "drwxr-xr-x 2 root 99 4096Feb 23 30:01 zzplayer", 068 "12-05-96 17:03 <DIR> absoft2", 069 "05-22-97 08:08 828 AUTOEXEC.BAK", 070 " 0 DIR 05-19-97 12:56 local", 071 " 0 DIR 05-12-97 16:52 Maintenance Desktop", 072 } 073 }; 074 075 private static final String directoryBeginningWithNumber = 076 "12-03-96 06:38AM <DIR> 123xyz"; 077 078 079 /** 080 * @see junit.framework.TestCase#TestCase(String) 081 */ 082 public NTFTPEntryParserTest (String name) 083 { 084 super(name); 085 } 086 087 /** 088 * @see org.apache.commons.net.ftp.parser.CompositeFTPParseTestFramework#getGoodListings() 089 */ 090 @Override 091 protected String[][] getGoodListings() 092 { 093 return goodsamples; 094 } 095 096 /** 097 * @see org.apache.commons.net.ftp.parser.CompositeFTPParseTestFramework#getBadListings() 098 */ 099 @Override 100 protected String[][] getBadListings() 101 { 102 return badsamples; 103 } 104 105 /** 106 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getParser() 107 */ 108 @Override 109 protected FTPFileEntryParser getParser() 110 { 111 return new CompositeFileEntryParser(new FTPFileEntryParser[] 112 { 113 new NTFTPEntryParser(), 114 new UnixFTPEntryParser() 115 116 }); 117 } 118 119 /** 120 * Method suite. 121 * 122 * @return TestSuite 123 */ 124 public static TestSuite suite() 125 { 126 return(new TestSuite(NTFTPEntryParserTest.class)); 127 } 128 129 /** 130 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#testParseFieldsOnDirectory() 131 */ 132 @Override 133 public void testParseFieldsOnDirectory() throws Exception 134 { 135 FTPFile dir = getParser().parseFTPEntry("12-05-96 05:03PM <DIR> absoft2"); 136 assertNotNull("Could not parse entry.", dir); 137 assertEquals("Thu Dec 05 17:03:00 1996", 138 df.format(dir.getTimestamp().getTime())); 139 assertTrue("Should have been a directory.", 140 dir.isDirectory()); 141 assertEquals("absoft2", dir.getName()); 142 assertEquals(0, dir.getSize()); 143 144 dir = getParser().parseFTPEntry("12-03-96 06:38AM <DIR> 123456"); 145 assertNotNull("Could not parse entry.", dir); 146 assertTrue("Should have been a directory.", 147 dir.isDirectory()); 148 assertEquals("123456", dir.getName()); 149 assertEquals(0, dir.getSize()); 150 151 } 152 153 public void testParseLeadingDigits() { 154 FTPFile file = getParser().parseFTPEntry("05-22-97 12:08AM 5000000000 10 years and under"); 155 assertNotNull("Could not parse entry", file); 156 assertEquals("10 years and under", file.getName()); 157 assertEquals(5000000000L, file.getSize()); 158 159 FTPFile dir = getParser().parseFTPEntry("12-03-96 06:38AM <DIR> 10 years and under"); 160 assertNotNull("Could not parse entry", dir); 161 assertEquals("10 years and under", dir.getName()); 162 } 163 164 /** 165 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#testParseFieldsOnFile() 166 */ 167 @Override 168 public void testParseFieldsOnFile() throws Exception 169 { 170 FTPFile f = getParser().parseFTPEntry("05-22-97 12:08AM 5000000000 AUTOEXEC.BAK"); 171 assertNotNull("Could not parse entry.", f); 172 assertEquals("Thu May 22 00:08:00 1997", 173 df.format(f.getTimestamp().getTime())); 174 assertTrue("Should have been a file.", 175 f.isFile()); 176 assertEquals("AUTOEXEC.BAK", f.getName()); 177 assertEquals(5000000000L, f.getSize()); 178 179 // test an NT-unix style listing that does NOT have a leading zero 180 // on the hour. 181 182 f = getParser().parseFTPEntry( 183 "-rw-rw-r-- 1 mqm mqm 17707 Mar 12 3:33 killmq.sh.log"); 184 assertNotNull("Could not parse entry.", f); 185 Calendar cal = Calendar.getInstance(); 186 cal.setTime(f.getTimestamp().getTime()); 187 assertEquals("hour", 3, cal.get(Calendar.HOUR)); 188 assertTrue("Should have been a file.", 189 f.isFile()); 190 assertEquals(17707, f.getSize()); 191 } 192 193 194 @Override 195 protected void doAdditionalGoodTests(String test, FTPFile f) 196 { 197 if (test.indexOf("<DIR>") >= 0) 198 { 199 assertEquals("directory.type", 200 FTPFile.DIRECTORY_TYPE, f.getType()); 201 } 202 } 203 204 /** 205 * test condition reported as bug 20259. 206 * directory with name beginning with a numeric character 207 * was not parsing correctly 208 * 209 * @throws Exception 210 */ 211 public void testDirectoryBeginningWithNumber() throws Exception 212 { 213 FTPFile f = getParser().parseFTPEntry(directoryBeginningWithNumber); 214 assertEquals("name", "123xyz", f.getName()); 215 } 216 217 public void testDirectoryBeginningWithNumberFollowedBySpaces() throws Exception 218 { 219 FTPFile f = getParser().parseFTPEntry("12-03-96 06:38AM <DIR> 123 xyz"); 220 assertEquals("name", "123 xyz", f.getName()); 221 f = getParser().parseFTPEntry("12-03-96 06:38AM <DIR> 123 abc xyz"); 222 assertNotNull(f); 223 assertEquals("name", "123 abc xyz", f.getName()); 224 } 225 226 /** 227 * Test that group names with embedded spaces can be handled correctly 228 * 229 */ 230 public void testGroupNameWithSpaces() { 231 FTPFile f = getParser().parseFTPEntry("drwx------ 4 maxm Domain Users 512 Oct 2 10:59 .metadata"); 232 assertNotNull(f); 233 assertEquals("maxm", f.getUser()); 234 assertEquals("Domain Users", f.getGroup()); 235 } 236 237 }