1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.configuration2.reloading;
19
20 import static org.apache.commons.configuration2.TempDirUtils.newFile;
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertNotNull;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.verifyNoMoreInteractions;
27 import static org.mockito.Mockito.when;
28
29 import java.io.File;
30 import java.io.FileWriter;
31 import java.io.IOException;
32 import java.nio.file.Files;
33
34 import org.apache.commons.configuration2.ConfigurationAssert;
35 import org.apache.commons.configuration2.ex.ConfigurationRuntimeException;
36 import org.apache.commons.configuration2.io.FileHandler;
37 import org.apache.commons.configuration2.io.VFSFileSystem;
38 import org.apache.commons.vfs2.FileName;
39 import org.apache.commons.vfs2.FileObject;
40 import org.apache.commons.vfs2.FileSystemException;
41 import org.junit.jupiter.api.Test;
42 import org.junit.jupiter.api.io.TempDir;
43
44
45
46
47 public class TestVFSFileHandlerReloadingDetector {
48
49 private static final String PROPERTY = "string";
50
51
52 private static final String FMT_XML = "<configuration><" + PROPERTY + ">%s</" + PROPERTY + "></configuration>";
53
54
55 @TempDir
56 public File tempFolder;
57
58
59
60
61 @Test
62 public void testGetRefreshDelay() throws Exception {
63 final long delay = 20130325L;
64 final VFSFileHandlerReloadingDetector strategy = new VFSFileHandlerReloadingDetector(null, delay);
65 assertNotNull(strategy.getFileHandler());
66 assertEquals(delay, strategy.getRefreshDelay());
67 }
68
69
70
71
72 @Test
73 public void testLastModificationDateExisting() throws IOException {
74 final File file = newFile(tempFolder);
75 writeTestFile(file, "value1");
76 final VFSFileHandlerReloadingDetector strategy = new VFSFileHandlerReloadingDetector();
77 strategy.getFileHandler().setFile(file);
78 strategy.getFileHandler().setFileSystem(new VFSFileSystem());
79 final long modificationDate = strategy.getLastModificationDate();
80
81
82 final long expectedMillis = Files.getLastModifiedTime(file.toPath()).toMillis();
83 assertEquals(expectedMillis, modificationDate);
84 }
85
86
87
88
89 @Test
90 public void testLastModificationDateFileSystemEx() throws FileSystemException {
91 final FileObject fo = mock(FileObject.class);
92 final FileName name = mock(FileName.class);
93
94 when(fo.exists()).thenReturn(Boolean.TRUE);
95 when(fo.getContent()).thenThrow(new FileSystemException("error"));
96 when(fo.getName()).thenReturn(name);
97 when(name.getURI()).thenReturn("someURI");
98
99 final VFSFileHandlerReloadingDetector strategy = new VFSFileHandlerReloadingDetector() {
100 @Override
101 protected FileObject getFileObject() {
102 return fo;
103 }
104 };
105 assertEquals(0, strategy.getLastModificationDate());
106
107 verify(fo).exists();
108 verify(fo).getContent();
109 verify(fo).getName();
110 verify(name).getURI();
111 verifyNoMoreInteractions(fo, name);
112 }
113
114
115
116
117 @Test
118 public void testLastModificationDateNonExisting() {
119 final File file = ConfigurationAssert.getOutFile("NonExistingFile.xml");
120 final FileHandler handler = new FileHandler();
121 handler.setFileSystem(new VFSFileSystem());
122 handler.setFile(file);
123 final VFSFileHandlerReloadingDetector strategy = new VFSFileHandlerReloadingDetector(handler);
124 assertEquals(0, strategy.getLastModificationDate());
125 }
126
127
128
129
130 @Test
131 public void testLastModificationDateUndefinedHandler() {
132 final VFSFileHandlerReloadingDetector strategy = new VFSFileHandlerReloadingDetector();
133 assertEquals(0, strategy.getLastModificationDate());
134 }
135
136
137
138
139 @Test
140 public void testLastModificationDateUnresolvableURI() {
141 final VFSFileHandlerReloadingDetector strategy = new VFSFileHandlerReloadingDetector() {
142 @Override
143 protected String resolveFileURI() {
144 return null;
145 }
146 };
147 strategy.getFileHandler().setFileSystem(new VFSFileSystem());
148 strategy.getFileHandler().setFileName("test.xml");
149 assertThrows(ConfigurationRuntimeException.class, strategy::getLastModificationDate);
150 }
151
152
153
154
155
156
157
158
159 private void writeTestFile(final File file, final String value) throws IOException {
160 try (FileWriter out = new FileWriter(file)) {
161 out.write(String.format(FMT_XML, value));
162 }
163 }
164 }