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 testToFormattedStringDirectoryType() {
114 final FTPFile file = new FTPFile();
115 file.setType(FTPFile.DIRECTORY_TYPE);
116 assertTrue(file.toFormattedString().startsWith("d"));
117 }
118
119 @Test
120 public void testToFormattedStringFileType() {
121 final FTPFile file = new FTPFile();
122 file.setType(FTPFile.FILE_TYPE);
123 assertTrue(file.toFormattedString().startsWith("-"));
124 }
125
126 @Test
127 public void testToFormattedStringInvalidFile() {
128 final FTPFile invalidFile = new FTPFile("LIST");
129 assertEquals("[Invalid: could not parse file entry]", invalidFile.toFormattedString());
130 }
131
132 @Test
133 public void testToFormattedStringSymbolicLinkType() {
134 final FTPFile file = new FTPFile();
135 file.setType(FTPFile.SYMBOLIC_LINK_TYPE);
136 assertTrue(file.toFormattedString().startsWith("l"));
137 }
138
139 @Test
140 public void testToFormattedStringUnknownType() {
141 final FTPFile file = new FTPFile();
142 assertTrue(file.toFormattedString().startsWith("?"));
143 }
144
145 @Test
146 public void testToFormattedStringWithTimezone() {
147 final FTPFile file = new FTPFile();
148 file.setType(FTPFile.FILE_TYPE);
149 file.setSize(32767);
150 file.setUser("Apache");
151 file.setGroup("Apache Group");
152 file.setName("virus.bat");
153 final Calendar timestamp = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
154 timestamp.set(1969, Calendar.JULY, 16, 13, 32, 0);
155 file.setTimestamp(timestamp);
156 file.setPermission(FTPFile.USER_ACCESS, FTPFile.READ_PERMISSION, true);
157 file.setPermission(FTPFile.USER_ACCESS, FTPFile.WRITE_PERMISSION, true);
158 file.setPermission(FTPFile.USER_ACCESS, FTPFile.EXECUTE_PERMISSION, true);
159
160 final String formattedString = file.toFormattedString("GMT");
161
162 assertAll(
163 () -> assertTrue(formattedString.startsWith("-")),
164 () -> assertTrue(formattedString.startsWith("rwx", 1)),
165 () -> assertTrue(formattedString.contains(file.getUser())),
166 () -> assertTrue(formattedString.contains(file.getGroup())),
167 () -> assertTrue(formattedString.contains(String.valueOf(file.getSize()))),
168 () -> assertTrue(formattedString.contains("1969-07-16 13:32:00")),
169 () -> assertTrue(formattedString.contains("GMT")),
170 () -> assertTrue(formattedString.contains(file.getName()))
171 );
172 }
173
174 @Test
175 public void testToString() {
176 final FTPFile file = new FTPFile();
177 file.setRawListing("LIST");
178 assertEquals(file.getRawListing(), file.toString());
179 }
180
181 @Test
182 public void testToStringDefault() {
183 final FTPFile file = new FTPFile();
184 assertNull(file.toString());
185 }
186
187 }