Merge "Reformat POLICY-SDK-APP test cases"
[policy/engine.git] / POLICY-SDK-APP / src / test / java / org / onap / policy / controller / CreateOptimizationControllerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP Policy Engine
4  * ================================================================================
5  * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (C) 2019 Samsung
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.controller;
24
25
26 import static org.easymock.EasyMock.createMock;
27 import static org.easymock.EasyMock.expect;
28 import static org.easymock.EasyMock.replay;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertTrue;
31 import static org.junit.Assert.fail;
32 import static org.mockito.Mockito.mock;
33 import static org.mockito.Mockito.when;
34 import java.io.BufferedReader;
35 import java.io.File;
36 import java.io.FileInputStream;
37 import java.io.IOException;
38 import java.io.InputStream;
39 import java.io.StringReader;
40 import java.util.ArrayList;
41 import java.util.List;
42 import javax.servlet.ReadListener;
43 import javax.servlet.ServletInputStream;
44 import javax.servlet.http.HttpServletRequest;
45 import org.junit.Before;
46 import org.junit.Test;
47 import org.onap.policy.common.logging.flexlogger.FlexLogger;
48 import org.onap.policy.common.logging.flexlogger.Logger;
49 import org.onap.policy.rest.adapter.PolicyRestAdapter;
50 import org.onap.policy.rest.dao.CommonClassDao;
51 import org.onap.policy.rest.jpa.ConfigurationDataEntity;
52 import org.onap.policy.rest.jpa.OptimizationModels;
53 import org.onap.policy.rest.jpa.PolicyEntity;
54 import org.springframework.mock.web.MockHttpServletRequest;
55 import org.springframework.mock.web.MockHttpServletResponse;
56 import com.fasterxml.jackson.databind.DeserializationFeature;
57 import com.fasterxml.jackson.databind.JsonNode;
58 import com.fasterxml.jackson.databind.ObjectMapper;
59 import com.github.fge.jackson.JsonLoader;
60 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType;
61 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType;
62 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType;
63 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType;
64 import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType;
65 import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
66 import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType;
67
68 /**
69  * The class <code>CreateOptimizationControllerTest</code> contains tests for the class
70  * {@link <code>CreateOptimizationController</code>}*
71  *
72  * All JUnits are designed to run in the local development environment where they have write
73  * privileges and can execute time-sensitive tasks.
74  */
75 public class CreateOptimizationControllerTest {
76
77     private static Logger logger = FlexLogger.getLogger(CreateOptimizationControllerTest.class);
78     private static CommonClassDao commonClassDao;
79     private String jsonString = null;
80     private String configBodyString = null;
81     private HttpServletRequest request = null;
82
83     @Before
84     public void setUp() throws Exception {
85
86         logger.info("setUp: Entering");
87         commonClassDao = mock(CommonClassDao.class);
88         List<Object> optimizationModelsData = new ArrayList<Object>();
89         OptimizationModels testData = new OptimizationModels();
90         testData.setVersion("OpenOnap-Junit");
91         optimizationModelsData.add(testData);
92
93         // mock the getDataById() call
94         when(commonClassDao.getDataById(OptimizationModels.class, "modelName", "test"))
95                 .thenReturn(optimizationModelsData);
96
97         jsonString =
98                 "{\"policyData\": {\"error\": \"\",\"inprocess\": false,\"model\": {\"name\": \"testingdata\", "
99                         + " \"subScopename\": \"\",\"path\": [],\"type\": \"dir\",\"size\": 0,"
100                         + "\"date\": \"2017-04-12T21:26:57.000Z\",\"version\": \"\",\"createdBy\": \"someone\","
101                         + "\"modifiedBy\": \"someone\",\"content\": \"\",\"recursive\": false},"
102                         + "\"tempModel\": {\"name\": \"testingdata\",\"subScopename\": \"\"},"
103                         + "\"policy\": {\"policyType\": \"Config\",\"configPolicyType\": \"OOF\","
104                         + "\"policyName\": \"testPolicy\",\"policyDescription\": \"testing input\","
105                         + "\"onapName\": \"test\",\"guard\": \"False\",\"riskType\": \"Risk12345\","
106                         + "\"riskLevel\": \"2\",\"priority\": \"6\",\"serviceType\": \"DkatPolicyBody\","
107                         + "\"version\": \"1707.41.02\",\"ruleGridData\": [[\"fileId\"]],\"ttlDate\": null}},"
108                         + "\"policyJSON\": {\"pmTableName\": \"test\",\"dmdTopic\": \"1\",\"fileId\": \"56\"}}";
109
110         configBodyString =
111                 "{\"service\":\"PolicyEntityTest\",\"policyName\":\"someone\",\"description\":\"test\","
112                         + "\"templateVersion\":\"1607\",\"version\":\"HD\",\"priority\":\"2\","
113                         + "\"content\":{\"lastPolled\":\"1\",\"boolen-test\":\"true\",\"created\":\"test\","
114                         + "\"retiredDate\":\"test\",\"scope\":\"TEST_PLACEMENT_VDHV\",\"name\":\"test\","
115                         + "\"lastModified\":\"test\",\"state\":\"CREATED\",\"type\":\"CONFIG\",\"intent\":\"test\","
116                         + "\"target\":\"TEST\"}}";
117
118         request = mock(HttpServletRequest.class);
119         BufferedReader br = new BufferedReader(new StringReader(jsonString));
120         // mock the getReader() call
121         when(request.getReader()).thenReturn(br);
122
123         logger.info("setUp: exit");
124     }
125
126     /**
127      * Run the PolicyRestAdapter setDataToPolicyRestAdapter(PolicyRestAdapter, JsonNode) method test
128      */
129
130     @Test
131     public void testSetDataToPolicyRestAdapter() {
132
133         logger.debug("testSetDataToPolicyRestAdapter: enter");
134
135         CreateOptimizationController controller = new CreateOptimizationController();
136         CreateOptimizationController.setCommonClassDao(commonClassDao);
137
138         JsonNode root = null;
139         ObjectMapper mapper = new ObjectMapper();
140         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
141         PolicyRestAdapter policyData = null;
142         try {
143             root = JsonLoader.fromString(jsonString);
144             policyData = (PolicyRestAdapter) mapper.readValue(
145                     root.get("policyData").get("policy").toString(), PolicyRestAdapter.class);
146         } catch (Exception e) {
147             logger.error("testSetDataToPolicyRestAdapter", e);
148         }
149
150         PolicyRestAdapter result = controller.setDataToPolicyRestAdapter(policyData, root);
151         assertTrue(
152                 result != null && result.getJsonBody() != null && !result.getJsonBody().isEmpty());
153
154         logger.debug("result.getJsonBody() : " + result.getJsonBody());
155         logger.debug("testSetDataToPolicyRestAdapter: exit");
156     }
157
158     /**
159      * Run the ModelAndView getOptimizationTemplateData(HttpServletRequest, HttpServletResponse)
160      * method test
161      */
162
163     @Test
164     public void testGetOptimizationTemplateData() {
165
166         logger.debug("testGetOptimizationTemplateData: enter");
167
168         CreateOptimizationController controller = new CreateOptimizationController();
169         MockHttpServletResponse response = new MockHttpServletResponse();
170         String modelJson = "{\"policyData\":\"testPolicyBody\"}";
171         try {
172
173             CreateOptimizationController.setCommonClassDao(commonClassDao);
174
175             BufferedReader br = new BufferedReader(new StringReader(modelJson));
176             // mock the getReader() call
177             when(request.getReader()).thenReturn(br);
178
179             List<Object> optimizationModelsData = new ArrayList<Object>();
180             OptimizationModels testData = new OptimizationModels();
181             testData.setVersion("1707.4.1.2-Junit");
182             optimizationModelsData.add(testData);
183             // mock the getDataById() call with the same MS model name
184             when(commonClassDao.getDataById(OptimizationModels.class, "modelName",
185                     "testPolicyBody")).thenReturn(optimizationModelsData);
186
187             controller.getOptimizationTemplateData(request, response);
188
189             assertTrue(response.getContentAsString() != null
190                     && response.getContentAsString().contains("optimizationModelData"));
191
192             logger.debug("response: " + response.getContentAsString());
193
194         } catch (Exception e) {
195             logger.error("testGetOptimizationTemplateData", e);
196         }
197
198         logger.debug("testGetOptimizationTemplateData: exit");
199     }
200
201     /**
202      * Run the ModelAndView getModelServiceVersionData(HttpServletRequest, HttpServletResponse)
203      * method test
204      */
205
206     @Test
207     public void testGetModelServiceVersionData() {
208
209         logger.debug("testGetModelServiceVersionData: enter");
210
211         CreateOptimizationController controller = new CreateOptimizationController();
212         MockHttpServletResponse response = new MockHttpServletResponse();
213         String modelJson = "{\"policyData\":\"TestPolicyBody\"}";
214         try {
215
216             CreateOptimizationController.setCommonClassDao(commonClassDao);
217
218             BufferedReader br = new BufferedReader(new StringReader(modelJson));
219             // mock the getReader() call
220             when(request.getReader()).thenReturn(br);
221
222             List<Object> optimizationModelsData = new ArrayList<Object>();
223             OptimizationModels testData = new OptimizationModels();
224             testData.setVersion("1707.4.1.2-Junit");
225             optimizationModelsData.add(testData);
226
227             // mock the getDataById() call with the same MS model name
228             when(commonClassDao.getDataById(OptimizationModels.class, "modelName",
229                     "TestPolicyBody")).thenReturn(optimizationModelsData);
230             controller.getModelServiceVersionData(request, response);
231
232             assertTrue(response.getContentAsString() != null
233                     && response.getContentAsString().contains("1707.4.1.2-Junit"));
234
235             logger.debug("response: " + response.getContentAsString());
236
237         } catch (Exception e) {
238             logger.error("testGetModelServiceVersionData", e);
239             fail("testGetModelServiceVersionData failed due to: " + e);
240         }
241
242         logger.debug("testGetModelServiceVersionData: exit");
243     }
244
245     /**
246      * Run the void prePopulateDCAEMSPolicyData(PolicyRestAdapter, PolicyEntity) method test
247      */
248
249     @Test
250     public void testPrePopulatePolicyData() {
251
252         logger.debug("testPrePopulatePolicyData: enter");
253
254         CreateOptimizationController controller = new CreateOptimizationController();
255
256         // populate an entity object for testing
257         PolicyEntity entity = new PolicyEntity();
258         ConfigurationDataEntity configData = new ConfigurationDataEntity();
259         configData.setConfigBody(configBodyString);
260         entity.setConfigurationData(configData);
261
262         JsonNode root = null;
263         ObjectMapper mapper = new ObjectMapper();
264         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
265         PolicyRestAdapter restAdapter = null;
266
267         try {
268             root = JsonLoader.fromString(jsonString);
269             restAdapter = (PolicyRestAdapter) mapper.readValue(
270                     root.get("policyData").get("policy").toString(), PolicyRestAdapter.class);
271             PolicyType policyType = new PolicyType();
272             TargetType target = new TargetType();
273
274             // create guard attribute
275             AnyOfType anyOfType = new AnyOfType();
276             AllOfType alltype = new AllOfType();
277             MatchType matchType = new MatchType();
278             // set value
279             AttributeValueType attributeValue1 = new AttributeValueType();
280             attributeValue1.getContent().add("True");
281             matchType.setAttributeValue(attributeValue1);
282             // set Id
283             AttributeDesignatorType designator = new AttributeDesignatorType();
284             designator.setAttributeId("guard");
285             matchType.setAttributeDesignator(designator);
286             alltype.getMatch().add(matchType);
287
288             // add a dummy MatchType object since while (matchList.size()>1 ...)
289             MatchType matchDummy = new MatchType();
290             // set value
291             AttributeValueType dummyValue = new AttributeValueType();
292             dummyValue.getContent().add("dummy");
293             matchDummy.setAttributeValue(dummyValue);
294             // set Id
295             AttributeDesignatorType designatorDummy = new AttributeDesignatorType();
296             designatorDummy.setAttributeId("dummyId");
297             matchDummy.setAttributeDesignator(designatorDummy);
298
299             alltype.getMatch().add(matchDummy);
300             anyOfType.getAllOf().add(alltype);
301
302             target.getAnyOf().add(anyOfType);
303
304             // create RiskType attribute
305             AnyOfType anyRiskType = new AnyOfType();
306             AllOfType allRiskType = new AllOfType();
307             MatchType matchRiskType = new MatchType();
308             // set value
309             AttributeValueType riskTypeValue = new AttributeValueType();
310             riskTypeValue.getContent().add("test");
311             matchRiskType.setAttributeValue(riskTypeValue);
312             // set Id
313             AttributeDesignatorType designatorRiskType = new AttributeDesignatorType();
314             designatorRiskType.setAttributeId("RiskType");
315             matchRiskType.setAttributeDesignator(designatorRiskType);
316             allRiskType.getMatch().add(matchRiskType);
317
318             // add a dummy MatchType object since while (matchList.size()>1 ...)
319             MatchType matchDummy1 = new MatchType();
320             // set value
321             AttributeValueType dummy1Value = new AttributeValueType();
322             dummy1Value.getContent().add("dummy");
323             matchDummy1.setAttributeValue(dummy1Value);
324             // set Id
325             AttributeDesignatorType designatorDummy1 = new AttributeDesignatorType();
326             designatorDummy1.setAttributeId("dummyId");
327             matchDummy1.setAttributeDesignator(designatorDummy1);
328
329             allRiskType.getMatch().add(matchDummy1);
330
331             anyRiskType.getAllOf().add(allRiskType);
332
333             target.getAnyOf().add(anyRiskType);
334
335             // create RiskLevel attribute
336             AnyOfType anyRiskLevel = new AnyOfType();
337             AllOfType allRiskLevel = new AllOfType();
338             MatchType matchRiskLevel = new MatchType();
339             // set value
340             AttributeValueType riskLevel = new AttributeValueType();
341             riskLevel.getContent().add("3");
342             matchRiskLevel.setAttributeValue(riskLevel);
343             // set Id
344             AttributeDesignatorType designatorRiskLevel = new AttributeDesignatorType();
345             designatorRiskLevel.setAttributeId("RiskLevel");
346             matchRiskLevel.setAttributeDesignator(designatorRiskLevel);
347             allRiskLevel.getMatch().add(matchRiskLevel);
348
349             // add a dummy MatchType object since while (matchList.size()>1 ...)
350             MatchType matchDummy2 = new MatchType();
351             // set value
352             AttributeValueType dummy2Value = new AttributeValueType();
353             dummy2Value.getContent().add("dummy");
354             matchDummy2.setAttributeValue(dummy2Value);
355             // set Id
356             AttributeDesignatorType designatorDummy2 = new AttributeDesignatorType();
357             designatorDummy2.setAttributeId("dummyId");
358             matchDummy2.setAttributeDesignator(designatorDummy2);
359
360             allRiskLevel.getMatch().add(matchDummy2);
361
362             anyRiskLevel.getAllOf().add(allRiskLevel);
363             target.getAnyOf().add(anyRiskLevel);
364
365             policyType.setTarget(target);
366
367             restAdapter.setPolicyData(policyType);
368
369             controller.prePopulatePolicyData(restAdapter, entity);
370
371             logger.error("restAdapter.getRiskType() : " + restAdapter.getRiskType());
372             logger.error("restAdapter.getRiskLevel() : " + restAdapter.getRiskLevel());
373             logger.error("restAdapter.getGuard() : " + restAdapter.getGuard());
374
375             assertEquals("True", restAdapter.getGuard());
376             assertEquals("3", restAdapter.getRiskLevel());
377             assertEquals("test", restAdapter.getRiskType());
378
379         } catch (Exception e) {
380             logger.error("testPrePopulatePolicyData", e);
381             fail("testPrePopulatePolicyData failed due to: " + e);
382         }
383
384         logger.debug("testPrePopulatePolicyData: exit");
385
386     }
387
388     /**
389      * Run the void SetMSModelData(HttpServletRequest, HttpServletResponse) method test
390      */
391
392     @Test
393     public void testSetModelData() {
394
395         logger.debug("testSetModelData: enter");
396
397         CreateOptimizationController controller = new CreateOptimizationController();
398         HttpServletRequest request = createMock(HttpServletRequest.class);
399         MockHttpServletResponse response = new MockHttpServletResponse();
400         expect(request.getContentType())
401                 .andReturn("multipart/form-data; boundary=----WebKitFormBoundaryWcRUaIbC8kXgjr3p");
402         expect(request.getMethod()).andReturn("post");
403         expect(request.getHeader("Content-length")).andReturn("7809");
404
405         expect(request.getContentLength()).andReturn(7809);
406
407         try {
408             // value of fileName needs to be matched to your local directory
409             String fileName = "";
410             try {
411                 ClassLoader classLoader = getClass().getClassLoader();
412                 fileName =
413                         new File(classLoader.getResource("schedulerPolicies-v1707.xmi").getFile())
414                                 .getAbsolutePath();
415             } catch (Exception e1) {
416                 logger.error("Exception Occured while loading file" + e1);
417             }
418             expect(request.getInputStream()).andReturn(new MockServletInputStream(fileName));
419             expect(request.getCharacterEncoding()).andReturn("UTF-8");
420             expect(request.getContentLength()).andReturn(1024);
421             replay(request);
422             controller.setModelData(request, response);
423
424         } catch (Exception e) {
425             logger.error("testSetModelData" + e);
426             e.printStackTrace();
427         }
428
429         logger.debug("testSetModelData: exit");
430     }
431
432     /**
433      * 
434      * @ Get File Stream
435      *
436      */
437     private class MockServletInputStream extends ServletInputStream {
438
439         InputStream fis = null;
440
441         public MockServletInputStream(String fileName) {
442             try {
443                 fis = new FileInputStream(fileName);
444             } catch (Exception genExe) {
445                 genExe.printStackTrace();
446             }
447         }
448
449         @Override
450         public int read() throws IOException {
451             if (fis.available() > 0) {
452                 return fis.read();
453             }
454             return 0;
455         }
456
457         @Override
458         public int read(byte[] bytes, int len, int size) throws IOException {
459             if (fis.available() > 0) {
460                 int length = fis.read(bytes, len, size);
461                 return length;
462             }
463             return -1;
464         }
465
466         @Override
467         public boolean isFinished() {
468             return false;
469         }
470
471         @Override
472         public boolean isReady() {
473             return false;
474         }
475
476         @Override
477         public void setReadListener(ReadListener arg0) {
478
479         }
480     }
481 }