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.util.Arrays;
25  import java.util.List;
26  
27  import org.apache.maven.buildcache.its.junit.IntegrationTest;
28  import org.apache.maven.buildcache.util.LogFileUtils;
29  import org.apache.maven.buildcache.xml.CacheConfigImpl;
30  import org.apache.maven.it.VerificationException;
31  import org.apache.maven.it.Verifier;
32  import org.junit.jupiter.api.Assertions;
33  import org.junit.jupiter.api.Test;
34  
35  import static org.apache.maven.buildcache.xml.CacheConfigImpl.CACHE_LOCATION_PROPERTY_NAME;
36  import static org.junit.jupiter.api.Assertions.assertThrows;
37  
38  
39  
40  
41  @IntegrationTest("src/test/projects/mandatory-clean")
42  public class MandatoryCleanTest {
43  
44      private static final String MODULE_NAME_1 = "org.apache.maven.caching.test.simple:non-forked-module";
45      private static final String MODULE_NAME_2 = "org.apache.maven.caching.test.simple:forked-module";
46      private static final String CACHE_BUILD_LOG = "Found cached build, restoring %s from cache";
47  
48      @Test
49      void simple(Verifier verifier) throws VerificationException, IOException {
50  
51          verifier.setAutoclean(false);
52          Path tempDirectory = Files.createTempDirectory("simple-mandatory-clean");
53          verifier.getCliOptions().clear();
54          verifier.addCliOption("-D" + CACHE_LOCATION_PROPERTY_NAME + "=" + tempDirectory.toAbsolutePath());
55  
56          verifier.setLogFileName("../log-1.txt");
57          verifier.executeGoal("verify");
58          verifier.verifyErrorFreeLog();
59          List<String> cacheSkippedBuild1 = LogFileUtils.findLinesContainingTextsInLogs(
60                  verifier, "Cache storing is skipped since there was no \"clean\" phase.");
61          Assertions.assertEquals(2, cacheSkippedBuild1.size(), "Expected 2 skipped module caching");
62  
63          assertThrows(
64                  VerificationException.class,
65                  () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_1)),
66                  "not expected to be loaded from the cache");
67          assertThrows(
68                  VerificationException.class,
69                  () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_2)),
70                  "not expected to be loaded from the cache");
71  
72          verifier.setLogFileName("../log-2.txt");
73          verifier.executeGoals(Arrays.asList("clean", "verify"));
74          verifier.verifyErrorFreeLog();
75          List<String> cacheSkippedBuild2 = LogFileUtils.findLinesContainingTextsInLogs(
76                  verifier, "Cache storing is skipped since there was no \"clean\" phase.");
77          Assertions.assertEquals(0, cacheSkippedBuild2.size(), "Expected 2 skipped module caching");
78          assertThrows(
79                  VerificationException.class,
80                  () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_1)),
81                  "not expected to be loaded from the cache");
82          assertThrows(
83                  VerificationException.class,
84                  () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_2)),
85                  "not expected to be loaded from the cache");
86  
87          verifier.setLogFileName("../log-3.txt");
88          verifier.executeGoal("verify");
89          verifier.verifyErrorFreeLog();
90          List<String> cacheSkippedBuild3 = LogFileUtils.findLinesContainingTextsInLogs(
91                  verifier, "Cache storing is skipped since there was no \"clean\" phase.");
92          Assertions.assertEquals(0, cacheSkippedBuild3.size(), "loading from cache, no more caching required");
93          
94          verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_1));
95          verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_2));
96      }
97  
98      @Test
99      void disabledViaProperty(Verifier verifier) throws VerificationException {
100 
101         verifier.setAutoclean(false);
102 
103         verifier.setLogFileName("../log-1.txt");
104         verifier.executeGoal("verify");
105         verifier.verifyErrorFreeLog();
106         List<String> cacheSkippedBuild1 = LogFileUtils.findLinesContainingTextsInLogs(
107                 verifier, "Cache storing is skipped since there was no \"clean\" phase.");
108         Assertions.assertEquals(2, cacheSkippedBuild1.size(), "Expected 2 skipped module caching");
109 
110         assertThrows(
111                 VerificationException.class,
112                 () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_1)),
113                 "not expected to be loaded from the cache");
114         assertThrows(
115                 VerificationException.class,
116                 () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_2)),
117                 "not expected to be loaded from the cache");
118 
119         verifier.setLogFileName("../log-2.txt");
120         verifier.getCliOptions().clear();
121         
122         verifier.addCliOption("-D" + CacheConfigImpl.MANDATORY_CLEAN + "=true");
123         verifier.executeGoal("verify");
124         verifier.verifyErrorFreeLog();
125         List<String> cacheSkippedBuild2 = LogFileUtils.findLinesContainingTextsInLogs(
126                 verifier, "Cache storing is skipped since there was no \"clean\" phase.");
127         Assertions.assertEquals(2, cacheSkippedBuild2.size(), "Expected 2 skipped module caching");
128 
129         assertThrows(
130                 VerificationException.class,
131                 () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_1)),
132                 "not expected to be loaded from the cache");
133         assertThrows(
134                 VerificationException.class,
135                 () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_2)),
136                 "not expected to be loaded from the cache");
137 
138         
139         verifier.getCliOptions().clear();
140         verifier.addCliOption("-D" + CacheConfigImpl.MANDATORY_CLEAN + "=false");
141         verifier.setLogFileName("../log-3.txt");
142         verifier.executeGoal("verify");
143         verifier.verifyErrorFreeLog();
144         List<String> cacheSkippedBuild3 = LogFileUtils.findLinesContainingTextsInLogs(
145                 verifier, "Cache storing is skipped since there was no \"clean\" phase.");
146         Assertions.assertEquals(0, cacheSkippedBuild3.size(), "Expected 2 skipped module caching");
147         assertThrows(
148                 VerificationException.class,
149                 () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_1)),
150                 "not expected to be loaded from the cache");
151         assertThrows(
152                 VerificationException.class,
153                 () -> verifier.verifyTextInLog(String.format(CACHE_BUILD_LOG, MODULE_NAME_2)),
154                 "not expected to be loaded from the cache");
155     }
156 }