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  
18  package org.apache.commons.net.ftp;
19  
20  import static org.junit.jupiter.api.Assertions.assertAll;
21  import static org.junit.jupiter.api.Assertions.assertEquals;
22  import static org.junit.jupiter.api.Assertions.assertFalse;
23  import static org.junit.jupiter.api.Assertions.assertNotNull;
24  import static org.junit.jupiter.api.Assertions.assertNull;
25  import static org.junit.jupiter.api.Assertions.assertTrue;
26  
27  import java.time.Instant;
28  import java.time.LocalDateTime;
29  import java.time.Month;
30  import java.time.ZoneId;
31  import java.util.Calendar;
32  import java.util.TimeZone;
33  
34  import org.junit.jupiter.api.Test;
35  
36  public class FTPFileTest {
37  
38      @Test
39      public void testGetTimestampInstant() {
40          final FTPFile file = new FTPFile();
41          final Calendar timestamp = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
42          timestamp.set(2023, Calendar.AUGUST, 4, 23, 40, 55);
43          file.setTimestamp(timestamp);
44  
45          final Instant timestampInstant = file.getTimestampInstant();
46  
47          assertNotNull(timestampInstant);
48          final LocalDateTime fileDateTime = LocalDateTime.ofInstant(file.getTimestampInstant(), ZoneId.of("GMT"));
49          assertAll(
50                  () -> assertEquals(2023, fileDateTime.getYear()),
51                  () -> assertEquals(Month.AUGUST, fileDateTime.getMonth()),
52                  () -> assertEquals(4, fileDateTime.getDayOfMonth()),
53                  () -> assertEquals(23, fileDateTime.getHour()),
54                  () -> assertEquals(40, fileDateTime.getMinute()),
55                  () -> assertEquals(55, fileDateTime.getSecond())
56          );
57      }
58  
59      @Test
60      public void testGetTimestampInstantNullCalendar() {
61          final FTPFile file = new FTPFile();
62          assertNull(file.getTimestampInstant());
63      }
64  
65      @Test
66      public void testHasPermissionFalse() {
67          final FTPFile file = new FTPFile();
68          file.setPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION, false);
69          assertFalse(file.hasPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION));
70      }
71  
72      @Test
73      public void testHasPermissionInvalidFile() {
74          final FTPFile invalidFile = new FTPFile("LIST");
75          assertFalse(invalidFile.hasPermission(FTPFile.GROUP_ACCESS, FTPFile.EXECUTE_PERMISSION));
76      }
77  
78      @Test
79      public void testHasPermissionTrue() {
80          final FTPFile file = new FTPFile();
81          file.setPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION, true);
82          assertTrue(file.hasPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION));
83      }
84  
85      @Test
86      public void testIsDirectory() {
87          final FTPFile file = new FTPFile();
88          file.setType(FTPFile.DIRECTORY_TYPE);
89          assertTrue(file.isDirectory());
90      }
91  
92      @Test
93      public void testIsFile() {
94          final FTPFile file = new FTPFile();
95          file.setType(FTPFile.FILE_TYPE);
96          assertTrue(file.isFile());
97      }
98  
99      @Test
100     public void testIsSymbolicLink() {
101         final FTPFile file = new FTPFile();
102         file.setType(FTPFile.SYMBOLIC_LINK_TYPE);
103         assertTrue(file.isSymbolicLink());
104     }
105 
106     @Test
107     public void testIsUnknown() {
108         final FTPFile file = new FTPFile();
109         assertTrue(file.isUnknown());
110     }
111 
112     @Test
113     public void testToString() {
114         final FTPFile file = new FTPFile();
115         file.setRawListing("LIST");
116         assertEquals(file.getRawListing(), file.toString());
117     }
118 
119     @Test
120     public void testToStringDefault() {
121         final FTPFile file = new FTPFile();
122         assertNull(file.toString());
123     }
124 
125     @Test
126     public void toFormattedStringDirectoryType() {
127         final FTPFile file = new FTPFile();
128         file.setType(FTPFile.DIRECTORY_TYPE);
129         assertTrue(file.toFormattedString().startsWith("d"));
130     }
131 
132     @Test
133     public void toFormattedStringFileType() {
134         final FTPFile file = new FTPFile();
135         file.setType(FTPFile.FILE_TYPE);
136         assertTrue(file.toFormattedString().startsWith("-"));
137     }
138 
139     @Test
140     public void toFormattedStringInvalidFile() {
141         final FTPFile invalidFile = new FTPFile("LIST");
142         assertEquals("[Invalid: could not parse file entry]", invalidFile.toFormattedString());
143     }
144 
145     @Test
146     public void toFormattedStringSymbolicLinkType() {
147         final FTPFile file = new FTPFile();
148         file.setType(FTPFile.SYMBOLIC_LINK_TYPE);
149         assertTrue(file.toFormattedString().startsWith("l"));
150     }
151 
152     @Test
153     public void toFormattedStringUnknownType() {
154         final FTPFile file = new FTPFile();
155         assertTrue(file.toFormattedString().startsWith("?"));
156     }
157 
158     @Test
159     public void toFormattedStringWithTimezone() {
160         final FTPFile file = new FTPFile();
161         file.setType(FTPFile.FILE_TYPE);
162         file.setSize(32767);
163         file.setUser("Apache");
164         file.setGroup("Apache Group");
165         file.setName("virus.bat");
166         final Calendar timestamp = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
167         timestamp.set(1969, Calendar.JULY, 16, 13, 32, 0);
168         file.setTimestamp(timestamp);
169         file.setPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION, true);
170         file.setPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION, true);
171         file.setPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION, true);
172 
173         final String formattedString = file.toFormattedString("GMT");
174 
175         assertAll(
176                 () -> assertTrue(formattedString.startsWith("-")),
177                 () -> assertTrue(formattedString.startsWith("rwx", 1)),
178                 () -> assertTrue(formattedString.contains(file.getUser())),
179                 () -> assertTrue(formattedString.contains(file.getGroup())),
180                 () -> assertTrue(formattedString.contains(String.valueOf(file.getSize()))),
181                 () -> assertTrue(formattedString.contains("1969-07-16 13:32:00")),
182                 () -> assertTrue(formattedString.contains("GMT")),
183                 () -> assertTrue(formattedString.contains(file.getName()))
184         );
185     }
186 
187 }