Commit includes ControlLoopPolicy API and bugfixes
[policy/engine.git] / ECOMP-PDP / src / test / java / org / openecomp / policy / pdp / test / conformance / ConformanceTestSet.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ECOMP-PDP
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.policy.pdp.test.conformance;
22
23 import java.io.File;
24 import java.io.IOException;
25 import java.nio.file.FileVisitResult;
26 import java.nio.file.FileVisitor;
27 import java.nio.file.Files;
28 import java.nio.file.Path;
29 import java.nio.file.attribute.BasicFileAttributes;
30 import java.util.ArrayList;
31 import java.util.Collections;
32 import java.util.HashMap;
33 import java.util.Iterator;
34 import java.util.List;
35 import java.util.Map;
36
37 import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
38 import org.openecomp.policy.common.logging.flexlogger.Logger; 
39
40 /**
41  * ConformanceTestSet represents a collection of <code>ConformanceTest</code>s ordered by the test name.  It has methods for
42  * scanning a directory to generate an ordered set.
43  * 
44  * @version $Revision: 1.1 $
45  */
46 public class ConformanceTestSet {
47         private static final Logger logger                                              = FlexLogger.getLogger(ConformanceTestSet.class);
48         private List<ConformanceTest> listConformanceTests      = new ArrayList<>();
49         
50         protected List<ConformanceTest> getListConformanceTests() {
51                 return this.listConformanceTests;
52         }
53         
54         protected ConformanceTestSet() {
55                 
56         }
57         
58         private static String getTestName(String fileName, int itemPos) {
59                 return (itemPos == 0 ? "NULL" : fileName.substring(0, itemPos));
60         }
61         
62         private static String getTestName(File file) {
63                 String fileName = file.getName();
64                 int itemPos             = fileName.indexOf("Policy");
65                 if (itemPos >= 0) {
66                         return getTestName(fileName, itemPos);
67                 } else if ((itemPos = fileName.indexOf("Request")) >= 0) {
68                         return getTestName(fileName, itemPos);
69                 } else if ((itemPos = fileName.indexOf("Response")) >= 0) {
70                         return getTestName(fileName, itemPos);
71                 } else if ((itemPos = fileName.indexOf("Repository")) >= 0) {
72                         return getTestName(fileName, itemPos);
73                 } else {
74                         return null;
75                 }
76         }
77         
78         public static ConformanceTestSet loadDirectory(File fileDir) throws IOException {
79                 final Map<String,ConformanceTest> mapConformanceTests   = new HashMap<String,ConformanceTest>();
80                 
81                 Files.walkFileTree(fileDir.toPath(), new FileVisitor<Path>() {
82                         @Override
83                         public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
84                                 logger.info("Scanning directory " + dir.getFileName());
85                                 return FileVisitResult.CONTINUE;
86                         }
87
88                         @Override
89                         public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
90                                 File fileVisited        = file.toFile();
91                                 String fileName         = fileVisited.getName();
92                                 if (fileName.endsWith(".xml") || fileName.endsWith(".properties")) {
93                                         String testName = getTestName(fileVisited);
94                                         if (testName != null) {
95                                                 ConformanceTest conformanceTest = mapConformanceTests.get(testName);
96                                                 if (conformanceTest == null) {
97                                                         logger.info("Added test " + testName);
98                                                         conformanceTest = new ConformanceTest(testName);
99                                                         mapConformanceTests.put(testName, conformanceTest);
100                                                 }
101                                                 if (fileName.endsWith("Policy.xml")) {
102                                                         conformanceTest.getRepository().addRootPolicy(fileVisited);
103                                                 } else if (fileName.endsWith("Repository.properties")) {
104                                                         conformanceTest.getRepository().load(fileVisited);
105                                                 } else if (fileName.endsWith("Request.xml")) {
106                                                         conformanceTest.setRequest(fileVisited);
107                                                 } else if (fileName.endsWith("Response.xml")) {
108                                                         conformanceTest.setResponse(fileVisited);
109                                                 }
110                                         }
111                                 }
112                                 return FileVisitResult.CONTINUE;
113                         }
114
115                         @Override
116                         public FileVisitResult visitFileFailed(Path file, IOException exc)      throws IOException {
117                                 logger.warn("Skipped " + file.getFileName());
118                                 return FileVisitResult.CONTINUE;
119                         }
120
121                         @Override
122                         public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
123                                 return FileVisitResult.CONTINUE;
124                         }
125                 });
126                 
127                 /*
128                  * Sort the keyset and pull out the tests that have the required components
129                  */
130                 List<String> listTestNames      = new ArrayList<>();
131                 listTestNames.addAll(mapConformanceTests.keySet());
132                 Collections.sort(listTestNames);
133                 
134                 ConformanceTestSet conformanceTestSet   = new ConformanceTestSet();
135                 Iterator<String> iterTestNames  = listTestNames.iterator();
136                 while (iterTestNames.hasNext()) {
137                         ConformanceTest conformanceTest = mapConformanceTests.get(iterTestNames.next());
138                         if (conformanceTest.isComplete()) {
139                                 conformanceTestSet.addConformanceTest(conformanceTest);
140                                 logger.debug("Added conformance test " + conformanceTest.getTestName());
141                         } else {
142                                 logger.warn("Incomplete conformance test " + conformanceTest.getTestName());
143                         }
144                 }
145                 
146                 return conformanceTestSet;
147                 
148         }
149
150         public Iterator<ConformanceTest> getConformanceTests() {
151                 return this.listConformanceTests.iterator();
152         }
153         
154         public void addConformanceTest(ConformanceTest conformanceTest) {
155                 this.listConformanceTests.add(conformanceTest);
156         }
157         
158         public void addConformanceTestSet(ConformanceTestSet conformanceTestSet) {
159                 this.listConformanceTests.addAll(conformanceTestSet.getListConformanceTests());
160         }
161         
162         public static void main(String[] args) {
163                 for (String dir : args) {
164                         try {
165                                 ConformanceTestSet conformanceTestSet                   = ConformanceTestSet.loadDirectory(new File(dir));
166                                 Iterator<ConformanceTest> iterConformanceTests  = conformanceTestSet.getConformanceTests();
167                                 if (iterConformanceTests == null) {
168                                         System.out.println("No tests found in " + dir);
169                                 } else {
170                                         System.out.println("Tests found in " + dir);
171                                         while (iterConformanceTests.hasNext()) {
172                                                 System.out.println(iterConformanceTests.next().toString());
173                                         }
174                                 }
175                         } catch (Exception ex) {
176                                 ex.printStackTrace(System.err);
177                         }
178                 }
179         }
180 }