2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.policy.pdp.test.conformance;
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;
37 import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
38 import org.openecomp.policy.common.logging.flexlogger.Logger;
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.
44 * @version $Revision: 1.1 $
46 public class ConformanceTestSet {
47 private static final Logger logger = FlexLogger.getLogger(ConformanceTestSet.class);
48 private List<ConformanceTest> listConformanceTests = new ArrayList<>();
50 protected List<ConformanceTest> getListConformanceTests() {
51 return this.listConformanceTests;
54 protected ConformanceTestSet() {
58 private static String getTestName(String fileName, int itemPos) {
59 return (itemPos == 0 ? "NULL" : fileName.substring(0, itemPos));
62 private static String getTestName(File file) {
63 String fileName = file.getName();
64 int itemPos = fileName.indexOf("Policy");
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);
78 public static ConformanceTestSet loadDirectory(File fileDir) throws IOException {
79 final Map<String,ConformanceTest> mapConformanceTests = new HashMap<String,ConformanceTest>();
81 Files.walkFileTree(fileDir.toPath(), new FileVisitor<Path>() {
83 public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
84 logger.info("Scanning directory " + dir.getFileName());
85 return FileVisitResult.CONTINUE;
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);
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);
112 return FileVisitResult.CONTINUE;
116 public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
117 logger.warn("Skipped " + file.getFileName());
118 return FileVisitResult.CONTINUE;
122 public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
123 return FileVisitResult.CONTINUE;
128 * Sort the keyset and pull out the tests that have the required components
130 List<String> listTestNames = new ArrayList<>();
131 listTestNames.addAll(mapConformanceTests.keySet());
132 Collections.sort(listTestNames);
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());
142 logger.warn("Incomplete conformance test " + conformanceTest.getTestName());
146 return conformanceTestSet;
150 public Iterator<ConformanceTest> getConformanceTests() {
151 return this.listConformanceTests.iterator();
154 public void addConformanceTest(ConformanceTest conformanceTest) {
155 this.listConformanceTests.add(conformanceTest);
158 public void addConformanceTestSet(ConformanceTestSet conformanceTestSet) {
159 this.listConformanceTests.addAll(conformanceTestSet.getListConformanceTests());
162 public static void main(String[] args) {
163 for (String dir : args) {
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);
170 System.out.println("Tests found in " + dir);
171 while (iterConformanceTests.hasNext()) {
172 System.out.println(iterConformanceTests.next().toString());
175 } catch (Exception ex) {
176 ex.printStackTrace(System.err);