View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
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   * Tests the Default policy imlementatin.
42   */
43  public class DefaultPolicyTest {
44      /**
45       * This is the number of accepted licenses in the default license file : /org/apache/rat/default.xml
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 }