Initial OpenECOMP policy/engine commit
[policy/engine.git] / ECOMP-PAP-REST / src / test / java / org / openecomp / policy / pap / xacml / rest / components / PolicyDBDaoTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ECOMP-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.openecomp.policy.pap.xacml.rest.components;
22
23 import java.io.ByteArrayInputStream;
24 import java.io.File;
25 import java.io.FileOutputStream;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.io.OutputStream;
29 import java.nio.file.Paths;
30 import java.util.Date;
31 import java.util.List;
32
33 import javax.persistence.EntityManager;
34 import javax.persistence.EntityManagerFactory;
35 import javax.persistence.Persistence;
36 import javax.persistence.PersistenceException;
37 import javax.persistence.Query;
38
39 import org.junit.Test;
40 import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter;
41 import org.openecomp.policy.pap.xacml.rest.components.ConfigPolicy;
42 import org.openecomp.policy.pap.xacml.rest.components.Policy;
43 import org.openecomp.policy.pap.xacml.rest.components.PolicyDBDao;
44 import org.openecomp.policy.pap.xacml.rest.components.PolicyDBDaoTransaction;
45 import org.openecomp.policy.pap.xacml.rest.components.PolicyDBDao.PolicyDBDaoTestClass;
46 import org.openecomp.policy.rest.XACMLRestProperties;
47 import org.openecomp.policy.rest.jpa.ActionBodyEntity;
48 import org.openecomp.policy.rest.jpa.GroupEntity;
49 import org.openecomp.policy.rest.jpa.PdpEntity;
50 import org.openecomp.policy.rest.jpa.PolicyEntity;
51 import org.openecomp.policy.rest.util.Webapps;
52
53 import com.att.research.xacml.api.pap.PAPException;
54
55 import org.openecomp.policy.xacml.api.pap.EcompPDPGroup;
56 import org.openecomp.policy.xacml.std.pap.StdPDPGroup;
57 import org.openecomp.policy.xacml.util.XACMLPolicyWriter;
58 import com.att.research.xacml.util.XACMLProperties;
59
60 import org.apache.commons.io.FileUtils;
61 import org.apache.commons.io.IOUtils;
62 //import org.apache.commons.logging.Log;
63 //import org.apache.commons.logging.LogFactory;
64 import org.junit.Before;
65 import org.junit.After;
66 import org.junit.Ignore;
67
68 import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
69
70 import org.junit.Assert;
71 import org.openecomp.policy.common.logging.flexlogger.FlexLogger; 
72 import org.openecomp.policy.common.logging.flexlogger.Logger;
73
74 @Ignore //only run locally as timing sometimes causes failures on Jenkins
75 public class PolicyDBDaoTest {
76
77         private static Logger logger = FlexLogger.getLogger(PolicyDBDaoTest.class);
78         
79         PolicyDBDaoTestClass d;
80         PolicyDBDao dbd;
81         PolicyDBDao dbd2;
82         EntityManagerFactory emf;
83         @Before
84         public void init(){
85                 System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME,"xacml.pap.properties");
86                 emf = Persistence.createEntityManagerFactory("testPapPU");
87                 EntityManager em = emf.createEntityManager();
88                 em.getTransaction().begin();
89                 try{    
90                 em.createQuery("DELETE FROM PolicyDBDaoEntity").executeUpdate();
91                 em.createQuery("DELETE FROM PolicyEntity").executeUpdate();
92                 em.createQuery("DELETE FROM ConfigurationDataEntity").executeUpdate();
93                 em.createQuery("DELETE FROM ActionBodyEntity").executeUpdate();
94                 em.createQuery("DELETE FROM PdpEntity").executeUpdate();
95                 em.createQuery("DELETE FROM GroupEntity").executeUpdate();
96
97                 em.getTransaction().commit();
98                 } catch(Exception e){
99                         e.printStackTrace();
100                         em.getTransaction().rollback();
101                 }
102                 em.close();
103                 try {
104                         dbd = PolicyDBDao.getPolicyDBDaoInstance(emf);
105                         dbd2 = PolicyDBDao.getPolicyDBDaoInstance(emf);
106                 } catch (Exception e) {
107                         //e.printStackTrace();
108                         Assert.fail();
109                 }
110
111                 d = PolicyDBDao.getPolicyDBDaoTestClass();
112         }
113         
114         @After
115         public void cleanUp(){
116                 EntityManager em = emf.createEntityManager();
117                 em.getTransaction().begin();
118                 try{    
119                 em.createQuery("DELETE FROM PolicyDBDaoEntity").executeUpdate(); 
120                 em.createQuery("DELETE FROM PolicyEntity").executeUpdate(); 
121                 em.createQuery("DELETE FROM ConfigurationDataEntity").executeUpdate();
122                 em.createQuery("DELETE FROM ActionBodyEntity").executeUpdate();
123                 em.createQuery("DELETE FROM PdpEntity").executeUpdate();
124                 em.createQuery("DELETE FROM GroupEntity").executeUpdate();
125
126                 em.getTransaction().commit();
127                 } catch(Exception e){
128                         em.getTransaction().rollback();
129                 }
130                 em.close();
131                 try {
132                         FileUtils.forceDelete(new File("src/test/resources/junitTestCreatedDirectory"));
133                 } catch (IOException e) {
134                         //could not delete
135                 }
136
137         }
138         
139         @Test
140         public void getScopeAndNameAndTypeTest(){
141
142                 String s = d.getGitPath();
143                 String pathIwantToUse;
144                 if(s.contains("/")){
145                         pathIwantToUse = "/root/users/" + s + "/org/openecomp/Config_mypolicy.xml";
146                 } else {
147                         pathIwantToUse = "C:\\root\\users\\" + s + "\\org\\openecomp\\Config_mypolicy.xml";
148                 }
149                 String[] snt = d.getScopeAndNameAndType(pathIwantToUse);
150                 Assert.assertEquals("Scope was parsed wrong","org.openecomp", snt[0]);
151                 Assert.assertEquals("Policy name was parsed wrong","Config_mypolicy.xml", snt[1]);
152                 Assert.assertEquals("Policy type was parsed wrong","Config", snt[2]);
153         }
154         @Test
155         public void computeScopeTest(){
156                 Assert.assertEquals("com",d.computeScope("C:\\Users\\testuser\\admin\\repo\\com\\", "C:\\Users\\testuser\\admin\\repo"));
157                 Assert.assertEquals("org.openecomp.policy",d.computeScope("/Users/testuser/admin/repo/org/openecomp/policy", "/Users/testuser/admin/repo"));
158         }
159         @Test
160         public void getConfigFileTest(){
161                 PolicyRestAdapter pra = new PolicyRestAdapter();
162                 pra.setConfigType(ConfigPolicy.JSON_CONFIG);
163                 String configFile = d.getConfigFile("Config_mypolicy.xml", "org.openecomp", pra);
164                 Assert.assertEquals("org.openecomp.Config_mypolicy.json", configFile);
165                 //yes, we can do action files too even though they don't have configs
166                 configFile = d.getConfigFile("Action_mypolicy.xml", "org.openecomp", pra);
167                 Assert.assertEquals("org.openecomp.Action_mypolicy.json", configFile);
168         }
169         
170         @Test
171         public void transactionTests(){
172                 
173                 
174 //              try{
175 //                      transac.commitTransaction();
176 //                      Assert.fail();
177 //              } catch(IllegalStateException e){
178 //                      //worked
179 //              } catch(Exception e2){
180 //                      Assert.fail();
181 //              }
182                 String filePath = null;
183                 String xmlFile = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<Policy xmlns=\"urn:oasis:names:tc:xacml:3.0:core:schema:wd-17\" PolicyId=\"urn:com:xacml:policy:id:eaa4bb64-59cf-4517-bb44-b2eeabd50b11\" Version=\"1\" RuleCombiningAlgId=\"urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides\">\n    <Description></Description>\n    <Target>\n        <AnyOf>\n            <AllOf>\n                <Match MatchId=\"org.openecomp.function.regex-match\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#integer\">99</AttributeValue>\n                    <AttributeDesignator Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\" AttributeId=\"cpu\" DataType=\"http://www.w3.org/2001/XMLSchema#integer\" MustBePresent=\"false\"/>\n                </Match>\n            </AllOf>\n        </AnyOf>\n    </Target>\n    <Rule RuleId=\"urn:com:xacml:rule:id:3350bf37-43d0-4a94-a317-febec81150d8\" Effect=\"Permit\">\n        <Target/>\n        <ObligationExpressions>\n            <ObligationExpression ObligationId=\"test\" FulfillOn=\"Permit\">\n                <AttributeAssignmentExpression AttributeId=\"performer\" Category=\"urn:oasis:names:tc:xacml:1.0:subject-category:recipient-subject\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">PDPAction</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"type\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">REST</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"url\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">http://localhost:8056/pcd</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"method\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#string\">GET</AttributeValue>\n                </AttributeAssignmentExpression>\n                <AttributeAssignmentExpression AttributeId=\"body\" Category=\"urn:oasis:names:tc:xacml:3.0:attribute-category:resource\">\n                    <AttributeValue DataType=\"http://www.w3.org/2001/XMLSchema#anyURI\">$URLaction/com.Action_patbaction7.json</AttributeValue>\n                </AttributeAssignmentExpression>\n            </ObligationExpression>\n        </ObligationExpressions>\n    </Rule>\n</Policy>\n";
184                 String jsonFile = "{\"actionAttribute\":\"Memory\"}";
185                 
186                 try{
187                         //policy file
188                         InputStream in = new ByteArrayInputStream(xmlFile.getBytes());
189                         String workspaceDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY);
190                         FileUtils.forceMkdir(new File(workspaceDir+"/org/openecomp"));
191                         File outFile = new File(workspaceDir+"/org/openecomp/Action_mypol.xml");
192                         OutputStream out = new FileOutputStream(outFile);
193                         IOUtils.copy(in, out);
194                         filePath = outFile.getAbsolutePath();   
195                         out.close();
196                         
197                         //action body file
198                         InputStream actionIn = new ByteArrayInputStream(jsonFile.getBytes());
199                         String webappDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE);
200                         XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_WEBAPPS, webappDir);
201                         String actionDir = Webapps.getActionHome();
202                         FileUtils.forceMkdir(new File(actionDir));
203                         File actionOutFile = new File(actionDir+"/org.openecomp.Action_mypol.json");
204                         OutputStream actionOut = new FileOutputStream(actionOutFile);
205                         IOUtils.copy(actionIn, actionOut);
206                         actionOut.close();
207                         
208                 }catch(Exception e){
209                         //could not run test
210                 }
211                 PolicyDBDaoTransaction transac = dbd.getNewTransaction();
212                 if(filePath != null){
213                         try{
214                                 transac.createPolicy(filePath, "tester");
215                                 transac.commitTransaction();
216                         } catch(Exception e){
217                                 Assert.fail();
218                         }
219                         EntityManager getData = emf.createEntityManager();
220                         Query getDataQuery = getData.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:name");
221                         getDataQuery.setParameter("scope", "org.openecomp");
222                         getDataQuery.setParameter("name","Action_mypol.xml");
223                         PolicyEntity result = null;
224                         try{
225                                 result = (PolicyEntity)getDataQuery.getSingleResult();
226                         } catch(Exception e){
227                                 e.printStackTrace();
228                                 Assert.fail();
229                         }
230                         Assert.assertEquals(xmlFile, result.getPolicyData());
231                         getData.close();
232                         result = null;
233                         xmlFile = null;
234                         try{
235                                 transac = dbd.getNewTransaction();
236                                 transac.deletePolicy(filePath);
237                         } catch(Exception e){
238                                 e.printStackTrace();
239                                 Assert.fail();
240                         }
241                         Assert.assertTrue(transac.isTransactionOpen());
242                         try{                            
243                                 transac.deletePolicy(filePath);
244                                 Assert.fail();
245                         } catch(IllegalStateException e){
246                                 //pass
247                         } catch(Exception e){
248                                 Assert.fail();
249                         }
250                         transac.commitTransaction();
251                         //Assert.assertFalse(transac.isTransactionOpen());
252                         try{
253                                 transac = dbd.getNewTransaction();
254                                 transac.deletePolicy(filePath);
255                         } catch(Exception e){
256                                 e.printStackTrace();
257                                 Assert.fail();
258                         }
259                         transac.commitTransaction();
260                         //Assert.assertFalse(transac.isTransactionOpen());
261                         String workspaceDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY);
262                         PolicyDBDaoTransaction willFail = dbd.getNewTransaction();
263                         File fakeFile = new File("directorythatdoesnotexist/"+workspaceDir);
264                         try{
265                         willFail.createPolicy(fakeFile.getAbsolutePath(), "user1");
266                         Assert.fail();
267                         } catch(IllegalArgumentException e){
268                                 if(!e.getMessage().equals("The file path could not be parsed")){
269                                         Assert.fail();
270                                 }
271                         }                       
272                         willFail.close();
273                         
274                         fakeFile = new File("directorythatdoesnotexist/"+workspaceDir+"/Action_mypol2.xml");
275                         willFail = dbd.getNewTransaction();
276                         try{
277                         willFail.createPolicy(fakeFile.getAbsolutePath(), "user1");
278                         Assert.fail();
279                         } catch(IllegalArgumentException e){
280                                 if(!e.getMessage().equals("The file path could not be parsed")){
281                                         Assert.fail();
282                                 }
283                         }
284                         willFail.close();
285                         
286                         fakeFile = new File("directorythatdoesnotexist/"+workspaceDir+"org/openecomp/Action_mypol2.xml");
287                         willFail = dbd.getNewTransaction();
288                         try{
289                         willFail.createPolicy(fakeFile.getAbsolutePath(), "user1");
290                         Assert.fail();
291                         } catch(IllegalArgumentException e){
292                                 if(!e.getMessage().equals("The file path does not exist")){
293                                         Assert.fail();
294                                 }
295                         }
296                         willFail.close();
297                         
298                         emf = Persistence.createEntityManagerFactory("testPU");
299                         EntityManager aem = emf.createEntityManager();
300                         Query actionQuery = aem.createQuery("SELECT a FROM ActionBodyEntity a WHERE a.actionBodyName=:actionBodyName");
301                         actionQuery.setParameter("actionBodyName", "org.openecomp.Action_mypol.json");
302                         List<?> actionQueryList = actionQuery.getResultList();
303                         if(actionQueryList.size() < 1){
304                                 Assert.fail("ActionBodyEntity not found with actionBodyName=: org.openecomp.Action_mypol.json"  );
305                         } else if(actionQueryList.size() > 1){
306                                 //something went wrong
307                                 Assert.fail("Somehow, more than one ActionBodyEntity with the actionBodyName = org.openecomp.Action_mypol.json");
308                         } else {
309                                 ActionBodyEntity abe = (ActionBodyEntity)actionQueryList.get(0);
310                                 logger.debug("\n\nPolicyDBDaoTest.transactionTests() Assert.assertEquals"
311                                                 + "\n   abe.getActionBody() = " + abe.getActionBody()
312                                                 + "\n   jsonFile = " + jsonFile
313                                                 + "\n\n");
314                                 Assert.assertEquals(abe.getActionBody(),jsonFile);                              
315                         }
316                 }
317         }
318         
319         @Test
320         public void createFromPolicyObject(){
321                 String workspaceDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY);
322                 File parentPath = new File(workspaceDir+"/org/openecomp");
323                 File scope = new File(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY));
324                 Policy policyObject = new ConfigPolicy();
325                 policyObject.policyAdapter = new PolicyRestAdapter();
326                 policyObject.policyAdapter.setConfigName("testpolicy1");
327                 policyObject.policyAdapter.setParentPath(parentPath.getAbsolutePath());
328                 policyObject.policyAdapter.setUserGitPath(scope.getPath());
329                 policyObject.policyAdapter.setPolicyDescription("my description");
330                 policyObject.policyAdapter.setConfigBodyData("this is my test config file");
331                 policyObject.policyAdapter.setPolicyName("testpolicy1");
332                 policyObject.policyAdapter.setConfigType(ConfigPolicy.OTHER_CONFIG);
333                 policyObject.policyAdapter.setPolicyType("Config");
334                 PolicyType policyTypeObject = new PolicyType();
335                 policyObject.policyAdapter.setPolicyData(policyTypeObject);
336                 PolicyDBDaoTransaction transaction = dbd.getNewTransaction();
337                 try{
338                 transaction.createPolicy(policyObject, "testuser1");
339                 transaction.commitTransaction();
340                 } catch(Exception e){
341                         transaction.rollbackTransaction();
342                         Assert.fail();
343                 }
344                 
345                 EntityManager getData = emf.createEntityManager();
346                 Query getDataQuery = getData.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:name");
347                 getDataQuery.setParameter("scope", "org.openecomp");
348                 getDataQuery.setParameter("name","Config_testpolicy1.xml");
349                 PolicyEntity result = null;
350                 try{
351                 result = (PolicyEntity)getDataQuery.getSingleResult();
352                 } catch(Exception e){
353                         e.printStackTrace();
354                         Assert.fail();
355                 }
356                 String expectedData;
357                 try {
358                         expectedData = IOUtils.toString(XACMLPolicyWriter.getXmlAsInputStream(policyTypeObject));
359                 } catch (IOException e1) {
360                         expectedData = "";
361                 }
362                 Assert.assertEquals(expectedData, result.getPolicyData());
363                 getData.close();
364                 result = null;
365                 File policyFile = new File(workspaceDir+"/org/openecomp/Config_testpolicy1.xml");
366                 try{
367                         transaction = dbd.getNewTransaction();
368                         transaction.deletePolicy(policyFile.getAbsolutePath());
369                 } catch(Exception e){
370                         e.printStackTrace();
371                         Assert.fail();
372                 }
373                 Assert.assertTrue(transaction.isTransactionOpen());
374                 try{                            
375                         transaction.deletePolicy(policyFile.getAbsolutePath());
376                         Assert.fail();
377                 } catch(IllegalStateException e){
378                         //pass
379                 } catch(Exception e){
380                         Assert.fail();
381                 }
382                 transaction.commitTransaction();
383                 Assert.assertFalse(transaction.isTransactionOpen());
384                 try{
385                         transaction = dbd.getNewTransaction();
386                         transaction.deletePolicy(policyFile.getAbsolutePath());
387                 } catch(Exception e){
388                         e.printStackTrace();
389                         Assert.fail();
390                 }
391                 //Assert.assertFalse(transaction.isTransactionOpen());
392                 transaction.commitTransaction();
393         }
394
395         @Test
396         public void groupTransactions(){                
397                 PolicyDBDaoTransaction group = dbd.getNewTransaction();
398                 String groupName = "test group 1";
399                 try{
400                         group.createGroup(PolicyDBDao.createNewPDPGroupId(groupName), groupName, "this is a test group","testuser");
401                         group.commitTransaction();
402                 } catch(Exception e){
403                         group.rollbackTransaction();
404                         e.printStackTrace();
405                         Assert.fail();
406                 }
407                 EntityManager em = emf.createEntityManager();
408                 Query getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
409                 getGroup.setParameter("groupId", PolicyDBDao.createNewPDPGroupId(groupName));
410                 getGroup.setParameter("deleted", false);
411                 List<?> groups = getGroup.getResultList();
412                 if(groups.size() != 1){
413                         Assert.fail();
414                 }
415                 GroupEntity groupEntity = (GroupEntity)groups.get(0);
416                 em.close();
417                 Assert.assertEquals(groupName, groupEntity.getgroupName());
418                 Assert.assertEquals("this is a test group", groupEntity.getDescription());
419                 group = dbd.getNewTransaction();
420                 try{
421                         EcompPDPGroup groupToDelete = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId(groupName),Paths.get("/"));                       
422                         group.deleteGroup(groupToDelete, null,"testuser");
423                         group.commitTransaction();
424                 } catch(Exception e){
425                         group.rollbackTransaction();
426                         e.printStackTrace();
427                         Assert.fail();
428                 }
429                 em = emf.createEntityManager();
430                 getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
431                 getGroup.setParameter("groupId", PolicyDBDao.createNewPDPGroupId(groupName));
432                 getGroup.setParameter("deleted", false);
433                 groups = getGroup.getResultList();
434                 if(groups.size() != 0){
435                         System.out.println("Group size: "+groups.size());
436                         Assert.fail();
437                 }
438                 em.close();
439                 //add a pdp to a group
440                 group = dbd.getNewTransaction();
441                 try{
442                         group.createGroup(PolicyDBDao.createNewPDPGroupId(groupName), groupName, "test group", "testuser");
443                         group.commitTransaction();
444                 } catch(Exception e){
445                         group.rollbackTransaction();
446                         e.printStackTrace();
447                         Assert.fail();
448                 }
449                 group = dbd.getNewTransaction();
450                 try{
451                         group.addPdpToGroup("http://localhost:4344/pdp/", PolicyDBDao.createNewPDPGroupId(groupName), "primary", "the main pdp", 3232, "testuser");
452                         group.commitTransaction();
453                 } catch(Exception e){
454                         group.rollbackTransaction();
455                         e.printStackTrace();
456                         Assert.fail();
457                 }
458                 em = emf.createEntityManager();
459                 Query getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted");
460                 getPdp.setParameter("pdpId", "http://localhost:4344/pdp/");
461                 getPdp.setParameter("deleted", false);
462                 List<?> pdps = getPdp.getResultList();
463                 if(pdps.size() != 1){
464                         System.out.println("Group size: "+pdps.size());
465                         Assert.fail();
466                 }
467                 PdpEntity pdp = (PdpEntity)pdps.get(0);
468                 Assert.assertEquals(groupName, pdp.getGroup().getgroupName());
469                 Assert.assertEquals(pdp.getPdpName(), "primary");
470                 em.close();
471                 group = dbd.getNewTransaction();
472                 try{
473                         group.removePdpFromGroup("http://localhost:4344/pdp/","testuser");
474                         group.commitTransaction();
475                 } catch(Exception e){
476                         group.rollbackTransaction();
477                         e.printStackTrace();
478                         Assert.fail();
479                 }
480                 em = emf.createEntityManager();
481                 getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted");
482                 getPdp.setParameter("pdpId", "http://localhost:4344/pdp/");
483                 getPdp.setParameter("deleted", false);
484                 pdps = getPdp.getResultList();
485                 if(pdps.size() != 0){
486                         System.out.println("Group size: "+pdps.size());
487                         Assert.fail();
488                 }
489                 em.close();
490                 
491                 //add some pdps to groups
492                 group = dbd.getNewTransaction();
493                 try{
494                         group.createGroup(PolicyDBDao.createNewPDPGroupId("testgroup1"), "testgroup1", "test group", "testuser");
495                         group.commitTransaction();
496                 } catch(Exception e){
497                         group.rollbackTransaction();
498                         e.printStackTrace();
499                         Assert.fail();
500                 }
501                 group = dbd.getNewTransaction();
502                 try{
503                         group.createGroup(PolicyDBDao.createNewPDPGroupId("testgroup2"), "testgroup2", "test group", "testuser");
504                         group.commitTransaction();
505                 } catch(Exception e){
506                         group.rollbackTransaction();
507                         e.printStackTrace();
508                         Assert.fail();
509                 }
510                 
511                 group = dbd.getNewTransaction();
512                 try{
513                         group.addPdpToGroup("http://localhost:4344/pdp/", PolicyDBDao.createNewPDPGroupId("testgroup1"), "primary", "the main pdp", 3232, "testuser");
514                         group.commitTransaction();
515                 } catch(Exception e){
516                         group.rollbackTransaction();
517                         e.printStackTrace();
518                         Assert.fail();
519                 }
520                 group = dbd.getNewTransaction();
521                 try{
522                         group.addPdpToGroup("http://localhost:4345/pdp/", PolicyDBDao.createNewPDPGroupId("testgroup1"), "secondary", "the second pdp", 3233, "testuser");
523                         group.commitTransaction();
524                 } catch(Exception e){
525                         group.rollbackTransaction();
526                         e.printStackTrace();
527                         Assert.fail();
528                 }
529                 em = emf.createEntityManager();
530                 getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.deleted=:deleted");
531                 getPdp.setParameter("deleted", false);
532                 pdps = getPdp.getResultList();
533                 for(Object o : pdps){
534                         Assert.assertEquals("testgroup1",((PdpEntity)o).getGroup().getgroupName());
535                 }
536                 em.close();
537                 
538                 group = dbd.getNewTransaction();
539                 try{
540                         EcompPDPGroup groupToDelete = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId("testgroup1"),Paths.get("/"));
541                         EcompPDPGroup groupToMoveTo = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId("testgroup2"),Paths.get("/"));    
542                         group.deleteGroup(groupToDelete, groupToMoveTo,"testuser");
543                         group.commitTransaction();
544                 } catch(Exception e){
545                         group.rollbackTransaction();
546                         e.printStackTrace();
547                         Assert.fail();
548                 }
549                 em = emf.createEntityManager();
550                 getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
551                 getGroup.setParameter("groupId", "testgroup1");
552                 getGroup.setParameter("deleted", false);
553                 groups = getGroup.getResultList();
554                 if(groups.size() != 0){
555                         System.out.println("Group size: "+groups.size());
556                         Assert.fail();
557                 }
558                 em.close();
559                 
560                 em = emf.createEntityManager();
561                 getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.deleted=:deleted");
562                 getPdp.setParameter("deleted", false);
563                 pdps = getPdp.getResultList();
564                 for(Object o : pdps){
565                         Assert.assertEquals("testgroup2",((PdpEntity)o).getGroup().getgroupName());
566                 }
567                 em.close();
568                 
569                 group = dbd.getNewTransaction();
570                 try{
571                         EcompPDPGroup groupToDelete = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId("testgroup2"),Paths.get("/"));
572                         EcompPDPGroup groupToMoveTo = null;     
573                         group.deleteGroup(groupToDelete, groupToMoveTo,"testuser");
574                         group.commitTransaction();
575                         Assert.fail();
576                 } catch(PAPException pe){
577                         //good, can't delete group with pdps
578                         group.rollbackTransaction();
579                 } catch(Exception e){
580                         group.rollbackTransaction();
581                         e.printStackTrace();
582                         Assert.fail();
583                 }
584                 
585                 
586                 //add policy to group
587                 
588                 //update group
589                 EcompPDPGroup pdpGroup = new StdPDPGroup("testgroup2", false, "newtestgroup2", "this is my new description", Paths.get("/"));
590                 group = dbd.getNewTransaction();
591                 try{
592                         group.updateGroup(pdpGroup, "testuser");
593                         group.commitTransaction();
594                 }catch (Exception e){
595                         e.printStackTrace();
596                         group.rollbackTransaction();
597                         Assert.fail();
598                 }
599                 em = emf.createEntityManager();
600                 getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
601                 getGroup.setParameter("groupId", "newtestgroup2");
602                 getGroup.setParameter("deleted", false);
603                 groups = getGroup.getResultList();
604                 if(groups.size() != 1){
605                         System.out.println("Group size: "+groups.size());
606                         Assert.fail();
607                 }
608                 em.close();
609                 em = emf.createEntityManager();
610                 getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted");
611                 getGroup.setParameter("groupId", "testgroup2");
612                 getGroup.setParameter("deleted", false);
613                 groups = getGroup.getResultList();
614                 if(groups.size() != 0){
615                         System.out.println("Group size: "+groups.size());
616                         Assert.fail();
617                 }
618                 em.close();
619                 //update pdp
620
621                 //set group as default
622
623                 //move pdp to new group
624
625
626         }
627         
628         @Test
629         public void encryptionTest(){
630                 try {
631                         String encr = d.encryptPassword("testpassword");
632                         System.out.println("original password: "+"testpassword");
633                         System.out.println("Encrypted password: "+encr);
634                         String decr = d.decryptPassword(encr);
635                         System.out.println("Decrypted password: "+decr);
636                         Assert.assertEquals("testpassword", decr);
637                 } catch (Exception e) {
638                         // TODO Auto-generated catch block
639                         e.printStackTrace();
640                         Assert.fail();
641                 }
642                 
643         }
644         @Test
645         public void getDescriptionFromXacmlTest(){
646                 String myTestDesc = "hello this is a test";
647                 String desc = d.getDescriptionFromXacml("<Description>"+myTestDesc+"</Description>");
648                 Assert.assertEquals(myTestDesc, desc);
649         }
650
651         @Test
652         public void threadingStabilityTest(){
653                 if(logger.isDebugEnabled()){
654                         logger.debug("\n\n****************************"
655                                         + "threadingStabilityTest() entry"
656                                         + "******************************\n\n");
657                 }
658                         
659                 PolicyDBDaoTransaction t = dbd.getNewTransaction();
660                 Assert.assertTrue(t.isTransactionOpen());
661                 try {
662                         //Add 1000 ms to the timeout just to be sure it actually times out
663                         int sleepTime = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)) + 1000;
664                         if(logger.isDebugEnabled()){
665                                 Date date= new java.util.Date();
666                                 logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
667                                                 + "\n   sleepTime =  " + sleepTime 
668                                                 + "\n   TimeStamp = " + date.getTime()
669                                                 + "\n\n");
670                         }
671                         Thread.sleep(sleepTime);
672                 } catch (InterruptedException e) {
673                         // TODO Auto-generated catch block
674                         e.printStackTrace();
675                 }
676                 if(logger.isDebugEnabled()){
677                         Date date= new java.util.Date();
678                         logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
679                                         + "\n   Assert.assertFalse(t.isTransactionOpen() = " + t.isTransactionOpen() + ")"
680                                         + "\n   TimeStamp = " + date.getTime()
681                                         + "\n\n");
682                 }
683                 Assert.assertFalse(t.isTransactionOpen());
684                 
685                 
686                 if(logger.isDebugEnabled()){
687                         Date date= new java.util.Date();
688                         logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
689                                         + "\n   a = dbd.getNewTransaction() " 
690                                         + "\n   TimeStamp = " + date.getTime()
691                                         + "\n\n");
692                 }
693                 PolicyDBDaoTransaction a = dbd.getNewTransaction();
694                 if(logger.isDebugEnabled()){
695                         Date date= new java.util.Date();
696                         logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
697                                         + "\n   Assert.assertTrue(a.isTransactionOpen() = " + a.isTransactionOpen() + ")"
698                                         + "\n   TimeStamp = " + date.getTime()
699                                         + "\n\n");
700                 }
701                 Assert.assertTrue(a.isTransactionOpen());
702
703                 try {
704                         //Add 1000 ms to the timeout just to be sure it actually times out
705                         int sleepTime = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)) + 1000;
706                         if(logger.isDebugEnabled()){
707                                 Date date= new java.util.Date();
708                                 logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
709                                                 + "\n   sleepTime =  " + sleepTime 
710                                                 + "\n   TimeStamp = " + date.getTime()
711                                                 + "\n\n");
712                         }
713                         Thread.sleep(sleepTime);
714                 } catch (InterruptedException e) {
715                         // TODO Auto-generated catch block
716                         e.printStackTrace();
717                 }
718                 if(logger.isDebugEnabled()){
719                         Date date= new java.util.Date();
720                         logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
721                                         + "\n   b = dbd.getNewTransaction() " 
722                                         + "\n   TimeStamp = " + date.getTime()
723                                         + "\n\n");
724                 }
725                 PolicyDBDaoTransaction b = dbd.getNewTransaction();
726                 if(logger.isDebugEnabled()){
727                         Date date= new java.util.Date();
728                         logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
729                                         + "\n   Assert.assertFalse(a.isTransactionOpen() = " + a.isTransactionOpen() + ")"
730                                         + "\n   TimeStamp = " + date.getTime()
731                                         + "\n\n");
732                 }
733                 Assert.assertFalse(a.isTransactionOpen());
734                 if(logger.isDebugEnabled()){
735                         Date date= new java.util.Date();
736                         logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
737                                         + "\n   Assert.assertTrue(b.isTransactionOpen() = " + b.isTransactionOpen() + ")"
738                                         + "\n   TimeStamp = " + date.getTime()
739                                         + "\n\n");
740                 }
741                 Assert.assertTrue(b.isTransactionOpen());
742                 b.close();
743                 
744                 
745                                 
746                 //Now let's test the transaction wait time timeout. Shorten the wait time to 1000 ms
747                 System.setProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT,"1000");
748                 //And let's lengthen the transaction timeout to 5000 ms
749                 System.setProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT,"5000");
750                 //get a transacton
751                 PolicyDBDaoTransaction t1 = dbd.getNewTransaction();
752                 if(logger.isDebugEnabled()){
753                         Date date= new java.util.Date();
754                         logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
755                                         + "\n   Assert.assertTrue(t1.isTransactionOpen() = " + t1.isTransactionOpen() + ")"
756                                         + "\n   TimeStamp = " + date.getTime()
757                                         + "\n\n");
758                 }
759                 Assert.assertTrue(t1.isTransactionOpen());
760                 //while it is open, get another from a different DB Dao so it will not collide on the synchronized code segment
761                 //but will collide at the DB. Remember that the wait time is only 1000 ms
762                 try {
763                         //Now the 2nd transaction has a wait timeout in 1000 ms
764                         PolicyDBDaoTransaction t2 = dbd2.getNewTransaction();
765                         /* 
766                          * Give it plenty of time to time out the second transaction
767                          * It will actually hang right here until it either gets the lock from the DB or the
768                          * request for the DB lock times out. The timers are very sloppy so, I have given
769                          * this plenty of leeway.
770                          */
771                         
772                         if(logger.isDebugEnabled()){
773                                 Date date= new java.util.Date();
774                                 logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
775                                                 + "\n   Thread.sleep(3000)" 
776                                                 + "\n   TimeStamp = " + date.getTime()
777                                                 + "\n\n");
778                         }
779                         Thread.sleep(3000);
780                         if(logger.isDebugEnabled()){
781                                 Date date= new java.util.Date();
782                                 logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
783                                                 + "\n   Assert.assertTrue(t1.isTransactionOpen() = " + t1.isTransactionOpen() + ")"
784                                                 + "\n   Assert.assertFalse(t2.isTransactionOpen() = " + t2.isTransactionOpen() + ")"
785                                                 + "\n   TimeStamp = " + date.getTime()
786                                                 + "\n\n");
787                         }
788                         //Assert.assertTrue(t1.isTransactionOpen());
789                         //Assert.assertFalse(t2.isTransactionOpen());
790                         
791                         Assert.fail("\n\nTransaction timeout of 1000 ms exceeded without a PersistenceException\n\n");
792                 } catch (PersistenceException e) {
793                         //success
794                         if(logger.isDebugEnabled()){
795                                 Date date= new java.util.Date();
796                                 logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() "
797                                                 + "\n   SUCCESS! Transaction Wait Timeout worked!"
798                                                 + "\n   Caught PersistenceException = " + e
799                                                 + "\n   TimeStamp = " + date.getTime()
800                                                 + "\n\n");
801                         }
802                 } catch (Exception e) {
803                         // failure due to some other reason
804                         if(logger.isDebugEnabled()){
805                                 Date date= new java.util.Date();
806                                 logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() FAILURE"
807                                                 + "\n   Caught Exception = " + e
808                                                 + "\n   TimeStamp = " + date.getTime()
809                                                 + "\n\n");
810                         }
811                         e.printStackTrace();
812                         Assert.fail();
813                 }
814                 
815                 if(logger.isDebugEnabled()){
816                         Date date= new java.util.Date();
817                         logger.debug("\n\nthreadingStabilityTest() exit"
818                                         + "\n   TimeStamp = " + date.getTime()
819                                         + "\n\n");
820                 }
821         }
822
823 }