d35cc4f0409b4f72322d6ba20732dbc4f20ea100
[aai/aai-common.git] / aai-core / src / test / java / org / onap / aai / util / genxsd / HTMLfromOXMTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017-2018 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 package org.onap.aai.util.genxsd;
21
22 import static org.hamcrest.CoreMatchers.is;
23 import static org.junit.Assert.*;
24
25 import java.io.BufferedWriter;
26 import java.io.File;
27 import java.io.FileWriter;
28 import java.io.IOException;
29 import java.nio.charset.Charset;
30 import java.nio.file.Files;
31 import java.nio.file.Path;
32 import java.nio.file.Paths;
33
34 import org.junit.Before;
35 import org.junit.BeforeClass;
36 import org.junit.Test;
37 import org.onap.aai.config.SwaggerGenerationConfiguration;
38 import org.onap.aai.setup.SchemaVersion;
39 import org.onap.aai.setup.SchemaVersions;
40 import org.junit.runner.RunWith;
41 import org.onap.aai.edges.EdgeIngestor;
42 import org.onap.aai.nodes.NodeIngestor;
43 import org.onap.aai.serialization.queryformats.QueryFormatTestHelper;
44 import org.onap.aai.setup.SchemaLocationsBean;
45 import org.onap.aai.testutils.TestUtilConfigTranslatorforBusiness;
46 import org.onap.aai.util.AAIConstants;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49 import org.springframework.beans.factory.annotation.Autowired;
50 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
51 import org.springframework.test.context.ContextConfiguration;
52 import org.springframework.test.context.TestPropertySource;
53 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
54 import org.w3c.dom.Element;
55
56
57 @RunWith(SpringJUnit4ClassRunner.class)
58 @ContextConfiguration(classes = {
59                  SchemaVersions.class,
60         SchemaLocationsBean.class,
61         TestUtilConfigTranslatorforBusiness.class,
62         EdgeIngestor.class,
63         NodeIngestor.class,
64                 SwaggerGenerationConfiguration.class
65
66 })
67 @TestPropertySource(properties = {
68                 "schema.uri.base.path = /aai"
69 })
70 public class HTMLfromOXMTest {
71         private static final Logger logger = LoggerFactory.getLogger("HTMLfromOXMTest.class");
72         private static final String OXMFILENAME = "src/test/resources/oxm/business_oxm_v11.xml";
73         public static AnnotationConfigApplicationContext ctx = null;
74         private static String testXML;
75         protected static final String SERVICE_NAME = "JUNIT";
76         
77         
78         @Autowired
79         HTMLfromOXM htmlFromOxm;
80         
81         @Autowired
82         SchemaVersions schemaVersions;
83         
84         @BeforeClass
85         public static void setUpContext() throws Exception {
86                 
87         }
88         @BeforeClass
89     public static void setupBundleconfig() throws Exception {
90         System.setProperty("AJSC_HOME", ".");
91         System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local");
92         System.setProperty("aai.service.name", SERVICE_NAME);
93         QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/");
94     }
95         
96         @Before
97         public void setUp() throws Exception {
98                 XSDElementTest x = new XSDElementTest();
99                 x.setUp();
100                 testXML = x.testXML;
101                 logger.debug(testXML);
102                 BufferedWriter bw = new BufferedWriter(new FileWriter(OXMFILENAME));
103                 bw.write(testXML);
104                 bw.close();
105                     
106         }
107
108         @Test
109         public void testGetDocumentHeader() {
110                 SchemaVersion v = schemaVersions.getAppRootVersion();
111                 String header = null;
112                 try {
113                         htmlFromOxm.setXmlVersion(testXML, v);
114                         htmlFromOxm.setSchemaVersions(schemaVersions);
115                         header = htmlFromOxm.getDocumentHeader();
116                 } catch(Exception e) {
117                         e.printStackTrace();
118                 }
119                 logger.debug("Header:");
120                 logger.debug(header);
121                 assertThat(header, is(HTMLheader()));
122         }
123
124         @Test
125         public void testProcess() {
126                 SchemaVersion v = schemaVersions.getAppRootVersion();
127                 String fileContent = null;
128                 try {
129                         htmlFromOxm.setXmlVersion(testXML, v);
130                         fileContent = htmlFromOxm.process();
131                 } catch(Exception e) {
132                         e.printStackTrace();
133                 }
134                 logger.debug("FileContent-I:");
135                 logger.debug(fileContent);
136                 assertThat(fileContent, is(HTMLresult()));
137         }
138
139         @Test
140         public void testHTMLfromOXMFileVersion() throws IOException {
141                 String outfileName = "testXML.xml";
142                 File XMLfile = new File(outfileName);
143                 XMLfile.createNewFile();
144                 BufferedWriter bw = null;
145                 Charset charset = Charset.forName("UTF-8");
146                 Path path = Paths.get(outfileName);
147                 bw = Files.newBufferedWriter(path, charset);
148                 bw.write(testXML);
149                 bw.close();
150                 SchemaVersion v = schemaVersions.getAppRootVersion();
151                 String fileContent = null;
152                 try {
153                         htmlFromOxm.setXmlVersion(testXML, v);
154                         fileContent = htmlFromOxm.process();
155                 } catch(Exception e) {
156                         e.printStackTrace();
157                 }
158                 XMLfile.delete();
159                 logger.debug("FileContent-I:");
160                 logger.debug(fileContent);
161                 assertThat(fileContent, is(HTMLresult()));
162         }
163
164         @Test
165         public void testHTMLfromOXMStringVersion() {
166                 SchemaVersion v = schemaVersions.getAppRootVersion();
167                 String fileContent = null;
168                 try {
169                         htmlFromOxm.setXmlVersion(testXML, v);
170                         fileContent = htmlFromOxm.process();
171                 } catch(Exception e) {
172                         e.printStackTrace();
173                 }
174                 logger.debug("FileContent-II:");
175                 logger.debug(fileContent);
176                 assertThat(fileContent, is(HTMLresult()));
177         }
178
179         @Test
180         public void testProcessJavaTypeElement() {
181                 String target = "Element=java-type/Customer";
182                 SchemaVersion v = schemaVersions.getAppRootVersion();
183                 Element customer = null;
184                 try {
185                         htmlFromOxm.setXmlVersion(testXML, v);
186                         htmlFromOxm.process();
187                         customer = htmlFromOxm.getJavaTypeElementSwagger("Customer");
188                 } catch(Exception e) {
189                         e.printStackTrace();
190                 }
191                 logger.debug("Element:");
192                 logger.debug("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"));
193                 assertThat("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"), is(target));    }
194         
195         public String HTMLresult() {
196                 StringBuilder sb = new StringBuilder(32368);
197                 sb.append(HTMLheader());
198                 sb.append(HTMLdefs());
199                 return sb.toString();
200         }
201         
202         public String HTMLheader() {
203                 StringBuilder sb = new StringBuilder(1500);
204                  sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
205                  sb.append("<xs:schema elementFormDefault=\"qualified\" version=\"1.0\" targetNamespace=\"http://org.onap.aai.inventory/v11\" xmlns:tns=\"http://org.onap.aai.inventory/v11\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\nxmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\"\r\n");
206                  sb.append("    jaxb:version=\"2.1\"\r\n");
207                  sb.append("    xmlns:annox=\"http://annox.dev.java.net\"\r\n");
208                  sb.append("    jaxb:extensionBindingPrefixes=\"annox\">\n\n");
209                 return sb.toString();
210         }
211         public String HTMLdefs() {
212                 StringBuilder sb = new StringBuilder(1500);
213                 sb.append("  <xs:element name=\"service-subscription\">\n");
214                 sb.append("    <xs:complexType>\n");
215                 sb.append("      <xs:annotation>\r\n");
216                 sb.append("        <xs:appinfo>\r\n");
217                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Object that group service instances.\",indexedProps=\"service-type\",dependentOn=\"customer\",container=\"service-subscriptions\",crossEntityReference=\"service-instance,service-type\")</annox:annotate>\r\n");
218                 sb.append("        </xs:appinfo>\r\n");
219                 sb.append("      </xs:annotation>\r\n");
220                 sb.append("      <xs:sequence>\n");
221                 sb.append("        <xs:element name=\"service-type\" type=\"xs:string\">\n");
222                 sb.append("          <xs:annotation>\r\n");
223                 sb.append("            <xs:appinfo>\r\n");
224                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Value defined by orchestration to identify this service.\")</annox:annotate>\r\n");
225                 sb.append("            </xs:appinfo>\r\n");
226                 sb.append("          </xs:annotation>\r\n");
227                 sb.append("        </xs:element>\n");
228                 sb.append("        <xs:element name=\"temp-ub-sub-account-id\" type=\"xs:string\" minOccurs=\"0\">\n");
229                 sb.append("          <xs:annotation>\r\n");
230                 sb.append("            <xs:appinfo>\r\n");
231                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"This property will be deleted from A&amp;AI in the near future. Only stop gap solution.\")</annox:annotate>\r\n");
232                 sb.append("            </xs:appinfo>\r\n");
233                 sb.append("          </xs:annotation>\r\n");
234                 sb.append("        </xs:element>\n");
235                 sb.append("        <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">\n");
236                 sb.append("          <xs:annotation>\r\n");
237                 sb.append("            <xs:appinfo>\r\n");
238                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Used for optimistic concurrency.  Must be empty on create, valid on update and delete.\")</annox:annotate>\r\n");
239                 sb.append("            </xs:appinfo>\r\n");
240                 sb.append("          </xs:annotation>\r\n");
241                 sb.append("        </xs:element>\n");
242                 sb.append("      </xs:sequence>\n");
243                 sb.append("    </xs:complexType>\n");
244                 sb.append("  </xs:element>\n");
245                 sb.append("  <xs:element name=\"service-subscriptions\">\n");
246                 sb.append("    <xs:complexType>\n");
247                 sb.append("      <xs:annotation>\r\n");
248                 sb.append("        <xs:appinfo>\r\n");
249                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Collection of objects that group service instances.\")</annox:annotate>\r\n");
250                 sb.append("        </xs:appinfo>\r\n");
251                 sb.append("      </xs:annotation>\r\n");
252                 sb.append("      <xs:sequence>\n");
253                 sb.append("        <xs:element ref=\"tns:service-subscription\" minOccurs=\"0\" maxOccurs=\"5000\"/>\n");
254                 sb.append("      </xs:sequence>\n");
255                 sb.append("    </xs:complexType>\n");
256                 sb.append("  </xs:element>\n");
257                 sb.append("  <xs:element name=\"customer\">\n");
258                 sb.append("    <xs:complexType>\n");
259                 sb.append("      <xs:annotation>\r\n");
260                 sb.append("        <xs:appinfo>\r\n");
261                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"customer identifiers to provide linkage back to BSS information.\",nameProps=\"subscriber-name\",indexedProps=\"subscriber-name,global-customer-id,subscriber-type\",searchable=\"global-customer-id,subscriber-name\",uniqueProps=\"global-customer-id\",container=\"customers\",namespace=\"business\")</annox:annotate>\r\n");
262                 sb.append("        </xs:appinfo>\r\n");
263                 sb.append("      </xs:annotation>\r\n");
264                 sb.append("      <xs:sequence>\n");
265                 sb.append("        <xs:element name=\"global-customer-id\" type=\"xs:string\">\n");
266                 sb.append("          <xs:annotation>\r\n");
267                 sb.append("            <xs:appinfo>\r\n");
268                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(isKey=true,description=\"Global customer id used across to uniquely identify customer.\")</annox:annotate>\r\n");
269                 sb.append("            </xs:appinfo>\r\n");
270                 sb.append("          </xs:annotation>\r\n");
271                 sb.append("        </xs:element>\n");
272                 sb.append("        <xs:element name=\"subscriber-name\" type=\"xs:string\">\n");
273                 sb.append("          <xs:annotation>\r\n");
274                 sb.append("            <xs:appinfo>\r\n");
275                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber name, an alternate way to retrieve a customer.\")</annox:annotate>\r\n");
276                 sb.append("            </xs:appinfo>\r\n");
277                 sb.append("          </xs:annotation>\r\n");
278                 sb.append("        </xs:element>\n");
279                 sb.append("        <xs:element name=\"subscriber-type\" type=\"xs:string\">\n");
280                 sb.append("          <xs:annotation>\r\n");
281                 sb.append("            <xs:appinfo>\r\n");
282                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Subscriber type, a way to provide VID with only the INFRA customers.\",defaultValue=\"CUST\")</annox:annotate>\r\n");
283                 sb.append("            </xs:appinfo>\r\n");
284                 sb.append("          </xs:annotation>\r\n");
285                 sb.append("        </xs:element>\n");
286                 sb.append("        <xs:element name=\"resource-version\" type=\"xs:string\" minOccurs=\"0\">\n");
287                 sb.append("          <xs:annotation>\r\n");
288                 sb.append("            <xs:appinfo>\r\n");
289                 sb.append("              <annox:annotate target=\"field\">@org.onap.aai.annotations.Metadata(description=\"Used for optimistic concurrency.  Must be empty on create, valid on update and delete.\")</annox:annotate>\r\n");
290                 sb.append("            </xs:appinfo>\r\n");
291                 sb.append("          </xs:annotation>\r\n");
292                 sb.append("        </xs:element>\n");
293                 sb.append("        <xs:element ref=\"tns:service-subscriptions\" minOccurs=\"0\"/>\n");
294                 sb.append("      </xs:sequence>\n");
295                 sb.append("    </xs:complexType>\n");
296                 sb.append("  </xs:element>\n");
297                 sb.append("  <xs:element name=\"customers\">\n");
298                 sb.append("    <xs:complexType>\n");
299                 sb.append("      <xs:annotation>\r\n");
300                 sb.append("        <xs:appinfo>\r\n");
301                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Collection of customer identifiers to provide linkage back to BSS information.\")</annox:annotate>\r\n");
302                 sb.append("        </xs:appinfo>\r\n");
303                 sb.append("      </xs:annotation>\r\n");
304                 sb.append("      <xs:sequence>\n");
305                 sb.append("        <xs:element ref=\"tns:customer\" minOccurs=\"0\" maxOccurs=\"5000\"/>\n");
306                 sb.append("      </xs:sequence>\n");
307                 sb.append("    </xs:complexType>\n");
308                 sb.append("  </xs:element>\n");
309                 sb.append("  <xs:element name=\"business\">\n");
310                 sb.append("    <xs:complexType>\n");
311                 sb.append("      <xs:annotation>\r\n");
312                 sb.append("        <xs:appinfo>\r\n");
313                 sb.append("          <annox:annotate target=\"class\">@org.onap.aai.annotations.Metadata(description=\"Namespace for business related constructs\")</annox:annotate>\r\n");
314                 sb.append("        </xs:appinfo>\r\n");
315                 sb.append("      </xs:annotation>\r\n");
316                 sb.append("      <xs:sequence>\n");
317                 sb.append("        <xs:element ref=\"tns:customers\" minOccurs=\"0\"/>\n");
318                 sb.append("      </xs:sequence>\n");
319                 sb.append("    </xs:complexType>\n");
320                 sb.append("  </xs:element>\n");
321                 sb.append("  <xs:element name=\"inventory\">\n");
322                 sb.append("    <xs:complexType>\n");
323                 sb.append("      <xs:sequence>\n");
324                 sb.append("        <xs:element ref=\"tns:business\" minOccurs=\"0\"/>\n");
325                 sb.append("      </xs:sequence>\n");
326                 sb.append("    </xs:complexType>\n");
327                 sb.append("  </xs:element>\n");
328                 sb.append("</xs:schema>\n");
329                 return sb.toString();
330         }
331 }