View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.net.ftp.parser;
18  
19  import java.util.Calendar;
20  
21  import org.apache.commons.net.ftp.FTPFile;
22  import org.apache.commons.net.ftp.FTPFileEntryParser;
23  
24  public class MacOsPeterFTPEntryParserTest extends FTPParseTestFramework {
25  
26      private static final String[] badsamples = {
27          "drwxr-xr-x    123       folder        0 Jan  4 14:49 Steak",
28      };
29  
30      private static final String[] goodsamples =
31      {
32          "-rw-r--r--    54149       27826    81975 Jul 22  2010 09.jpg",
33          "drwxr-xr-x               folder        0 Jan  4 14:51 Alias_to_Steak",
34          "-rw-r--r--    78440       49231   127671 Jul 22  2010 Filename with whitespace.jpg",
35          "-rw-r--r--    78440       49231   127671 Jul 22 14:51 Filename with whitespace.jpg",
36          "-rw-r--r--        0      108767   108767 Jul 22  2010 presentation03.jpg",
37          "-rw-r--r--    58679       60393   119072 Jul 22  2010 presentation04.jpg",
38          "-rw-r--r--    82543       51433   133976 Jul 22  2010 presentation06.jpg",
39          "-rw-r--r--    83616     1430976  1514592 Jul 22  2010 presentation10.jpg",
40          "-rw-r--r--        0       66990    66990 Jul 22  2010 presentation11.jpg",
41          "drwxr-xr-x               folder        0 Jan  4 14:49 Steak",
42          "-rwx------        0       12713    12713 Jul  8  2009 Twitter_Avatar.png",
43      };
44  
45      /**
46       * @see junit.framework.TestCase#TestCase(String)
47       */
48      public MacOsPeterFTPEntryParserTest(String name) {
49          super(name);
50      }
51  
52      /**
53       * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getBadListing()
54       */
55      @Override
56      protected String[] getBadListing() {
57          return (badsamples);
58      }
59  
60      /**
61       * @see org.apache.commons.net.ftp.parser.FTPParseTestFramework#getGoodListing()
62       */
63      @Override
64      protected String[] getGoodListing() {
65          return (goodsamples);
66      }
67  
68      @Override
69      protected FTPFileEntryParser getParser() {
70          return (new MacOsPeterFTPEntryParser());
71      }
72  
73      @Override
74      public void testParseFieldsOnDirectory() throws Exception {
75          FTPFile f = getParser().parseFTPEntry(
76                  "drwxr-xr-x               folder        0 Mar  2 15:13 Alias_to_Steak");
77          assertNotNull("Could not parse entry.", f);
78          assertTrue("Should have been a directory.", f.isDirectory());
79          checkPermissions(f);
80          assertEquals(0, f.getHardLinkCount());
81          assertNull(f.getUser());
82          assertNull(f.getGroup());
83          assertEquals(0, f.getSize());
84          assertEquals("Alias_to_Steak", f.getName());
85  
86          Calendar cal = Calendar.getInstance();
87          cal.set(Calendar.MONTH, Calendar.MARCH);
88  
89          cal.set(Calendar.DATE, 1);
90          cal.set(Calendar.HOUR_OF_DAY, 0);
91          cal.set(Calendar.MINUTE, 0);
92          cal.set(Calendar.SECOND, 0);
93          if (f.getTimestamp().getTime().before(cal.getTime())) {
94              cal.add(Calendar.YEAR, -1);
95          }
96          cal.set(Calendar.DATE, 2);
97          cal.set(Calendar.HOUR_OF_DAY, 15);
98          cal.set(Calendar.MINUTE, 13);
99  
100         assertEquals(df.format(cal.getTime()), df.format(f.getTimestamp()
101                 .getTime()));
102     }
103 
104     @Override
105     public void testParseFieldsOnFile() throws Exception {
106         FTPFile f = getParser().parseFTPEntry(
107             "-rwxr-xr-x    78440       49231   127671 Jul  2 14:51 Filename with whitespace.jpg"
108             );
109         assertNotNull("Could not parse entry.", f);
110         assertTrue("Should have been a file.", f.isFile());
111         checkPermissions(f);
112         assertEquals(0, f.getHardLinkCount());
113         assertNull(f.getUser());
114         assertNull(f.getGroup());
115         assertEquals("Filename with whitespace.jpg", f.getName());
116         assertEquals(127671L, f.getSize());
117 
118         Calendar cal = Calendar.getInstance();
119         cal.set(Calendar.MONTH, Calendar.JULY);
120 
121         cal.set(Calendar.DATE, 1);
122         cal.set(Calendar.HOUR_OF_DAY, 0);
123         cal.set(Calendar.MINUTE, 0);
124         cal.set(Calendar.SECOND, 0);
125         if (f.getTimestamp().getTime().before(cal.getTime())) {
126             cal.add(Calendar.YEAR, -1);
127         }
128         cal.set(Calendar.DATE, 2);
129         cal.set(Calendar.HOUR_OF_DAY, 14);
130         cal.set(Calendar.MINUTE, 51);
131         assertEquals(df.format(cal.getTime()), df.format(f.getTimestamp().getTime()));
132     }
133 
134     /**
135      * Method checkPermissions.
136      * Verify that the persmissions were properly set.
137      * @param f
138      */
139     private void checkPermissions(FTPFile f) {
140         assertTrue("Should have user read permission.", f.hasPermission(
141                 FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION));
142         assertTrue("Should have user write permission.", f.hasPermission(
143                 FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION));
144         assertTrue("Should have user execute permission.", f.hasPermission(
145                 FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION));
146         assertTrue("Should have group read permission.", f.hasPermission(
147                 FTPFile.GROUP_ACCESS, FTPFile.READ_PERMISSION));
148         assertTrue("Should NOT have group write permission.", !f.hasPermission(
149                 FTPFile.GROUP_ACCESS, FTPFile.WRITE_PERMISSION));
150         assertTrue("Should have group execute permission.", f.hasPermission(
151                 FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION));
152         assertTrue("Should have world read permission.", f.hasPermission(
153                 FTPFile.WORLD_ACCESS, FTPFile.READ_PERMISSION));
154         assertTrue("Should NOT have world write permission.", !f.hasPermission(
155                 FTPFile.WORLD_ACCESS, FTPFile.WRITE_PERMISSION));
156         assertTrue("Should have world execute permission.", f.hasPermission(
157                 FTPFile.WORLD_ACCESS, FTPFile.EXECUTE_PERMISSION));
158     }
159 
160 }