1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.rat.policy;
20
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.assertNull;
24
25 import java.util.Collections;
26 import java.util.SortedSet;
27
28 import org.apache.rat.Defaults;
29 import org.apache.rat.api.Document;
30 import org.apache.rat.api.MetaData;
31 import org.apache.rat.api.MetaData.Datum;
32 import org.apache.rat.license.ILicenseFamily;
33 import org.apache.rat.license.LicenseFamilySetFactory;
34 import org.apache.rat.license.LicenseSetFactory.LicenseFilter;
35 import org.apache.rat.testhelpers.TestingLicense;
36 import org.apache.rat.testhelpers.TestingLocation;
37 import org.junit.jupiter.api.BeforeEach;
38 import org.junit.jupiter.api.Test;
39
40
41
42
43 public class DefaultPolicyTest {
44
45
46
47 private static final int NUMBER_OF_DEFAULT_ACCEPTED_LICENSES = 11;
48
49 private static final ILicenseFamily[] APPROVED_FAMILIES = {
50 makeFamily("AL", "Apache License Version 2.0"),
51 makeFamily("BSD-3", "BSD 3 clause"),
52 makeFamily("CDDL1", "COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0"),
53 makeFamily("GEN", "Generated Files"),
54 makeFamily("GPL1", "GNU General Public License, version 1"),
55 makeFamily("GPL2", "GNU General Public License, version 2"),
56 makeFamily("GPL3", "GNU General Public License, version 3"),
57 makeFamily("MIT", "The MIT License"),
58 makeFamily("OASIS", "OASIS Open License"),
59 makeFamily("W3CD", "W3C Document Copyright"),
60 makeFamily("W3C", "W3C Software Copyright"),
61 };
62
63 private Document document;
64 private DefaultPolicy policy;
65 private Defaults defaults;
66
67
68 @BeforeEach
69 public void setUp() throws Exception {
70 defaults = Defaults.builder().build();
71 policy = new DefaultPolicy(defaults.getLicenseFamilies(LicenseFilter.approved));
72 document = new TestingLocation("subject");
73 }
74
75 private void assertApproval(boolean pApproved) {
76 assertEquals(pApproved, MetaData.RAT_APPROVED_LICENSE_VALUE_TRUE
77 .equals(document.getMetaData().value(MetaData.RAT_URL_APPROVED_LICENSE)));
78 }
79
80 private void setMetadata(ILicenseFamily family) {
81 document.getMetaData().reportOnLicense(new TestingLicense(family));
82 }
83
84 private static ILicenseFamily makeFamily(String category, String name) {
85 return ILicenseFamily.builder().setLicenseFamilyCategory(category)
86 .setLicenseFamilyName(name).build();
87 }
88
89 @Test
90 public void testCount() {
91 assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, policy.getApprovedLicenseNames().size());
92 }
93
94 @Test
95 public void testApprovedLicenses() {
96
97 assertEquals(NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, APPROVED_FAMILIES.length, "Approved license count mismatch");
98 for (ILicenseFamily family : APPROVED_FAMILIES) {
99 setMetadata(family);
100 policy.analyse(document);
101 assertApproval(true);
102 }
103 }
104
105 @Test
106 public void testUnApprovedLicenses() {
107 SortedSet<ILicenseFamily> all = defaults.getLicenseFamilies(LicenseFilter.all);
108 SortedSet<ILicenseFamily> unapproved = LicenseFamilySetFactory.emptyLicenseFamilySet();
109 unapproved.addAll(all);
110 unapproved.removeAll(defaults.getLicenseFamilies(LicenseFilter.approved));
111
112 assertEquals(all.size()-NUMBER_OF_DEFAULT_ACCEPTED_LICENSES, unapproved.size(), "Unapproved license count mismatch");
113 for (ILicenseFamily family : unapproved) {
114 setMetadata(family);
115 policy.analyse(document);
116 assertApproval(false);
117 }
118 }
119
120
121 @Test
122 public void testUnknownFamily() throws Exception {
123 setMetadata(makeFamily("?????", "Unknown document"));
124 policy.analyse(document);
125 assertApproval(false);
126 }
127
128 @Test
129 public void testAddNewApprovedLicenseAndDefaults() {
130 ILicenseFamily testingFamily = makeFamily("test", "Testing License Family");
131 setMetadata(testingFamily);
132 policy.analyse(document);
133 assertApproval(false);
134
135 policy.add(testingFamily);
136 assertNotNull(LicenseFamilySetFactory.search(testingFamily, policy.getApprovedLicenseNames()), "Did not properly add ILicenseFamily");
137 policy.analyse(document);
138 assertApproval(true);
139 }
140
141 @Test
142 public void testAddNewApprovedLicenseNoDefaults() {
143 policy = new DefaultPolicy(Collections.emptySet());
144 assertEquals(0, policy.getApprovedLicenseNames().size());
145 ILicenseFamily testingFamily = makeFamily("test", "Testing License Family");
146 setMetadata(testingFamily);
147 policy.analyse(document);
148 assertApproval(false);
149
150 policy.add(testingFamily);
151 assertEquals(1, policy.getApprovedLicenseNames().size());
152 assertNotNull(LicenseFamilySetFactory.search(testingFamily, policy.getApprovedLicenseNames()), "Did not properly add ILicenseFamily");
153 policy.analyse(document);
154 assertApproval(true);
155 }
156
157 @Test
158 public void testNonStandardDocumentsDoNotFailLicenseTests() {
159 Datum[] nonStandardDocuments = {
160 MetaData.RAT_DOCUMENT_CATEGORY_DATUM_NOTICE,
161 MetaData.RAT_DOCUMENT_CATEGORY_DATUM_ARCHIVE,
162 MetaData.RAT_DOCUMENT_CATEGORY_DATUM_BINARY
163 };
164
165 for (Datum d : nonStandardDocuments) {
166 document = new TestingLocation("subject");
167 document.getMetaData().set(d);
168 policy.analyse(document);
169 assertNull( document.getMetaData().get(MetaData.RAT_URL_APPROVED_LICENSE), "failed on "+d.getValue());
170 }
171 }
172
173 @Test
174 public void testUnclassifiedDocumentsDoNotFailLicenseTests() {
175 document.getMetaData().set(MetaData.RAT_DOCUMENT_CATEGORY_DATUM_STANDARD);
176 policy.analyse(document);
177 assertApproval( false );
178 }
179
180 @Test
181 public void testReportLicenseApprovalClaim() {
182 assertNull( document.getMetaData().get(MetaData.RAT_URL_APPROVED_LICENSE));
183
184
185 policy.reportLicenseApprovalClaim(document, false);
186 assertEquals( MetaData.RAT_APPROVED_LICENSE_DATUM_FALSE, document.getMetaData().get(MetaData.RAT_URL_APPROVED_LICENSE));
187
188 policy.reportLicenseApprovalClaim(document, true);
189 assertEquals( MetaData.RAT_APPROVED_LICENSE_DATUM_TRUE, document.getMetaData().get(MetaData.RAT_URL_APPROVED_LICENSE));
190
191 }
192 }