1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.buildcache.its;
20
21 import java.io.IOException;
22 import java.nio.file.Files;
23 import java.nio.file.Path;
24 import java.nio.file.Paths;
25 import java.nio.file.attribute.FileTime;
26 import java.time.Instant;
27 import java.util.Arrays;
28
29 import org.apache.maven.buildcache.its.junit.IntegrationTest;
30 import org.apache.maven.it.VerificationException;
31 import org.apache.maven.it.Verifier;
32 import org.junit.jupiter.api.Test;
33
34 import static org.junit.jupiter.api.Assertions.assertTrue;
35
36
37
38
39
40
41
42
43 @IntegrationTest("src/test/projects/stale-artifact")
44 class StaleArtifactTest {
45
46 @Test
47 void staleDirectoryNotCached(Verifier verifier) throws VerificationException, IOException {
48 verifier.setAutoclean(false);
49
50
51 verifier.setLogFileName("../log-version-a.txt");
52 verifier.executeGoals(Arrays.asList("clean", "compile"));
53 verifier.verifyErrorFreeLog();
54
55 Path classesDir = Paths.get(verifier.getBasedir(), "target", "classes");
56 Path appClass = classesDir.resolve("org/example/App.class");
57 assertTrue(Files.exists(appClass), "App.class should exist after compile");
58
59
60
61
62 Path sourceFile = Paths.get(verifier.getBasedir(), "src/main/java/org/example/App.java");
63 String content = new String(Files.readAllBytes(sourceFile), "UTF-8");
64 Files.write(sourceFile, content.replace("Version A", "Version B").getBytes("UTF-8"));
65
66
67 FileTime oldTime = FileTime.from(Instant.now().minusSeconds(3600));
68 Files.setLastModifiedTime(appClass, oldTime);
69
70
71 verifier.setLogFileName("../log-version-b.txt");
72 verifier.executeGoals(Arrays.asList("compile"));
73 verifier.verifyErrorFreeLog();
74
75
76
77 FileTime newTime = Files.getLastModifiedTime(appClass);
78 assertTrue(
79 newTime.toMillis() > oldTime.toMillis(),
80 "Compiler should have recompiled stale class (new timestamp: " + newTime + ", old timestamp: " + oldTime
81 + ")");
82 }
83 }