2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2020 Nordix Foundation.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.model.modelapi;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
31 import java.io.IOException;
32 import java.sql.Connection;
33 import java.sql.DriverManager;
34 import java.util.UUID;
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.onap.policy.apex.model.basicmodel.dao.DaoParameters;
39 import org.onap.policy.apex.model.modelapi.impl.ApexModelImpl;
40 import org.onap.policy.common.utils.resources.TextFileUtils;
43 * Test the apex model API.
45 * @author Liam Fallon (liam.fallon@ericsson.com)
47 public class ApexModelApiTest {
48 private Connection connection;
51 public void setup() throws Exception {
52 // Hold the h2 database up for entire tests
53 connection = DriverManager.getConnection("jdbc:h2:mem:testdb");
57 public void teardown() throws Exception {
58 // Close the h2 database after tests
63 public void testApexModelLoadFromFile() {
64 final ApexModel apexModel = new ApexModelFactory().createApexModel(null, false);
66 ApexApiResult result = apexModel.loadFromFile("src/main/resources/models/PolicyModel.json");
67 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
69 result = apexModel.loadFromFile("src/test/resources/models/PolicyModel.json");
70 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
72 result = apexModel.deleteModel();
73 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
75 result = apexModel.loadFromFile("src/test/resources/models/PolicyModel.xml");
76 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
78 result = apexModel.deleteModel();
79 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
81 result = apexModel.loadFromFile("src/test/resources/models/PolicyModel.junk");
82 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
83 assertEquals("format of input for Apex concept is neither JSON nor XML", result.getMessages().get(0));
87 public void testApexModelSaveToFile() throws IOException {
88 final ApexModel apexModel = new ApexModelFactory().createApexModel(null, false);
90 ApexApiResult result = apexModel.loadFromFile("src/test/resources/models/PolicyModel.json");
91 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
93 final File tempJsonModelFile = File.createTempFile("ApexModelTest", ".json");
94 result = apexModel.saveToFile(tempJsonModelFile.getCanonicalPath(), false);
95 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
97 final ApexModel jsonApexModel = new ApexModelFactory().createApexModel(null, false);
98 result = jsonApexModel.loadFromFile(tempJsonModelFile.getCanonicalPath());
99 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
100 tempJsonModelFile.delete();
102 final File tempXmlModelFile = File.createTempFile("ApexModelTest", ".xml");
103 result = apexModel.saveToFile(tempXmlModelFile.getCanonicalPath(), true);
104 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
106 final ApexModel xmlApexModel = new ApexModelFactory().createApexModel(null, false);
107 result = xmlApexModel.loadFromFile(tempXmlModelFile.getCanonicalPath());
108 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
109 tempXmlModelFile.delete();
113 public void testApexModelDatabase() throws IOException {
114 final ApexModel apexModel = new ApexModelFactory().createApexModel(null, false);
116 ApexApiResult result = apexModel.loadFromFile("src/test/resources/models/PolicyModel.json");
117 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
119 final DaoParameters DaoParameters = new DaoParameters();
120 DaoParameters.setPluginClass("org.onap.policy.apex.model.basicmodel.dao.impl.DefaultApexDao");
121 DaoParameters.setPersistenceUnit("DAOTest");
123 result = apexModel.saveToDatabase(DaoParameters);
124 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
126 result = apexModel.deleteModel();
127 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
129 result = apexModel.loadFromDatabase("PolicyModel", "0.0.1", DaoParameters);
130 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
132 result = apexModel.deleteModel();
133 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
135 result = apexModel.loadFromDatabase("PolicyModel", null, DaoParameters);
136 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
138 result = apexModel.deleteModel();
139 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
141 result = apexModel.loadFromDatabase("VPNPolicyModel", "0.0.1", DaoParameters);
142 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
146 public void testApexModelUrl() throws IOException {
147 ApexModel apexModel = new ApexModelFactory().createApexModel(null, false);
149 ApexApiResult result = null;
152 result = apexModel.readFromUrl(null);
153 fail("expecting an IllegalArgumentException");
154 } catch (final Exception e) {
155 assertTrue(e instanceof IllegalArgumentException);
159 result = apexModel.writeToUrl(null, true);
160 fail("expecting an IllegalArgumentException");
161 } catch (final Exception e) {
162 assertTrue(e instanceof IllegalArgumentException);
165 result = apexModel.readFromUrl("zooby/looby");
166 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
168 result = apexModel.writeToUrl("zooby/looby", true);
169 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
171 result = apexModel.readFromUrl("zooby://zooby/looby");
172 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
174 result = apexModel.writeToUrl("zooby://zooby/looby", false);
175 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
177 apexModel = new ApexModelFactory().createApexModel(null, false);
179 final File tempJsonModelFile = File.createTempFile("ApexModelTest", ".json");
180 result = apexModel.saveToFile(tempJsonModelFile.getCanonicalPath(), false);
181 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
183 final String tempFileUrlString = tempJsonModelFile.toURI().toString();
184 result = apexModel.readFromUrl(tempFileUrlString);
185 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
187 result = apexModel.writeToUrl(tempFileUrlString, false);
188 assertEquals(ApexApiResult.Result.FAILED, result.getResult());
189 assertEquals("protocol doesn't support output", result.getMessages().get(0));
191 tempJsonModelFile.delete();
195 public void testApexModelMisc() throws IOException {
196 final ApexModelImpl apexModelImpl = (ApexModelImpl) new ApexModelFactory().createApexModel(null, false);
198 ApexApiResult result = null;
200 result = apexModelImpl.getModelKey();
201 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
203 result = apexModelImpl.listModel();
204 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
206 result = apexModelImpl.createModel("ModelName", "0.0.1", null, null);
207 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
209 result = apexModelImpl.updateModel("ModelName", "0.0.1", UUID.randomUUID().toString(), "Model Description");
210 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
212 apexModelImpl.deleteModel();
213 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
215 final String modelString = TextFileUtils.getTextFileAsString("src/test/resources/models/PolicyModel.json");
216 result = apexModelImpl.loadFromString(modelString);
217 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
219 final File tempFile = File.createTempFile("ApexModel", "json");
220 tempFile.deleteOnExit();
221 TextFileUtils.putStringAsFile(modelString, tempFile);
223 apexModelImpl.deleteModel();
224 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
226 result = apexModelImpl.loadFromFile(tempFile.getCanonicalPath());
227 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
229 result = apexModelImpl.saveToFile(null, false);
230 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
232 result = apexModelImpl.analyse();
233 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
235 result = apexModelImpl.validate();
236 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
238 result = apexModelImpl.compare(tempFile.getCanonicalPath(), true, true);
239 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
241 result = apexModelImpl.compareWithString(modelString, true, true);
242 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
244 result = apexModelImpl.split("policy");
245 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
247 result = apexModelImpl.split(tempFile.getCanonicalPath(), "policy");
248 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
250 result = apexModelImpl.merge(tempFile.getCanonicalPath(), true);
251 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
253 result = apexModelImpl.mergeWithString(modelString, true);
254 assertEquals(ApexApiResult.Result.SUCCESS, result.getResult());
256 assertNotEquals(0, apexModelImpl.hashCode());
257 assertNotNull(apexModelImpl.clone());
258 assertNotNull(apexModelImpl.build());