1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 }