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