049f721eaad825f2217a0b8570b51fa7c9f0f49f
[policy/engine.git] / ONAP-PAP-REST / src / test / java / org / onap / policy / pap / ia / DbAuditCompareEntriesTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP-PAP-REST
4  * ================================================================================
5  * Copyright (C) 2017 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
21 package org.onap.policy.pap.ia;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25
26 import java.util.Date;
27 import java.util.HashMap;
28 import java.util.Properties;
29 import java.util.Set;
30
31 import javax.persistence.EntityManager;
32 import javax.persistence.EntityManagerFactory;
33 import javax.persistence.EntityTransaction;
34 import javax.persistence.Persistence;
35
36 import org.apache.commons.lang3.SerializationUtils;
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
39 import org.junit.After;
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.onap.policy.common.ia.DbAudit;
43 import org.onap.policy.common.ia.DbDAO;
44 import org.onap.policy.common.ia.IntegrityAuditProperties;
45 import org.onap.policy.common.ia.jpa.IntegrityAuditEntity;
46 import org.onap.policy.common.im.jpa.ForwardProgressEntity;
47 import org.onap.policy.common.im.jpa.ResourceRegistrationEntity;
48 import org.onap.policy.common.im.jpa.StateManagementEntity;
49 import org.onap.policy.jpa.BackUpMonitorEntity;
50
51 public class DbAuditCompareEntriesTest {
52
53         private static Log logger = LogFactory.getLog(DbAuditCompareEntriesTest.class);
54         private DbDAO dbDAO;
55         private String persistenceUnit;
56         private Properties properties;
57         private String resourceName;
58         private String dbDriver;
59         private String dbUrl;
60         private String dbUser;
61         private String dbPwd;
62         private String siteName;
63         private String nodeType;
64         private static final String DEFAULT_DB_DRIVER = "org.h2.Driver";
65         private static final String DEFAULT_DB_USER = "sa";
66         private static final String DEFAULT_DB_PWD = "";
67         
68         @Before
69         public void setUp() throws Exception {
70                 logger.info("setUp: Entering");
71
72                 properties = new Properties();
73                 properties.put(IntegrityAuditProperties.DB_DRIVER, DbAuditCompareEntriesTest.DEFAULT_DB_DRIVER);
74                 properties.put(IntegrityAuditProperties.DB_URL, "jdbc:h2:file:./sql/xacmlTest");
75                 properties.put(IntegrityAuditProperties.DB_USER, DbAuditCompareEntriesTest.DEFAULT_DB_USER);
76                 properties.put(IntegrityAuditProperties.DB_PWD, DbAuditCompareEntriesTest.DEFAULT_DB_PWD);
77                 properties.put(IntegrityAuditProperties.SITE_NAME, "SiteA");
78                 properties.put(IntegrityAuditProperties.NODE_TYPE, "pap");
79
80                 dbDriver = DbAuditCompareEntriesTest.DEFAULT_DB_DRIVER;
81                 dbUrl = "jdbc:h2:file:./sql/xacmlTest";
82                 dbUser = DbAuditCompareEntriesTest.DEFAULT_DB_USER;
83                 dbPwd = DbAuditCompareEntriesTest.DEFAULT_DB_PWD;
84                 siteName = "SiteA";
85                 nodeType = "pap";
86                 persistenceUnit = "testPapPU";
87                 resourceName = "siteA.pap1";
88                 
89                 //Clean the iaTest DB table for IntegrityAuditEntity entries
90                 cleanDb(persistenceUnit, properties);
91                 
92                 logger.info("setUp: Exiting");
93         }
94
95         @After
96         public void tearDown() throws Exception {
97                 logger.info("tearDown: Entering");
98                 //nothing to do
99                 logger.info("tearDown: Exiting");
100         }
101         
102         public void cleanDb(String persistenceUnit, Properties properties){
103                 logger.debug("cleanDb: enter");
104
105                 EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnit, properties);
106                 
107                 EntityManager em = emf.createEntityManager();
108                 // Start a transaction
109                 EntityTransaction et = em.getTransaction();
110
111                 et.begin();
112
113                 // Clean up the DB
114                 em.createQuery("Delete from IntegrityAuditEntity").executeUpdate();
115
116                 // commit transaction
117                 et.commit();
118                 em.close();
119                 logger.debug("cleanDb: exit");
120         }
121         
122
123         /*
124          * Tests that a comparison between hashsets is successful if
125          * the entries match
126          */
127         @Test
128         public void runAllTests() throws Exception {
129                 logger.info("runAllTests: Entering");
130                 
131                 
132                 testIntegrityAuditEntity();
133                 testBackupMonitorEntity();
134                 testStateManagementEntity();
135                 testForwardProgressEntity();
136                 testResourceRegistrationEntity();
137                 
138                 //clean up the IntegrityAuditEntity table
139                 cleanDb(persistenceUnit, properties);
140                 
141                 logger.info("runAllTests: Exit");
142         }
143
144
145         public void testIntegrityAuditEntity() throws Exception {
146                 logger.info("testIntegrityAuditEntity: Entering");
147                 
148                 dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
149                 DbAudit dbAudit = new DbAudit(dbDAO);
150                 
151                 String className = null;
152                 //There is only one entry IntegrityAuditEntity, but we will check anyway
153                 Set<String> classNameSet = dbDAO.getPersistenceClassNames();
154                 for(String c : classNameSet){
155                         if (c.equals("org.onap.policy.common.ia.jpa.IntegrityAuditEntity")){
156                                 className = c;
157                         }
158                 }
159                 String resourceName1 = resourceName;
160                 String resourceName2 = resourceName;
161                 
162                 IntegrityAuditEntity entry1 = new IntegrityAuditEntity();
163                 IntegrityAuditEntity entry2 = new IntegrityAuditEntity();
164                 Date date = new Date();
165                 
166                 /*
167                  * Two entries with the same field values
168                  */
169                 entry1.setDesignated(false);
170                 entry1.setJdbcDriver(dbDriver);
171                 entry1.setJdbcPassword(dbPwd);
172                 entry1.setJdbcUrl(dbUrl);
173                 entry1.setJdbcUser(dbUser);
174                 entry1.setLastUpdated(date);
175                 entry1.setNodeType(nodeType);
176                 entry1.setPersistenceUnit(persistenceUnit);
177                 entry1.setResourceName(resourceName1);
178                 entry1.setSite(siteName);
179                 
180                 entry2 = SerializationUtils.clone(entry1);
181                 
182                 dbAudit.writeAuditDebugLog(className, resourceName1, resourceName2, entry1, entry2);
183                 
184                 HashMap<Object, Object> myEntries = new HashMap<>();
185                 HashMap<Object, Object> theirEntries = new HashMap<>();
186                 
187                 myEntries.put("pdp1", entry1);
188                 theirEntries.put("pdp1", entry2);
189                                 
190                 Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
191                 
192                 /*
193                  * Assert that there are no mismatches returned
194                  */
195                 assertTrue(result.isEmpty());
196                 
197                 /*
198                  * ************************************
199                  * Now test with a mis-matched entry
200                  * ************************************
201                  */
202                 
203                 /*
204                  * Change the entry2 to different designated value
205                  */
206                 entry2.setDesignated(true);
207                                 
208                 myEntries = new HashMap<>();
209                 theirEntries = new HashMap<>();
210                 
211                 myEntries.put("pdp1", entry1);
212                 theirEntries.put("pdp1", entry2);
213                 
214                 result = dbAudit.compareEntries(myEntries, theirEntries);
215                 
216                 /*
217                  * Assert that there was one mismatch
218                  */
219                 assertEquals(1, result.size());
220                 logger.info("testIntegrityAuditEntity: Exit");
221         }
222         
223         void testBackupMonitorEntity() throws Exception {
224                 logger.info("testBackupMonitorEntity: Entering");
225                 
226                 dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
227                 DbAudit dbAudit = new DbAudit(dbDAO);
228                 
229                 BackUpMonitorEntity entry1 = new BackUpMonitorEntity();
230                 BackUpMonitorEntity entry2 = new BackUpMonitorEntity();
231                 
232                 // Two entries with the same field values
233                  
234                 
235                 entry1.setFlag("flag1");
236                 entry1.setResourceNodeName("node1");
237                 entry1.setResourceName("resourceName");
238                 entry1.setTimeStamp(new Date());
239                 
240                 // Clone the first entry
241                 entry2 = SerializationUtils.clone(entry1);
242                 
243                 HashMap<Object, Object> myEntries = new HashMap<>();
244                 HashMap<Object, Object> theirEntries = new HashMap<>();
245                 
246                 myEntries.put("pdp1", entry1);
247                 theirEntries.put("pdp1", entry2);
248                                 
249                 Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
250                 
251                 
252                 // Assert that there are no mismatches returned
253                  
254                 assertTrue(result.isEmpty());
255                 
256                 
257                  /* ************************************
258                  * Now test with a mis-matched entry
259                  * ************************************/
260                  
261                 
262                 
263                 // Change a field on entry2
264                  
265                 entry2.setFlag("flag2");
266                                 
267                 myEntries = new HashMap<>();
268                 theirEntries = new HashMap<>();
269                 
270                 myEntries.put("pdp1", entry1);
271                 theirEntries.put("pdp1", entry2);
272                 
273                 result = dbAudit.compareEntries(myEntries, theirEntries);
274                 
275                 
276                 //Assert that there was one mismatch
277                  
278                 assertEquals(1, result.size());
279                 logger.info("testBackupMonitorEntity: Exit");
280         }
281
282         void testStateManagementEntity() throws Exception {
283                 logger.info("testStateManagementEntity: Entering");
284                 
285                 dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
286                 DbAudit dbAudit = new DbAudit(dbDAO);
287                 
288                 StateManagementEntity entry1 = new StateManagementEntity();
289                 StateManagementEntity entry2 = new StateManagementEntity();
290                 
291                 // Two entries with the same field values
292                 
293                 entry1.setAdminState("locked");
294                 entry1.setAvailStatus("null");
295                 entry1.setModifiedDate(new Date());
296                 entry1.setOpState("enabled");
297                 entry1.setResourceName("myResource");
298                 entry1.setStandbyStatus("coldstandby");
299                 
300                 // Clone the first entry
301                 entry2 = SerializationUtils.clone(entry1);
302                 
303                 HashMap<Object, Object> myEntries = new HashMap<>();
304                 HashMap<Object, Object> theirEntries = new HashMap<>();
305                 
306                 myEntries.put("pdp1", entry1);
307                 theirEntries.put("pdp1", entry2);
308                                 
309                 Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
310                 
311                 
312                 // Assert that there are no mismatches returned
313                  
314                 assertTrue(result.isEmpty());
315                 
316                 
317                  /* ************************************
318                  * Now test with a mis-matched entry
319                  * ************************************/
320                  
321                 
322                 
323                 // Change a field on entry2
324                  
325                 entry2.setAdminState("unlocked");
326                                 
327                 myEntries = new HashMap<>();
328                 theirEntries = new HashMap<>();
329                 
330                 myEntries.put("pdp1", entry1);
331                 theirEntries.put("pdp1", entry2);
332                 
333                 result = dbAudit.compareEntries(myEntries, theirEntries);
334                 
335                 
336                 //Assert that there was one mismatch
337                  
338                 assertEquals(1, result.size());
339                 logger.info("testStateManagementEntity: Exit");
340         }
341         
342         void testForwardProgressEntity() throws Exception {
343                 logger.info("testForwardProgressEntity: Entering");
344                 
345                 dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
346                 DbAudit dbAudit = new DbAudit(dbDAO);
347                 
348                 ForwardProgressEntity entry1 = new ForwardProgressEntity();
349                 ForwardProgressEntity entry2 = new ForwardProgressEntity();
350
351                 // Two entries with the same field values
352                 
353                 entry1.setFpcCount(123L);
354                 entry1.setLastUpdated(new Date());
355                 entry1.setResourceName("myResource");
356                 
357                 // Clone the first entry
358                 entry2 = SerializationUtils.clone(entry1);
359                 
360                 HashMap<Object, Object> myEntries = new HashMap<Object, Object>();
361                 HashMap<Object, Object> theirEntries = new HashMap<Object, Object>();
362                 
363                 myEntries.put("pdp1", entry1);
364                 theirEntries.put("pdp1", entry2);
365                                 
366                 Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
367                 
368                 
369                 // Assert that there are no mismatches returned
370                  
371                 assertTrue(result.isEmpty());
372                 
373                 
374                  /* ************************************
375                  * Now test with a mis-matched entry
376                  * ************************************/
377                 
378                 // Change a field on entry2
379                  
380                 entry2.setFpcCount(321L);
381                                 
382                 myEntries = new HashMap<>();
383                 theirEntries = new HashMap<>();
384                 
385                 myEntries.put("pdp1", entry1);
386                 theirEntries.put("pdp1", entry2);
387                 
388                 result = dbAudit.compareEntries(myEntries, theirEntries);
389                 
390                 
391                 //Assert that there was one mismatch
392                  
393                 assertEquals(1, result.size());
394                 logger.info("testForwardProgressEntity: Exit");
395         }
396
397         void testResourceRegistrationEntity() throws Exception {
398                 logger.info("testResourceRegistrationEntity: Entering");
399                 
400                 dbDAO = new DbDAO(resourceName, persistenceUnit, properties);
401                 DbAudit dbAudit = new DbAudit(dbDAO);
402                 
403                 ResourceRegistrationEntity entry1 = new ResourceRegistrationEntity();
404                 ResourceRegistrationEntity entry2 = new ResourceRegistrationEntity();
405                 
406                 // Two entries with the same field values
407                 
408                 entry1.setNodeType("pap");
409                 entry1.setLastUpdated(new Date());
410                 entry1.setResourceName("myResource");
411                 entry1.setResourceUrl("http://nowhere.com");
412                 entry1.setSite("site_1");
413                 
414                 // Clone the first entry
415                 entry2 = SerializationUtils.clone(entry1);
416                 
417                 HashMap<Object, Object> myEntries = new HashMap<>();
418                 HashMap<Object, Object> theirEntries = new HashMap<>();
419                 
420                 myEntries.put("pdp1", entry1);
421                 theirEntries.put("pdp1", entry2);
422                                 
423                 Set<Object> result = dbAudit.compareEntries(myEntries, theirEntries);
424                 
425                 
426                 // Assert that there are no mismatches returned
427                  
428                 assertTrue(result.isEmpty());
429                 
430                 
431                  /* ************************************
432                  * Now test with a mis-matched entry
433                  * ************************************/
434                 
435                 // Change a field on entry2
436                  
437                 entry2.setSite("site_1a");
438                                 
439                 myEntries = new HashMap<>();
440                 theirEntries = new HashMap<>();
441                 
442                 myEntries.put("pdp1", entry1);
443                 theirEntries.put("pdp1", entry2);
444                 
445                 result = dbAudit.compareEntries(myEntries, theirEntries);
446                 
447                 
448                 //Assert that there was one mismatch
449                  
450                 assertEquals(1, result.size());
451                 logger.info("testResourceRegistrationEntity: Exit");
452         }
453 }