1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat.analysis;
20
21 import static org.assertj.core.api.Assertions.assertThat;
22 import static org.assertj.core.api.Assertions.assertThatThrownBy;
23
24 import java.io.File;
25 import java.io.StringWriter;
26
27 import java.net.URISyntaxException;
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.stream.Stream;
31 import org.apache.rat.Defaults;
32 import org.apache.rat.ReportConfiguration;
33 import org.apache.rat.api.Document;
34 import org.apache.rat.document.DocumentNameMatcher;
35 import org.apache.rat.document.DocumentAnalyser;
36 import org.apache.rat.document.DocumentName;
37 import org.apache.rat.document.FileDocument;
38 import org.apache.rat.document.RatDocumentAnalysisException;
39 import org.apache.rat.report.claim.SimpleXmlClaimReporter;
40 import org.apache.rat.report.xml.writer.XmlWriter;
41 import org.apache.rat.test.utils.Resources;
42 import org.apache.rat.testhelpers.TestingDocument;
43 import org.apache.rat.testhelpers.TestingDocumentAnalyser;
44 import org.apache.rat.testhelpers.TextUtils;
45 import org.assertj.core.util.Files;
46 import org.junit.jupiter.api.BeforeEach;
47 import org.junit.jupiter.api.Test;
48 import org.junit.jupiter.params.ParameterizedTest;
49 import org.junit.jupiter.params.provider.Arguments;
50 import org.junit.jupiter.params.provider.MethodSource;
51
52 public class AnalyserFactoryTest {
53
54 private final DocumentName basedir;
55
56 private StringWriter out;
57 private SimpleXmlClaimReporter reporter;
58 private DocumentAnalyser analyser;
59
60 AnalyserFactoryTest() {
61 basedir = DocumentName.builder(new File(Files.currentFolder(), Resources.SRC_TEST_RESOURCES)).build();
62 }
63
64 @BeforeEach
65 public void setUp() {
66 out = new StringWriter();
67 reporter = new SimpleXmlClaimReporter(new XmlWriter(out));
68 ReportConfiguration config = new ReportConfiguration();
69 config.addLicense(UnknownLicense.INSTANCE);
70 analyser = AnalyserFactory.createConfiguredAnalyser(config);
71 }
72
73 @Test
74 public void standardTypeAnalyser() throws Exception {
75 final Document document = new FileDocument(basedir,
76 Resources.getExampleResource("exampleData/Text.txt"), DocumentNameMatcher.MATCHES_ALL);
77 analyser.analyse(document);
78 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.STANDARD);
79 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("text/plain");
80 assertThat(document.getMetaData().licenses().count()).isEqualTo(1);
81 document.getMetaData().licenses().forEach(lic -> assertThat(lic).isEqualTo(UnknownLicense.INSTANCE));
82 }
83
84 @Test
85 public void noteTypeAnalyser() throws Exception {
86 final Document document = new FileDocument(basedir,
87 Resources.getExampleResource("exampleData/LICENSE"), DocumentNameMatcher.MATCHES_ALL);
88 analyser.analyse(document);
89 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.NOTICE);
90 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("text/plain");
91 }
92
93 @Test
94 public void binaryTypeAnalyser() throws Exception {
95 final Document document = new FileDocument(basedir,
96 Resources.getExampleResource("exampleData/Image.png"), DocumentNameMatcher.MATCHES_ALL);
97 analyser.analyse(document);
98 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.BINARY);
99 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("image/png");
100 }
101
102 @Test
103 public void archiveTypeAnalyserTest() throws Exception {
104 final Document document = new FileDocument(basedir,
105 Resources.getExampleResource("exampleData/dummy.jar"), DocumentNameMatcher.MATCHES_ALL);
106 Defaults defaults = Defaults.builder().build();
107 ReportConfiguration config = new ReportConfiguration();
108 config.setFrom(defaults);
109 analyser = AnalyserFactory.createConfiguredAnalyser(config);
110 analyser.analyse(document);
111 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.ARCHIVE);
112 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("application/java-archive");
113 }
114
115 private static Stream<Arguments> archiveProcessingTestData() {
116 List<Arguments> lst = new ArrayList<>();
117 lst.add(Arguments.of(ReportConfiguration.Processing.NOTIFICATION, 0));
118 lst.add(Arguments.of(ReportConfiguration.Processing.PRESENCE, 1));
119 lst.add(Arguments.of(ReportConfiguration.Processing.ABSENCE, 2));
120 return lst.stream();
121 }
122
123 @ParameterizedTest
124 @MethodSource("archiveProcessingTestData")
125 public void archiveProcessingTest(ReportConfiguration.Processing archiveProcessing, int expectedLicenseCount) throws Exception {
126 final Document document = new FileDocument(basedir,
127 Resources.getExampleResource("exampleData/dummy.jar"), DocumentNameMatcher.MATCHES_ALL);
128 Defaults defaults = Defaults.builder().build();
129 ReportConfiguration config = new ReportConfiguration();
130 config.setFrom(defaults);
131 config.setArchiveProcessing(archiveProcessing);
132 document.getMetaData().setApprovalPredicate(config.getLicenseSetFactory().getApprovedLicensePredicate());
133 analyser = AnalyserFactory.createConfiguredAnalyser(config);
134 analyser.analyse(document);
135 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.ARCHIVE);
136 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("application/java-archive");
137 assertThat(document.getMetaData().licenses().count()).as(archiveProcessing.desc() + " count").isEqualTo(expectedLicenseCount);
138 }
139
140 @Test
141 public void missingFileTest() throws URISyntaxException {
142 final Document document = new FileDocument(basedir,
143 new File(Resources.getExampleResource("exampleData"), "not_a_real_file"), DocumentNameMatcher.MATCHES_ALL);
144 Defaults defaults = Defaults.builder().build();
145 ReportConfiguration config = new ReportConfiguration();
146 config.setFrom(defaults);
147 analyser = AnalyserFactory.createConfiguredAnalyser(config);
148 assertThatThrownBy(() -> analyser.analyse(document)).isInstanceOf(RatDocumentAnalysisException.class);
149 }
150
151 @Test
152 public void archiveTypeAnalyser() throws Exception {
153 final Document document = new FileDocument(basedir,
154 Resources.getExampleResource("exampleData/dummy.jar"), DocumentNameMatcher.MATCHES_ALL);
155 analyser.analyse(document);
156 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.ARCHIVE);
157 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("application/java-archive");
158 }
159
160 @Test
161 public void RAT211_bmp_Test() throws Exception {
162 final Document document = new FileDocument(basedir,
163 Resources.getResourceFile("/jira/RAT211/side_left.bmp"), DocumentNameMatcher.MATCHES_ALL);
164 analyser.analyse(document);
165 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.BINARY);
166 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("image/bmp");
167 }
168
169 @Test
170 public void RAT211_dia_Test() throws Exception {
171 final Document document = new FileDocument(basedir,
172 Resources.getResourceFile("/jira/RAT211/leader-election-message-arrives.dia"), DocumentNameMatcher.MATCHES_ALL);
173 analyser.analyse(document);
174 assertThat(document.getMetaData().getDocumentType()).isEqualTo(Document.Type.ARCHIVE);
175 assertThat(document.getMetaData().getMediaType().toString()).isEqualTo("application/gzip");
176 }
177
178 @Test
179 public void RAT147_unix_Test() throws Exception {
180 final Document document = new FileDocument(basedir,
181 Resources.getResourceFile("/jira/RAT147/unix-newlines.txt.bin"), DocumentNameMatcher.MATCHES_ALL);
182 analyser.analyse(document);
183 reporter.report(document);
184 String result = out.toString();
185 TextUtils.assertPatternInTarget(
186 "<resource name='/jira/RAT147/unix-newlines.txt.bin' type='STANDARD'",
187 result);
188 }
189
190 @Test
191 public void RAT147_windows_Test() throws Exception {
192 final Document document = new FileDocument(basedir,
193 Resources.getResourceFile("/jira/RAT147/windows-newlines.txt.bin"), DocumentNameMatcher.MATCHES_ALL);
194 analyser.analyse(document);
195 reporter.report(document);
196 String result = out.toString();
197 TextUtils.assertPatternInTarget(
198 "<resource name='/jira/RAT147/windows-newlines.txt.bin' type='STANDARD'",
199 result);
200 }
201
202 @Test
203 public void standardNotificationTest() throws Exception {
204 Defaults defaults = Defaults.builder().build();
205 ReportConfiguration config = new ReportConfiguration();
206 config.setFrom(defaults);
207 config.setStandardProcessing(ReportConfiguration.Processing.NOTIFICATION);
208 analyser = AnalyserFactory.createConfiguredAnalyser(config);
209
210 Document document = new FileDocument(basedir,
211 Resources.getExampleResource("exampleData/Text.txt"), DocumentNameMatcher.MATCHES_ALL);
212 analyser.analyse(document);
213 assertThat(document.getMetaData().detectedLicense()).isFalse();
214
215 document = new FileDocument(basedir,
216 Resources.getExampleResource("exampleData/sub/Empty.txt"), DocumentNameMatcher.MATCHES_ALL);
217 analyser.analyse(document);
218 assertThat(document.getMetaData().detectedLicense()).isFalse();
219 }
220
221 @Test
222 public void standardAbsenceTest() throws Exception {
223 Defaults defaults = Defaults.builder().build();
224 ReportConfiguration config = new ReportConfiguration();
225 config.setFrom(defaults);
226 config.setStandardProcessing(ReportConfiguration.Processing.ABSENCE);
227 analyser = AnalyserFactory.createConfiguredAnalyser(config);
228
229 Document document = new FileDocument(basedir,
230 Resources.getExampleResource("exampleData/Text.txt"), DocumentNameMatcher.MATCHES_ALL);
231 analyser.analyse(document);
232 assertThat(document.getMetaData().detectedLicense()).isTrue();
233
234 document = new FileDocument(basedir,
235 Resources.getExampleResource("exampleData/sub/Empty.txt"), DocumentNameMatcher.MATCHES_ALL);
236 analyser.analyse(document);
237 assertThat(document.getMetaData().detectedLicense()).isTrue();
238 }
239
240 @Test
241 public void standardPresenceTest() throws Exception {
242 Defaults defaults = Defaults.builder().build();
243 ReportConfiguration config = new ReportConfiguration();
244 config.setFrom(defaults);
245 config.setStandardProcessing(ReportConfiguration.Processing.PRESENCE);
246 analyser = AnalyserFactory.createConfiguredAnalyser(config);
247
248 Document document = new FileDocument(basedir,
249 Resources.getExampleResource("exampleData/Text.txt"), DocumentNameMatcher.MATCHES_ALL);
250 analyser.analyse(document);
251 assertThat(document.getMetaData().detectedLicense()).isTrue();
252
253 document = new FileDocument(basedir,
254 Resources.getExampleResource("exampleData/sub/Empty.txt"), DocumentNameMatcher.MATCHES_ALL);
255 analyser.analyse(document);
256 assertThat(document.getMetaData().detectedLicense()).isFalse();
257 }
258
259 @Test
260 public void testMultiplexer() throws Exception {
261 TestingDocumentAnalyser[] analysers = {
262 new TestingDocumentAnalyser(),
263 new TestingDocumentAnalyser(),
264 new TestingDocumentAnalyser()
265 };
266 DocumentAnalyser multiplexer = AnalyserFactory.createMultiplexer(analysers);
267 TestingDocument document = new TestingDocument();
268
269 multiplexer.analyse(document);
270 for (int i = 0; i < analysers.length; i++) {
271 assertThat(analysers[i].matches.size()).as("Matcher " + i).isEqualTo(1);
272 assertThat(analysers[i].matches.get(0)).as("Matcher " + i).isEqualTo(document);
273 }
274 }
275 }