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