1 package org.onap.schema;
3 import org.apache.commons.io.IOUtils;
5 import org.onap.crud.exception.CrudException;
8 import java.io.FileInputStream;
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.util.Arrays;
12 import java.util.ArrayList;
13 import java.util.Comparator;
14 import java.util.Comparator;
15 import java.util.concurrent.ConcurrentHashMap;
16 import java.util.HashMap;
18 import java.util.List;
19 import java.util.regex.Matcher;
20 import java.util.regex.Pattern;
21 import java.util.stream.Collectors;
23 import static org.junit.Assert.*;
25 public class RelationshipSchemaTest {
27 final static Pattern rulesFilePattern = Pattern.compile("DbEdgeRules(.*).json");
28 final static Pattern propsFilePattern = Pattern.compile("edge_properties_(.*).json");
29 final static Pattern versionPattern = Pattern.compile(".*(v\\d+).json");
33 public void shouldLoadAllTheVersionsInDirectory() throws Exception {
34 Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
35 loadRelations(versionContextMap);
36 assertTrue(versionContextMap.keySet().size() >= 0);
40 public void shouldContainValidTypes() throws Exception {
41 Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
42 loadRelations(versionContextMap);
43 assertTrue(versionContextMap.get("v11").isValidType("groupsResourcesIn"));
44 assertTrue(versionContextMap.get("v11").isValidType("uses"));
45 assertFalse(versionContextMap.get("v11").isValidType("notValidType"));
49 public void shouldLookUpByRelation() throws Exception {
50 Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
51 loadRelations(versionContextMap);
52 assertNotNull(versionContextMap.get("v11").lookupRelation("availability-zone:complex:groupsResourcesIn"));
53 assertTrue(versionContextMap.get("v11")
54 .lookupRelation("availability-zone:complex:groupsResourcesIn").containsKey("usesResource"));
58 public void shouldLookUpByRelationType() throws Exception {
59 Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
60 loadRelations(versionContextMap);
61 assertNotNull(versionContextMap.get("v11").lookupRelationType("groupsResourcesIn"));
62 assertTrue(versionContextMap.get("v11")
63 .lookupRelation("availability-zone:complex:groupsResourcesIn").containsKey("usesResource"));
66 private void loadRelations(Map<String, RelationshipSchema> map){
67 ClassLoader classLoader = getClass().getClassLoader();
68 File dir = new File(classLoader.getResource("model").getFile());
69 File[] allFiles = dir.listFiles((d, name) ->
70 (propsFilePattern.matcher(name).matches() || rulesFilePattern.matcher(name).matches()));
72 Arrays.stream(allFiles).sorted(Comparator.comparing(File::getName))
73 .collect(Collectors.groupingBy(f -> myMatcher(versionPattern, f.getName())))
74 .forEach((e, f) -> map.put(e, jsonFilesLoader(f)));
79 private RelationshipSchema jsonFilesLoader (List<File> files) {
80 List<String> fileContents = new ArrayList<>();
81 RelationshipSchema rsSchema = null;
82 for (File f : files) {
83 fileContents.add(jsonToString(f));
87 rsSchema = new RelationshipSchema(fileContents);
88 } catch (CrudException e) {
90 } catch (IOException e) {
97 private String jsonToString (File file) {
98 InputStream inputStream = null;
99 String content = null;
100 HashMap<String,Object> result = null;
103 inputStream = new FileInputStream(file);
104 content = IOUtils.toString(inputStream, "UTF-8");
105 } catch (IOException e) {
112 private String myMatcher (Pattern p, String s) {
113 Matcher m = p.matcher(s);
114 return m.matches() ? m.group(1) : "";