95b3dde82a374f1a3f69a7a38ad69304ffbde3b3
[aai/gizmo.git] / src / test / java / org / onap / schema / RelationshipSchemaTest.java
1 package org.onap.schema;
2
3 import org.apache.commons.io.IOUtils;
4 import org.junit.Test;
5 import org.onap.crud.exception.CrudException;
6
7 import java.io.File;
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;
17 import java.util.Map;
18 import java.util.List;
19 import java.util.regex.Matcher;
20 import java.util.regex.Pattern;
21 import java.util.stream.Collectors;
22
23 import static org.junit.Assert.*;
24
25 public class RelationshipSchemaTest {
26
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");
30
31
32     @Test
33     public void shouldLoadAllTheVersionsInDirectory() throws Exception {
34         Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
35         loadRelations(versionContextMap);
36         assertTrue(versionContextMap.keySet().size() >= 0);
37     }
38
39     @Test
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"));
46     }
47
48     @Test
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"));
55     }
56
57     @Test
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"));
64     }
65
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()));
71
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)));
75
76     }
77
78
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));
84         }
85
86         try {
87             rsSchema = new RelationshipSchema(fileContents);
88         } catch (CrudException e) {
89             e.printStackTrace();
90         } catch (IOException e) {
91             e.printStackTrace();
92         }
93
94         return rsSchema;
95     }
96
97     private String jsonToString (File file) {
98         InputStream inputStream = null;
99         String content = null;
100         HashMap<String,Object> result = null;
101
102         try {
103             inputStream = new FileInputStream(file);
104             content =  IOUtils.toString(inputStream, "UTF-8");
105         } catch (IOException e) {
106             e.printStackTrace();
107         }
108
109         return content;
110     }
111
112     private String myMatcher (Pattern p, String s) {
113         Matcher m = p.matcher(s);
114         return m.matches() ? m.group(1) : "";
115     }
116 }