1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.net.ftp;
18
19 import java.io.IOException;
20 import java.time.Duration;
21 import java.time.Instant;
22 import java.util.Calendar;
23 import java.util.TreeSet;
24
25 import junit.framework.TestCase;
26
27
28
29
30
31
32
33
34
35
36
37
38
39 public class FTPClientConfigFunctionalTest extends TestCase {
40
41 private final FTPClient ftpClient = new FTPClient();
42 private FTPClientConfig ftpClientConfig;
43
44
45
46 public FTPClientConfigFunctionalTest() {
47
48 }
49
50 public FTPClientConfigFunctionalTest(final String arg0) {
51 super(arg0);
52 }
53
54 private TreeSet<FTPFile> getSortedSet(final FTPFile[] files) {
55
56
57 final TreeSet<FTPFile> sorted = new TreeSet<>((o1, o2) -> o1.getTimestamp().getTime().compareTo(o2.getTimestamp().getTime()));
58
59 for (final FTPFile file : files) {
60
61
62
63
64 if (file.getName().startsWith("sn")) {
65 sorted.add(file);
66 }
67 }
68 return sorted;
69 }
70
71
72
73
74 @Override
75 protected void setUp() throws Exception {
76 super.setUp();
77 ftpClientConfig = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
78 ftpClientConfig.setServerTimeZoneId("GMT");
79 ftpClient.configure(ftpClientConfig);
80 try {
81 ftpClient.connect("tgftp.nws.noaa.gov");
82 ftpClient.login("anonymous", "testing@apache.org");
83 ftpClient.changeWorkingDirectory("SL.us008001/DF.an/DC.sflnd/DS.metar");
84 ftpClient.enterLocalPassiveMode();
85 } catch (final IOException e) {
86 e.printStackTrace();
87 }
88 }
89
90
91
92
93 @Override
94 protected void tearDown() throws Exception {
95 ftpClient.disconnect();
96 super.tearDown();
97 }
98
99 public void testTimeZoneFunctionality() throws Exception {
100 final java.util.Date nowDate = new java.util.Date();
101 final Instant nowInstant = nowDate.toInstant();
102 final FTPFile[] files = ftpClient.listFiles();
103 final TreeSet<FTPFile> sortedSet = getSortedSet(files);
104
105 FTPFile lastFile = null;
106 FTPFile firstFile = null;
107 for (final FTPFile thisFile : sortedSet) {
108 if (firstFile == null) {
109 firstFile = thisFile;
110 }
111
112
113 if (lastFile != null) {
114
115 assertTrue(lastFile.getTimestamp().before(thisFile.getTimestamp()));
116 assertTrue(lastFile.getTimestampInstant().isBefore(thisFile.getTimestampInstant()));
117 }
118 lastFile = thisFile;
119 }
120
121 if (firstFile == null || lastFile == null) {
122 fail("No files found");
123 } else {
124
125
126 assertTrue(lastFile.getTimestamp().getTime().before(nowDate));
127 assertTrue(lastFile.getTimestampInstant().isBefore(nowInstant));
128 final Calendar firstCal = firstFile.getTimestamp();
129 final Instant firstInstant = firstFile.getTimestampInstant().plus(Duration.ofDays(2));
130
131
132
133
134
135 firstCal.add(Calendar.DAY_OF_MONTH, 2);
136 assertTrue(lastFile.getTimestamp().getTime() + " before " + firstCal.getTime(), lastFile.getTimestamp().before(firstCal));
137 assertTrue(lastFile.getTimestampInstant() + " before " + firstInstant, lastFile.getTimestampInstant().isBefore(firstInstant));
138 }
139 }
140 }