1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.net.ftp.parser;
17
18 import java.io.ByteArrayInputStream;
19 import java.io.IOException;
20
21 import junit.framework.TestSuite;
22
23 import org.apache.commons.net.ftp.FTPFile;
24 import org.apache.commons.net.ftp.FTPFileEntryParser;
25 import org.apache.commons.net.ftp.FTPListParseEngine;
26
27 /**
28 * @author <a href="mailto:scohen@apache.org">Steve Cohen</a>
29 * @author <a href="sestegra@free.fr">Stephane ESTE-GRACIAS</a>
30 * @version $Id: VMSFTPEntryParserTest.java 155429 2005-02-26 13:13:04Z dirkv $
31 */
32 public class VMSFTPEntryParserTest extends FTPParseTestFramework
33 {
34 private static final String[] badsamples =
35 {
36
37 "1-JUN.LIS;2 9/9 JUN-2-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)",
38 "1-JUN.LIS;2 a/9 2-JUN-98 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)",
39 "DATA.DIR; 1 1/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (,RWED,RWED,RE)",
40 "120196.TXT;1 118/126 14-APR-1997 12:45:27 PM [GROUP,OWNER] (RWED,,RWED,RE)",
41 "30CHARBAR.TXT;1 11/18 2-JUN-1998 08:38:42 [GROUP-1,OWNER] (RWED,RWED,RWED,RE)",
42 "A.;2 18/18 1-JUL-1998 08:43:20 [GROUP,OWNER] (RWED2,RWED,RWED,RE)",
43 "AA.;2 152/153 13-FED-1997 08:13:43 [GROUP,OWNER] (RWED,RWED,RWED,RE)",
44 "Directory USER1:[TEMP]\r\n\r\n",
45 "\r\nTotal 14 files"
46 };
47
48 private static final String[] goodsamples =
49 {
50 "1-JUN.LIS;1 9/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,RE)",
51 "1-JUN.LIS;3 9/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)",
52 "1-JUN.LIS;2 9/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)",
53 "DATA.DIR;1 1/9 2-JUN-1998 07:32:04 [TRANSLATED] (,RWED,RWED,RE)",
54 "120196.TXT;1 118/126 14-APR-1997 12:45:27 [GROUP,OWNER] (RWED,,RWED,RE)",
55 "30CHARBAR.TXT;1 11/18 2-JUN-1998 08:38:42 [GROUP,OWNER] (RWED,RWED,RWED,RE)",
56 "A.;2 18/18 1-JUL-1998 08:43:20 [GROUP,OWNER] (RWED,RWED,RWED,RE)",
57 "AA.;2 152/153 13-FEB-1997 08:13:43 [GROUP,OWNER] (RWED,RWED,RWED,RE)",
58 "UCX$REXECD_STARTUP.LOG;1098\r\n 4/15 24-FEB-2003 13:17:24 [POSTWARE,LP] (RWED,RWED,RE,)",
59 "UNARCHIVE.COM;1 2/15 7-JUL-1997 16:37:45 [POSTWARE,LP] (RWE,RWE,RWE,RE)",
60 "UNXMERGE.COM;15 1/15 20-AUG-1996 13:59:50 [POSTWARE,LP] (RWE,RWE,RWE,RE)",
61 "UNXTEMP.COM;7 1/15 15-AUG-1996 14:10:38 [POSTWARE,LP] (RWE,RWE,RWE,RE)",
62 "UNZIP_AND_ATTACH_FILES.COM;12\r\n 14/15 24-JUL-2002 14:35:40 [TRANSLATED] (RWE,RWE,RWE,RE)",
63 "UNZIP_AND_ATTACH_FILES.SAV;1\r\n 14/15 17-JAN-2002 11:13:53 [POSTWARE,LP] (RWE,RWED,RWE,RE)",
64 "FREEWARE40.DIR;1 27/36 16-FEB-1999 10:01:46 [AP_HTTPD,APACHE$WWW (RWE,RWE,RE,RE)",
65 "1-JUN.LIS;1 9/9 2-jun-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,RE)",
66 };
67
68 private static final String fullListing = "Directory USER1:[TEMP]\r\n\r\n"+
69 "1-JUN.LIS;1 9/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,RE)\r\n"+
70 "2-JUN.LIS;1 9/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)\r\n"+
71 "3-JUN.LIS;1 9/9 3-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)\r\n"+
72 "3-JUN.LIS;4 9/9 7-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)\r\n"+
73 "3-JUN.LIS;2 9/9 4-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)\r\n"+
74 "3-JUN.LIS;3 9/9 6-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,)\r\n"+
75 "\r\nTotal 6 files";
76
77 /**
78 * @see junit.framework.TestCase#TestCase(String)
79 */
80 public VMSFTPEntryParserTest(String name)
81 {
82 super(name);
83 }
84
85 /**
86 * Test the parsing of the whole list.
87 * @throws IOException
88 */
89 public void testWholeListParse() throws IOException
90 {
91 VMSFTPEntryParser parser = new VMSFTPEntryParser();
92 parser.configure(null);
93 FTPListParseEngine engine = new FTPListParseEngine(parser);
94 engine.readServerList(
95 new ByteArrayInputStream(fullListing.getBytes()));
96 FTPFile[] files = engine.getFiles();
97 assertEquals(6, files.length);
98 assertFileInListing(files, "2-JUN.LIS");
99 assertFileInListing(files, "3-JUN.LIS");
100 assertFileInListing(files, "1-JUN.LIS");
101 assertFileNotInListing(files, "1-JUN.LIS;1");
102
103 }
104
105 /**
106 * Test the parsing of the whole list.
107 * @throws IOException
108 */
109 public void testWholeListParseWithVersioning() throws IOException
110 {
111
112 VMSFTPEntryParser parser = new VMSVersioningFTPEntryParser();
113 parser.configure(null);
114 FTPListParseEngine engine = new FTPListParseEngine(parser);
115 engine.readServerList(
116 new ByteArrayInputStream(fullListing.getBytes()));
117 FTPFile[] files = engine.getFiles();
118 assertEquals(3, files.length);
119 assertFileInListing(files, "1-JUN.LIS;1");
120 assertFileInListing(files, "2-JUN.LIS;1");
121 assertFileInListing(files, "3-JUN.LIS;4");
122 assertFileNotInListing(files, "3-JUN.LIS;1");
123 assertFileNotInListing(files, "3-JUN.LIS");
124
125 }
126
127 public void assertFileInListing(FTPFile[] listing, String name) {
128 for (int i = 0; i < listing.length; i++) {
129 if (name.equals(listing[i].getName())) {
130 return;
131 }
132 }
133 fail("File " + name + " not found in supplied listing");
134 }
135 public void assertFileNotInListing(FTPFile[] listing, String name) {
136 for (int i = 0; i < listing.length; i++) {
137 if (name.equals(listing[i].getName())) {
138 fail("Unexpected File " + name + " found in supplied listing");
139 }
140 }
141 }
142
143 /**
144 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#testParseFieldsOnDirectory()
145 */
146 public void testParseFieldsOnDirectory() throws Exception
147 {
148
149 FTPFile dir = getParser().parseFTPEntry("DATA.DIR;1 1/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,RE)");
150 assertTrue("Should be a directory.",
151 dir.isDirectory());
152 assertEquals("DATA.DIR",
153 dir.getName());
154 assertEquals(512,
155 dir.getSize());
156 assertEquals("Tue Jun 02 07:32:04 1998",
157 df.format(dir.getTimestamp().getTime()));
158 assertEquals("GROUP",
159 dir.getGroup());
160 assertEquals("OWNER",
161 dir.getUser());
162 checkPermisions(dir);
163
164
165 dir = getParser().parseFTPEntry("DATA.DIR;1 1/9 2-JUN-1998 07:32:04 [TRANSLATED] (RWED,RWED,RWED,RE)");
166 assertTrue("Should be a directory.",
167 dir.isDirectory());
168 assertEquals("DATA.DIR",
169 dir.getName());
170 assertEquals(512,
171 dir.getSize());
172 assertEquals("Tue Jun 02 07:32:04 1998",
173 df.format(dir.getTimestamp().getTime()));
174 assertEquals(null,
175 dir.getGroup());
176 assertEquals("TRANSLATED",
177 dir.getUser());
178 checkPermisions(dir);
179 }
180
181 /**
182 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#testParseFieldsOnFile()
183 */
184 public void testParseFieldsOnFile() throws Exception
185 {
186 FTPFile file = getParser().parseFTPEntry("1-JUN.LIS;1 9/9 2-JUN-1998 07:32:04 [GROUP,OWNER] (RWED,RWED,RWED,RE)");
187 assertTrue("Should be a file.",
188 file.isFile());
189 assertEquals("1-JUN.LIS",
190 file.getName());
191 assertEquals(9 * 512,
192 file.getSize());
193 assertEquals("Tue Jun 02 07:32:04 1998",
194 df.format(file.getTimestamp().getTime()));
195 assertEquals("GROUP",
196 file.getGroup());
197 assertEquals("OWNER",
198 file.getUser());
199 checkPermisions(file);
200
201
202 file = getParser().parseFTPEntry("1-JUN.LIS;1 9/9 2-JUN-1998 07:32:04 [TRANSLATED] (RWED,RWED,RWED,RE)");
203 assertTrue("Should be a file.",
204 file.isFile());
205 assertEquals("1-JUN.LIS",
206 file.getName());
207 assertEquals(9 * 512,
208 file.getSize());
209 assertEquals("Tue Jun 02 07:32:04 1998",
210 df.format(file.getTimestamp().getTime()));
211 assertEquals(null,
212 file.getGroup());
213 assertEquals("TRANSLATED",
214 file.getUser());
215 checkPermisions(file);
216 }
217
218 /**
219 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getBadListing()
220 */
221 protected String[] getBadListing()
222 {
223
224 return (badsamples);
225 }
226
227 /**
228 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getGoodListing()
229 */
230 protected String[] getGoodListing()
231 {
232
233 return (goodsamples);
234 }
235
236 /**
237 * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getParser()
238 */
239 protected FTPFileEntryParser getParser()
240 {
241 ConfigurableFTPFileEntryParserImpl parser =
242 new VMSFTPEntryParser();
243 parser.configure(null);
244 return parser;
245 }
246 protected FTPFileEntryParser getVersioningParser()
247 {
248 ConfigurableFTPFileEntryParserImpl parser =
249 new VMSVersioningFTPEntryParser();
250 parser.configure(null);
251 return parser;
252 }
253
254 /**
255 * Method checkPermisions.
256 * Verify that the VMS parser does NOT set the permissions.
257 * @param dir
258 */
259 private void checkPermisions(FTPFile dir)
260 {
261 assertTrue("Owner should not have read permission.",
262 !dir.hasPermission(FTPFile.USER_ACCESS,
263 FTPFile.READ_PERMISSION));
264 assertTrue("Owner should not have write permission.",
265 !dir.hasPermission(FTPFile.USER_ACCESS,
266 FTPFile.WRITE_PERMISSION));
267 assertTrue("Owner should not have execute permission.",
268 !dir.hasPermission(FTPFile.USER_ACCESS,
269 FTPFile.EXECUTE_PERMISSION));
270 assertTrue("Group should not have read permission.",
271 !dir.hasPermission(FTPFile.GROUP_ACCESS,
272 FTPFile.READ_PERMISSION));
273 assertTrue("Group should not have write permission.",
274 !dir.hasPermission(FTPFile.GROUP_ACCESS,
275 FTPFile.WRITE_PERMISSION));
276 assertTrue("Group should not have execute permission.",
277 !dir.hasPermission(FTPFile.GROUP_ACCESS,
278 FTPFile.EXECUTE_PERMISSION));
279 assertTrue("World should not have read permission.",
280 !dir.hasPermission(FTPFile.WORLD_ACCESS,
281 FTPFile.READ_PERMISSION));
282 assertTrue("World should not have write permission.",
283 !dir.hasPermission(FTPFile.WORLD_ACCESS,
284 FTPFile.WRITE_PERMISSION));
285 assertTrue("World should not have execute permission.",
286 !dir.hasPermission(FTPFile.WORLD_ACCESS,
287 FTPFile.EXECUTE_PERMISSION));
288 }
289
290 /**
291 * Method suite.
292 * @return TestSuite
293 */
294 public static TestSuite suite()
295 {
296 return(new TestSuite(VMSFTPEntryParserTest.class));
297 }
298 }