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.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 }