1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 package org.eclipse.jgit.internal.storage.file;
44
45 import static org.junit.Assert.assertFalse;
46 import static org.junit.Assert.assertTrue;
47
48 import java.io.File;
49 import java.io.FileOutputStream;
50 import java.io.IOException;
51 import java.util.ArrayList;
52 import java.util.List;
53
54 import org.eclipse.jgit.internal.storage.file.FileSnapshot;
55 import org.eclipse.jgit.util.FileUtils;
56 import org.junit.After;
57 import org.junit.Before;
58 import org.junit.Test;
59
60 public class FileSnapshotTest {
61
62 private List<File> files = new ArrayList<File>();
63
64 private File trash;
65
66 @Before
67 public void setUp() throws Exception {
68 trash = File.createTempFile("tmp_", "");
69 trash.delete();
70 assertTrue("mkdir " + trash, trash.mkdir());
71 }
72
73 @Before
74 @After
75 public void tearDown() throws Exception {
76 FileUtils.delete(trash, FileUtils.RECURSIVE | FileUtils.SKIP_MISSING);
77 }
78
79 private static void waitNextSec(File f) {
80 long initialLastModified = f.lastModified();
81 do {
82 f.setLastModified(System.currentTimeMillis());
83 } while (f.lastModified() == initialLastModified);
84 }
85
86
87
88
89
90
91 @Test
92 public void testActuallyIsModifiedTrivial() throws Exception {
93 File f1 = createFile("simple");
94 waitNextSec(f1);
95 FileSnapshot save = FileSnapshot.save(f1);
96 append(f1, (byte) 'x');
97 waitNextSec(f1);
98 assertTrue(save.isModified(f1));
99 }
100
101
102
103
104
105
106
107
108 @Test
109 public void testOldFile() throws Exception {
110 File f1 = createFile("oldfile");
111 waitNextSec(f1);
112 FileSnapshot save = FileSnapshot.save(f1);
113 Thread.sleep(3500);
114 assertFalse(save.isModified(f1));
115 }
116
117
118
119
120
121
122
123
124
125 @Test
126 public void testNewFileWithWait() throws Exception {
127 File f1 = createFile("newfile");
128 waitNextSec(f1);
129 FileSnapshot save = FileSnapshot.save(f1);
130 Thread.sleep(1500);
131 assertTrue(save.isModified(f1));
132 }
133
134
135
136
137
138
139 @Test
140 public void testNewFileNoWait() throws Exception {
141 File f1 = createFile("newfile");
142 waitNextSec(f1);
143 FileSnapshot save = FileSnapshot.save(f1);
144 Thread.sleep(1500);
145 assertTrue(save.isModified(f1));
146 }
147
148 private File createFile(String string) throws IOException {
149 trash.mkdirs();
150 File f = File.createTempFile(string, "tdat", trash);
151 files.add(f);
152 return f;
153 }
154
155 private static void append(File f, byte b) throws IOException {
156 FileOutputStream os = new FileOutputStream(f, true);
157 try {
158 os.write(b);
159 } finally {
160 os.close();
161 }
162 }
163
164 }