2 * ============LICENSE_START=======================================================
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
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=========================================================
20 package org.onap.aai.util.genxsd;
22 import static org.hamcrest.CoreMatchers.is;
23 import static org.junit.Assert.*;
25 import java.io.BufferedWriter;
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;
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;
57 @RunWith(SpringJUnit4ClassRunner.class)
58 @ContextConfiguration(classes = {
60 SchemaLocationsBean.class,
61 TestUtilConfigTranslatorforBusiness.class,
64 SwaggerGenerationConfiguration.class
67 @TestPropertySource(properties = {
68 "schema.uri.base.path = /aai"
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";
79 HTMLfromOXM htmlFromOxm;
82 SchemaVersions schemaVersions;
85 public static void setUpContext() throws Exception {
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/");
97 public void setUp() throws Exception {
98 XSDElementTest x = new XSDElementTest();
101 logger.debug(testXML);
102 BufferedWriter bw = new BufferedWriter(new FileWriter(OXMFILENAME));
109 public void testGetDocumentHeader() {
110 SchemaVersion v = schemaVersions.getAppRootVersion();
111 String header = null;
113 htmlFromOxm.setXmlVersion(testXML, v);
114 htmlFromOxm.setSchemaVersions(schemaVersions);
115 header = htmlFromOxm.getDocumentHeader();
116 } catch(Exception e) {
119 logger.debug("Header:");
120 logger.debug(header);
121 assertThat(header, is(HTMLheader()));
125 public void testProcess() {
126 SchemaVersion v = schemaVersions.getAppRootVersion();
127 String fileContent = null;
129 htmlFromOxm.setXmlVersion(testXML, v);
130 fileContent = htmlFromOxm.process();
131 } catch(Exception e) {
134 logger.debug("FileContent-I:");
135 logger.debug(fileContent);
136 assertThat(fileContent, is(HTMLresult()));
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);
150 SchemaVersion v = schemaVersions.getAppRootVersion();
151 String fileContent = null;
153 htmlFromOxm.setXmlVersion(testXML, v);
154 fileContent = htmlFromOxm.process();
155 } catch(Exception e) {
159 logger.debug("FileContent-I:");
160 logger.debug(fileContent);
161 assertThat(fileContent, is(HTMLresult()));
165 public void testHTMLfromOXMStringVersion() {
166 SchemaVersion v = schemaVersions.getAppRootVersion();
167 String fileContent = null;
169 htmlFromOxm.setXmlVersion(testXML, v);
170 fileContent = htmlFromOxm.process();
171 } catch(Exception e) {
174 logger.debug("FileContent-II:");
175 logger.debug(fileContent);
176 assertThat(fileContent, is(HTMLresult()));
180 public void testProcessJavaTypeElement() {
181 String target = "Element=java-type/Customer";
182 SchemaVersion v = schemaVersions.getAppRootVersion();
183 Element customer = null;
185 htmlFromOxm.setXmlVersion(testXML, v);
186 htmlFromOxm.process();
187 customer = htmlFromOxm.getJavaTypeElementSwagger("Customer");
188 } catch(Exception e) {
191 logger.debug("Element:");
192 logger.debug("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"));
193 assertThat("Element="+customer.getNodeName()+"/"+customer.getAttribute("name"), is(target)); }
195 public String HTMLresult() {
196 StringBuilder sb = new StringBuilder(32368);
197 sb.append(HTMLheader());
198 sb.append(HTMLdefs());
199 return sb.toString();
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();
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&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();