/*- * ============LICENSE_START======================================================= * ECOMP-PAP-REST * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============LICENSE_END========================================================= */ package org.openecomp.policy.pap.xacml.rest.components; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Paths; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import javax.persistence.PersistenceException; import javax.persistence.Query; import org.junit.Test; import org.openecomp.policy.pap.xacml.rest.adapters.PolicyRestAdapter; import org.openecomp.policy.pap.xacml.rest.components.ConfigPolicy; import org.openecomp.policy.pap.xacml.rest.components.Policy; import org.openecomp.policy.pap.xacml.rest.components.PolicyDBDao; import org.openecomp.policy.pap.xacml.rest.components.PolicyDBDaoTransaction; import org.openecomp.policy.pap.xacml.rest.components.PolicyDBDao.PolicyDBDaoTestClass; import org.openecomp.policy.rest.XACMLRestProperties; import org.openecomp.policy.rest.jpa.ActionBodyEntity; import org.openecomp.policy.rest.jpa.GroupEntity; import org.openecomp.policy.rest.jpa.PdpEntity; import org.openecomp.policy.rest.jpa.PolicyEntity; import org.openecomp.policy.rest.util.Webapps; import com.att.research.xacml.api.pap.PAPException; import org.openecomp.policy.xacml.api.pap.EcompPDPGroup; import org.openecomp.policy.xacml.std.pap.StdPDPGroup; import org.openecomp.policy.xacml.util.XACMLPolicyWriter; import com.att.research.xacml.util.XACMLProperties; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; //import org.apache.commons.logging.Log; //import org.apache.commons.logging.LogFactory; import org.junit.Before; import org.junit.After; import org.junit.Ignore; import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType; import org.junit.Assert; import org.openecomp.policy.common.logging.flexlogger.FlexLogger; import org.openecomp.policy.common.logging.flexlogger.Logger; @Ignore //only run locally as timing sometimes causes failures on Jenkins public class PolicyDBDaoTest { private static Logger logger = FlexLogger.getLogger(PolicyDBDaoTest.class); PolicyDBDaoTestClass d; PolicyDBDao dbd; PolicyDBDao dbd2; EntityManagerFactory emf; @Before public void init(){ System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME,"xacml.pap.properties"); emf = Persistence.createEntityManagerFactory("testPapPU"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); try{ em.createQuery("DELETE FROM PolicyDBDaoEntity").executeUpdate(); em.createQuery("DELETE FROM PolicyEntity").executeUpdate(); em.createQuery("DELETE FROM ConfigurationDataEntity").executeUpdate(); em.createQuery("DELETE FROM ActionBodyEntity").executeUpdate(); em.createQuery("DELETE FROM PdpEntity").executeUpdate(); em.createQuery("DELETE FROM GroupEntity").executeUpdate(); em.getTransaction().commit(); } catch(Exception e){ e.printStackTrace(); em.getTransaction().rollback(); } em.close(); try { dbd = PolicyDBDao.getPolicyDBDaoInstance(emf); dbd2 = PolicyDBDao.getPolicyDBDaoInstance(emf); } catch (Exception e) { //e.printStackTrace(); Assert.fail(); } d = PolicyDBDao.getPolicyDBDaoTestClass(); } @After public void cleanUp(){ EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); try{ em.createQuery("DELETE FROM PolicyDBDaoEntity").executeUpdate(); em.createQuery("DELETE FROM PolicyEntity").executeUpdate(); em.createQuery("DELETE FROM ConfigurationDataEntity").executeUpdate(); em.createQuery("DELETE FROM ActionBodyEntity").executeUpdate(); em.createQuery("DELETE FROM PdpEntity").executeUpdate(); em.createQuery("DELETE FROM GroupEntity").executeUpdate(); em.getTransaction().commit(); } catch(Exception e){ em.getTransaction().rollback(); } em.close(); try { FileUtils.forceDelete(new File("src/test/resources/junitTestCreatedDirectory")); } catch (IOException e) { //could not delete } } @Test public void getScopeAndNameAndTypeTest(){ String s = d.getGitPath(); String pathIwantToUse; if(s.contains("/")){ pathIwantToUse = "/root/users/" + s + "/org/openecomp/Config_mypolicy.xml"; } else { pathIwantToUse = "C:\\root\\users\\" + s + "\\org\\openecomp\\Config_mypolicy.xml"; } String[] snt = d.getScopeAndNameAndType(pathIwantToUse); Assert.assertEquals("Scope was parsed wrong","org.openecomp", snt[0]); Assert.assertEquals("Policy name was parsed wrong","Config_mypolicy.xml", snt[1]); Assert.assertEquals("Policy type was parsed wrong","Config", snt[2]); } @Test public void computeScopeTest(){ Assert.assertEquals("com",d.computeScope("C:\\Users\\testuser\\admin\\repo\\com\\", "C:\\Users\\testuser\\admin\\repo")); Assert.assertEquals("org.openecomp.policy",d.computeScope("/Users/testuser/admin/repo/org/openecomp/policy", "/Users/testuser/admin/repo")); } @Test public void getConfigFileTest(){ PolicyRestAdapter pra = new PolicyRestAdapter(); pra.setConfigType(ConfigPolicy.JSON_CONFIG); String configFile = d.getConfigFile("Config_mypolicy.xml", "org.openecomp", pra); Assert.assertEquals("org.openecomp.Config_mypolicy.json", configFile); //yes, we can do action files too even though they don't have configs configFile = d.getConfigFile("Action_mypolicy.xml", "org.openecomp", pra); Assert.assertEquals("org.openecomp.Action_mypolicy.json", configFile); } @Test public void transactionTests(){ // try{ // transac.commitTransaction(); // Assert.fail(); // } catch(IllegalStateException e){ // //worked // } catch(Exception e2){ // Assert.fail(); // } String filePath = null; String xmlFile = "\n\n \n \n \n \n \n 99\n \n \n \n \n \n \n \n \n \n \n PDPAction\n \n \n REST\n \n \n http://localhost:8056/pcd\n \n \n GET\n \n \n $URLaction/com.Action_patbaction7.json\n \n \n \n \n\n"; String jsonFile = "{\"actionAttribute\":\"Memory\"}"; try{ //policy file InputStream in = new ByteArrayInputStream(xmlFile.getBytes()); String workspaceDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY); FileUtils.forceMkdir(new File(workspaceDir+"/org/openecomp")); File outFile = new File(workspaceDir+"/org/openecomp/Action_mypol.xml"); OutputStream out = new FileOutputStream(outFile); IOUtils.copy(in, out); filePath = outFile.getAbsolutePath(); out.close(); //action body file InputStream actionIn = new ByteArrayInputStream(jsonFile.getBytes()); String webappDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE); XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_WEBAPPS, webappDir); String actionDir = Webapps.getActionHome(); FileUtils.forceMkdir(new File(actionDir)); File actionOutFile = new File(actionDir+"/org.openecomp.Action_mypol.json"); OutputStream actionOut = new FileOutputStream(actionOutFile); IOUtils.copy(actionIn, actionOut); actionOut.close(); }catch(Exception e){ //could not run test } PolicyDBDaoTransaction transac = dbd.getNewTransaction(); if(filePath != null){ try{ transac.createPolicy(filePath, "tester"); transac.commitTransaction(); } catch(Exception e){ Assert.fail(); } EntityManager getData = emf.createEntityManager(); Query getDataQuery = getData.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:name"); getDataQuery.setParameter("scope", "org.openecomp"); getDataQuery.setParameter("name","Action_mypol.xml"); PolicyEntity result = null; try{ result = (PolicyEntity)getDataQuery.getSingleResult(); } catch(Exception e){ e.printStackTrace(); Assert.fail(); } Assert.assertEquals(xmlFile, result.getPolicyData()); getData.close(); result = null; xmlFile = null; try{ transac = dbd.getNewTransaction(); transac.deletePolicy(filePath); } catch(Exception e){ e.printStackTrace(); Assert.fail(); } Assert.assertTrue(transac.isTransactionOpen()); try{ transac.deletePolicy(filePath); Assert.fail(); } catch(IllegalStateException e){ //pass } catch(Exception e){ Assert.fail(); } transac.commitTransaction(); //Assert.assertFalse(transac.isTransactionOpen()); try{ transac = dbd.getNewTransaction(); transac.deletePolicy(filePath); } catch(Exception e){ e.printStackTrace(); Assert.fail(); } transac.commitTransaction(); //Assert.assertFalse(transac.isTransactionOpen()); String workspaceDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY); PolicyDBDaoTransaction willFail = dbd.getNewTransaction(); File fakeFile = new File("directorythatdoesnotexist/"+workspaceDir); try{ willFail.createPolicy(fakeFile.getAbsolutePath(), "user1"); Assert.fail(); } catch(IllegalArgumentException e){ if(!e.getMessage().equals("The file path could not be parsed")){ Assert.fail(); } } willFail.close(); fakeFile = new File("directorythatdoesnotexist/"+workspaceDir+"/Action_mypol2.xml"); willFail = dbd.getNewTransaction(); try{ willFail.createPolicy(fakeFile.getAbsolutePath(), "user1"); Assert.fail(); } catch(IllegalArgumentException e){ if(!e.getMessage().equals("The file path could not be parsed")){ Assert.fail(); } } willFail.close(); fakeFile = new File("directorythatdoesnotexist/"+workspaceDir+"org/openecomp/Action_mypol2.xml"); willFail = dbd.getNewTransaction(); try{ willFail.createPolicy(fakeFile.getAbsolutePath(), "user1"); Assert.fail(); } catch(IllegalArgumentException e){ if(!e.getMessage().equals("The file path does not exist")){ Assert.fail(); } } willFail.close(); emf = Persistence.createEntityManagerFactory("testPU"); EntityManager aem = emf.createEntityManager(); Query actionQuery = aem.createQuery("SELECT a FROM ActionBodyEntity a WHERE a.actionBodyName=:actionBodyName"); actionQuery.setParameter("actionBodyName", "org.openecomp.Action_mypol.json"); List actionQueryList = actionQuery.getResultList(); if(actionQueryList.size() < 1){ Assert.fail("ActionBodyEntity not found with actionBodyName=: org.openecomp.Action_mypol.json" ); } else if(actionQueryList.size() > 1){ //something went wrong Assert.fail("Somehow, more than one ActionBodyEntity with the actionBodyName = org.openecomp.Action_mypol.json"); } else { ActionBodyEntity abe = (ActionBodyEntity)actionQueryList.get(0); logger.debug("\n\nPolicyDBDaoTest.transactionTests() Assert.assertEquals" + "\n abe.getActionBody() = " + abe.getActionBody() + "\n jsonFile = " + jsonFile + "\n\n"); Assert.assertEquals(abe.getActionBody(),jsonFile); } } } @Test public void createFromPolicyObject(){ String workspaceDir = "src/test/resources/junitTestCreatedDirectory/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY); File parentPath = new File(workspaceDir+"/org/openecomp"); File scope = new File(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WORKSPACE)+"/admin/"+XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_REPOSITORY)); Policy policyObject = new ConfigPolicy(); policyObject.policyAdapter = new PolicyRestAdapter(); policyObject.policyAdapter.setConfigName("testpolicy1"); policyObject.policyAdapter.setParentPath(parentPath.getAbsolutePath()); policyObject.policyAdapter.setUserGitPath(scope.getPath()); policyObject.policyAdapter.setPolicyDescription("my description"); policyObject.policyAdapter.setConfigBodyData("this is my test config file"); policyObject.policyAdapter.setPolicyName("testpolicy1"); policyObject.policyAdapter.setConfigType(ConfigPolicy.OTHER_CONFIG); policyObject.policyAdapter.setPolicyType("Config"); PolicyType policyTypeObject = new PolicyType(); policyObject.policyAdapter.setPolicyData(policyTypeObject); PolicyDBDaoTransaction transaction = dbd.getNewTransaction(); try{ transaction.createPolicy(policyObject, "testuser1"); transaction.commitTransaction(); } catch(Exception e){ transaction.rollbackTransaction(); Assert.fail(); } EntityManager getData = emf.createEntityManager(); Query getDataQuery = getData.createQuery("SELECT p FROM PolicyEntity p WHERE p.scope=:scope AND p.policyName=:name"); getDataQuery.setParameter("scope", "org.openecomp"); getDataQuery.setParameter("name","Config_testpolicy1.xml"); PolicyEntity result = null; try{ result = (PolicyEntity)getDataQuery.getSingleResult(); } catch(Exception e){ e.printStackTrace(); Assert.fail(); } String expectedData; try { expectedData = IOUtils.toString(XACMLPolicyWriter.getXmlAsInputStream(policyTypeObject)); } catch (IOException e1) { expectedData = ""; } Assert.assertEquals(expectedData, result.getPolicyData()); getData.close(); result = null; File policyFile = new File(workspaceDir+"/org/openecomp/Config_testpolicy1.xml"); try{ transaction = dbd.getNewTransaction(); transaction.deletePolicy(policyFile.getAbsolutePath()); } catch(Exception e){ e.printStackTrace(); Assert.fail(); } Assert.assertTrue(transaction.isTransactionOpen()); try{ transaction.deletePolicy(policyFile.getAbsolutePath()); Assert.fail(); } catch(IllegalStateException e){ //pass } catch(Exception e){ Assert.fail(); } transaction.commitTransaction(); Assert.assertFalse(transaction.isTransactionOpen()); try{ transaction = dbd.getNewTransaction(); transaction.deletePolicy(policyFile.getAbsolutePath()); } catch(Exception e){ e.printStackTrace(); Assert.fail(); } //Assert.assertFalse(transaction.isTransactionOpen()); transaction.commitTransaction(); } @Test public void groupTransactions(){ PolicyDBDaoTransaction group = dbd.getNewTransaction(); String groupName = "test group 1"; try{ group.createGroup(PolicyDBDao.createNewPDPGroupId(groupName), groupName, "this is a test group","testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } EntityManager em = emf.createEntityManager(); Query getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); getGroup.setParameter("groupId", PolicyDBDao.createNewPDPGroupId(groupName)); getGroup.setParameter("deleted", false); List groups = getGroup.getResultList(); if(groups.size() != 1){ Assert.fail(); } GroupEntity groupEntity = (GroupEntity)groups.get(0); em.close(); Assert.assertEquals(groupName, groupEntity.getgroupName()); Assert.assertEquals("this is a test group", groupEntity.getDescription()); group = dbd.getNewTransaction(); try{ EcompPDPGroup groupToDelete = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId(groupName),Paths.get("/")); group.deleteGroup(groupToDelete, null,"testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } em = emf.createEntityManager(); getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); getGroup.setParameter("groupId", PolicyDBDao.createNewPDPGroupId(groupName)); getGroup.setParameter("deleted", false); groups = getGroup.getResultList(); if(groups.size() != 0){ System.out.println("Group size: "+groups.size()); Assert.fail(); } em.close(); //add a pdp to a group group = dbd.getNewTransaction(); try{ group.createGroup(PolicyDBDao.createNewPDPGroupId(groupName), groupName, "test group", "testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } group = dbd.getNewTransaction(); try{ group.addPdpToGroup("http://localhost:4344/pdp/", PolicyDBDao.createNewPDPGroupId(groupName), "primary", "the main pdp", 3232, "testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } em = emf.createEntityManager(); Query getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); getPdp.setParameter("pdpId", "http://localhost:4344/pdp/"); getPdp.setParameter("deleted", false); List pdps = getPdp.getResultList(); if(pdps.size() != 1){ System.out.println("Group size: "+pdps.size()); Assert.fail(); } PdpEntity pdp = (PdpEntity)pdps.get(0); Assert.assertEquals(groupName, pdp.getGroup().getgroupName()); Assert.assertEquals(pdp.getPdpName(), "primary"); em.close(); group = dbd.getNewTransaction(); try{ group.removePdpFromGroup("http://localhost:4344/pdp/","testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } em = emf.createEntityManager(); getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.pdpId=:pdpId AND p.deleted=:deleted"); getPdp.setParameter("pdpId", "http://localhost:4344/pdp/"); getPdp.setParameter("deleted", false); pdps = getPdp.getResultList(); if(pdps.size() != 0){ System.out.println("Group size: "+pdps.size()); Assert.fail(); } em.close(); //add some pdps to groups group = dbd.getNewTransaction(); try{ group.createGroup(PolicyDBDao.createNewPDPGroupId("testgroup1"), "testgroup1", "test group", "testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } group = dbd.getNewTransaction(); try{ group.createGroup(PolicyDBDao.createNewPDPGroupId("testgroup2"), "testgroup2", "test group", "testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } group = dbd.getNewTransaction(); try{ group.addPdpToGroup("http://localhost:4344/pdp/", PolicyDBDao.createNewPDPGroupId("testgroup1"), "primary", "the main pdp", 3232, "testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } group = dbd.getNewTransaction(); try{ group.addPdpToGroup("http://localhost:4345/pdp/", PolicyDBDao.createNewPDPGroupId("testgroup1"), "secondary", "the second pdp", 3233, "testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } em = emf.createEntityManager(); getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.deleted=:deleted"); getPdp.setParameter("deleted", false); pdps = getPdp.getResultList(); for(Object o : pdps){ Assert.assertEquals("testgroup1",((PdpEntity)o).getGroup().getgroupName()); } em.close(); group = dbd.getNewTransaction(); try{ EcompPDPGroup groupToDelete = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId("testgroup1"),Paths.get("/")); EcompPDPGroup groupToMoveTo = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId("testgroup2"),Paths.get("/")); group.deleteGroup(groupToDelete, groupToMoveTo,"testuser"); group.commitTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } em = emf.createEntityManager(); getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); getGroup.setParameter("groupId", "testgroup1"); getGroup.setParameter("deleted", false); groups = getGroup.getResultList(); if(groups.size() != 0){ System.out.println("Group size: "+groups.size()); Assert.fail(); } em.close(); em = emf.createEntityManager(); getPdp = em.createQuery("SELECT p FROM PdpEntity p WHERE p.deleted=:deleted"); getPdp.setParameter("deleted", false); pdps = getPdp.getResultList(); for(Object o : pdps){ Assert.assertEquals("testgroup2",((PdpEntity)o).getGroup().getgroupName()); } em.close(); group = dbd.getNewTransaction(); try{ EcompPDPGroup groupToDelete = new StdPDPGroup(PolicyDBDao.createNewPDPGroupId("testgroup2"),Paths.get("/")); EcompPDPGroup groupToMoveTo = null; group.deleteGroup(groupToDelete, groupToMoveTo,"testuser"); group.commitTransaction(); Assert.fail(); } catch(PAPException pe){ //good, can't delete group with pdps group.rollbackTransaction(); } catch(Exception e){ group.rollbackTransaction(); e.printStackTrace(); Assert.fail(); } //add policy to group //update group EcompPDPGroup pdpGroup = new StdPDPGroup("testgroup2", false, "newtestgroup2", "this is my new description", Paths.get("/")); group = dbd.getNewTransaction(); try{ group.updateGroup(pdpGroup, "testuser"); group.commitTransaction(); }catch (Exception e){ e.printStackTrace(); group.rollbackTransaction(); Assert.fail(); } em = emf.createEntityManager(); getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); getGroup.setParameter("groupId", "newtestgroup2"); getGroup.setParameter("deleted", false); groups = getGroup.getResultList(); if(groups.size() != 1){ System.out.println("Group size: "+groups.size()); Assert.fail(); } em.close(); em = emf.createEntityManager(); getGroup = em.createQuery("SELECT g FROM GroupEntity g WHERE g.groupId=:groupId AND g.deleted=:deleted"); getGroup.setParameter("groupId", "testgroup2"); getGroup.setParameter("deleted", false); groups = getGroup.getResultList(); if(groups.size() != 0){ System.out.println("Group size: "+groups.size()); Assert.fail(); } em.close(); //update pdp //set group as default //move pdp to new group } @Test public void encryptionTest(){ try { String encr = d.encryptPassword("testpassword"); System.out.println("original password: "+"testpassword"); System.out.println("Encrypted password: "+encr); String decr = d.decryptPassword(encr); System.out.println("Decrypted password: "+decr); Assert.assertEquals("testpassword", decr); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); Assert.fail(); } } @Test public void getDescriptionFromXacmlTest(){ String myTestDesc = "hello this is a test"; String desc = d.getDescriptionFromXacml(""+myTestDesc+""); Assert.assertEquals(myTestDesc, desc); } @Test public void threadingStabilityTest(){ if(logger.isDebugEnabled()){ logger.debug("\n\n****************************" + "threadingStabilityTest() entry" + "******************************\n\n"); } PolicyDBDaoTransaction t = dbd.getNewTransaction(); Assert.assertTrue(t.isTransactionOpen()); try { //Add 1000 ms to the timeout just to be sure it actually times out int sleepTime = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)) + 1000; if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n sleepTime = " + sleepTime + "\n TimeStamp = " + date.getTime() + "\n\n"); } Thread.sleep(sleepTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n Assert.assertFalse(t.isTransactionOpen() = " + t.isTransactionOpen() + ")" + "\n TimeStamp = " + date.getTime() + "\n\n"); } Assert.assertFalse(t.isTransactionOpen()); if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n a = dbd.getNewTransaction() " + "\n TimeStamp = " + date.getTime() + "\n\n"); } PolicyDBDaoTransaction a = dbd.getNewTransaction(); if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n Assert.assertTrue(a.isTransactionOpen() = " + a.isTransactionOpen() + ")" + "\n TimeStamp = " + date.getTime() + "\n\n"); } Assert.assertTrue(a.isTransactionOpen()); try { //Add 1000 ms to the timeout just to be sure it actually times out int sleepTime = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT)) + 1000; if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n sleepTime = " + sleepTime + "\n TimeStamp = " + date.getTime() + "\n\n"); } Thread.sleep(sleepTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n b = dbd.getNewTransaction() " + "\n TimeStamp = " + date.getTime() + "\n\n"); } PolicyDBDaoTransaction b = dbd.getNewTransaction(); if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n Assert.assertFalse(a.isTransactionOpen() = " + a.isTransactionOpen() + ")" + "\n TimeStamp = " + date.getTime() + "\n\n"); } Assert.assertFalse(a.isTransactionOpen()); if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n Assert.assertTrue(b.isTransactionOpen() = " + b.isTransactionOpen() + ")" + "\n TimeStamp = " + date.getTime() + "\n\n"); } Assert.assertTrue(b.isTransactionOpen()); b.close(); //Now let's test the transaction wait time timeout. Shorten the wait time to 1000 ms System.setProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT,"1000"); //And let's lengthen the transaction timeout to 5000 ms System.setProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT,"5000"); //get a transacton PolicyDBDaoTransaction t1 = dbd.getNewTransaction(); if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n Assert.assertTrue(t1.isTransactionOpen() = " + t1.isTransactionOpen() + ")" + "\n TimeStamp = " + date.getTime() + "\n\n"); } Assert.assertTrue(t1.isTransactionOpen()); //while it is open, get another from a different DB Dao so it will not collide on the synchronized code segment //but will collide at the DB. Remember that the wait time is only 1000 ms try { //Now the 2nd transaction has a wait timeout in 1000 ms PolicyDBDaoTransaction t2 = dbd2.getNewTransaction(); /* * Give it plenty of time to time out the second transaction * It will actually hang right here until it either gets the lock from the DB or the * request for the DB lock times out. The timers are very sloppy so, I have given * this plenty of leeway. */ if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n Thread.sleep(3000)" + "\n TimeStamp = " + date.getTime() + "\n\n"); } Thread.sleep(3000); if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n Assert.assertTrue(t1.isTransactionOpen() = " + t1.isTransactionOpen() + ")" + "\n Assert.assertFalse(t2.isTransactionOpen() = " + t2.isTransactionOpen() + ")" + "\n TimeStamp = " + date.getTime() + "\n\n"); } //Assert.assertTrue(t1.isTransactionOpen()); //Assert.assertFalse(t2.isTransactionOpen()); Assert.fail("\n\nTransaction timeout of 1000 ms exceeded without a PersistenceException\n\n"); } catch (PersistenceException e) { //success if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() " + "\n SUCCESS! Transaction Wait Timeout worked!" + "\n Caught PersistenceException = " + e + "\n TimeStamp = " + date.getTime() + "\n\n"); } } catch (Exception e) { // failure due to some other reason if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nPolicyDBDaoTest.threadingStabilityTest() FAILURE" + "\n Caught Exception = " + e + "\n TimeStamp = " + date.getTime() + "\n\n"); } e.printStackTrace(); Assert.fail(); } if(logger.isDebugEnabled()){ Date date= new java.util.Date(); logger.debug("\n\nthreadingStabilityTest() exit" + "\n TimeStamp = " + date.getTime() + "\n\n"); } } }