package uk.ac.ebi.fg.myequivalents.provenance.db.managers; import static java.lang.System.out; import static org.junit.Assert.assertEquals; import static uk.ac.ebi.fg.myequivalents.provenance.db.managers.ProvDbServiceManagerTest.adminUser; import static uk.ac.ebi.fg.myequivalents.provenance.db.managers.ProvDbServiceManagerTest.editorUser; import static uk.ac.ebi.fg.myequivalents.provenance.db.managers.ProvDbServiceManagerTest.testPass; import static uk.ac.ebi.fg.myequivalents.provenance.db.managers.ProvDbServiceManagerTest.testSecret; import static uk.ac.ebi.fg.myequivalents.provenance.model.ProvenanceRegisterParameter.p; import java.io.InputStreamReader; import java.io.Reader; import java.util.Arrays; import java.util.List; import javax.persistence.EntityManager; import org.junit.After; import org.junit.Before; import org.junit.Test; import uk.ac.ebi.fg.myequivalents.access_control.model.User; import uk.ac.ebi.fg.myequivalents.access_control.model.User.Role; import uk.ac.ebi.fg.myequivalents.managers.impl.db.DbManagerFactory; import uk.ac.ebi.fg.myequivalents.managers.interfaces.AccessControlManager; import uk.ac.ebi.fg.myequivalents.managers.interfaces.EntityMappingManager; import uk.ac.ebi.fg.myequivalents.managers.interfaces.ServiceManager; import uk.ac.ebi.fg.myequivalents.model.Service; import uk.ac.ebi.fg.myequivalents.provenance.db.dao.ProvenanceRegisterEntryDAO; import uk.ac.ebi.fg.myequivalents.provenance.model.ProvenanceRegisterEntry; import uk.ac.ebi.fg.myequivalents.provenance.model.ProvenanceRegisterParameter; import uk.ac.ebi.fg.myequivalents.resources.Resources; import uk.ac.ebi.fg.myequivalents.utils.EntityIdResolver; /** * Tests the functionality of {@link AccessControlManager} * * <dl><dt>date</dt><dd>16 Jun 2014</dd></dl> * @author Marco Brandizi * */ public class ProvDbAccessControlManagerTest { @Before public void init () { ProvDbServiceManagerTest.init (); } @After public void cleanUp () { ProvDbServiceManagerTest.cleanUp (); } @Test public void testUsers () { DbManagerFactory mgrFact = (DbManagerFactory) Resources.getInstance ().getMyEqManagerFactory (); EntityManager em = mgrFact.getEntityManagerFactory ().createEntityManager (); AccessControlManager accMgr = mgrFact.newAccessControlManagerFullAuth ( adminUser.getEmail (), testPass ); User user = new User ( "test.new.user", "Test New", "User", "test.pwd", null, Role.VIEWER, "test.secret" ); accMgr.storeUser ( user ); // Has the above been tracked? em = mgrFact.getEntityManagerFactory ().createEntityManager (); ProvenanceRegisterEntryDAO provDao = new ProvenanceRegisterEntryDAO ( em ); List<ProvenanceRegisterEntry> proves = provDao.find ( adminUser.getEmail (), "accessControl.storeUser", Arrays.asList ( p ( "user", "test.new.user" ) ) ); out.println ( "------ MAPPING RECORDS: " + proves ); assertEquals ( "Expected provenance records not saved (test.new.user)!", 1, proves.size () ); } /** * Test visibility commands. */ @Test public void testVisibility () { DbManagerFactory mgrFact = (DbManagerFactory) Resources.getInstance ().getMyEqManagerFactory (); EntityManager em = mgrFact.getEntityManagerFactory ().createEntityManager (); // The services we will play with Reader xmlIn = new InputStreamReader ( this.getClass ().getResourceAsStream ( "/data/foo_services.xml" ) ); ServiceManager smgr = mgrFact.newServiceManager ( editorUser.getEmail (), testSecret ); smgr.storeServicesFromXML ( xmlIn ); // Test mappings EntityMappingManager mapMgr = mgrFact.newEntityMappingManager ( editorUser.getEmail (), testSecret ); mapMgr.storeMappings ( "test.testmain.service6:acc1", "test.testmain.service8:acc1" ); AccessControlManager accMgr = mgrFact.newAccessControlManager ( editorUser.getEmail (), testSecret ); accMgr.setEntitiesVisibility ( "true", "2014-12-31", "test.testmain.service6:acc1", "test.testmain.service8:acc1" ); // Has the above been tracked? em = mgrFact.getEntityManagerFactory ().createEntityManager (); ProvenanceRegisterEntryDAO provDao = new ProvenanceRegisterEntryDAO ( em ); List<ProvenanceRegisterEntry> proves = provDao.find ( null, "%.setEntitiesVisibility", Arrays.asList ( p ( "publicFlag", "true" ), p ( "%Date", "2014%" ), p ( "entity", null, "%acc1" ) ) ); out.println ( "------ MAPPING RECORDS: " + proves ); assertEquals ( "Expected provenance records not saved (test.new.user)!", 1, proves.size () ); } @Test public void testVisibilityAndUris () { DbManagerFactory mgrFact = (DbManagerFactory) Resources.getInstance ().getMyEqManagerFactory (); EntityManager em = mgrFact.getEntityManagerFactory ().createEntityManager (); // The services we will play with Reader xmlIn = new InputStreamReader ( this.getClass ().getResourceAsStream ( "/data/foo_services.xml" ) ); ServiceManager smgr = mgrFact.newServiceManager ( editorUser.getEmail (), testSecret ); smgr.storeServicesFromXML ( xmlIn ); smgr.storeServices ( Service.UNSPECIFIED_SERVICE ); Service service6 = smgr.getServices ( "test.testmain.service6" ).getServices ().iterator ().next (); String universalUri = "http://totally.faked.uri/bygyx67cc6/ACC:123"; // Test mappings, let's use some URIs as well EntityMappingManager mapMgr = mgrFact.newEntityMappingManager ( editorUser.getEmail (), testSecret ); mapMgr.storeMappingBundle ( "<" + EntityIdResolver.buildUriFromAcc ( "acc1", service6.getUriPattern () ) + ">", "test.testmain.service8:acc1", ":<" + universalUri + ">" ); AccessControlManager accMgr = mgrFact.newAccessControlManager ( editorUser.getEmail (), testSecret ); accMgr.setEntitiesVisibility ( "true", "2014-12-31", "<" + EntityIdResolver.buildUriFromAcc ( "acc1", service6.getUriPattern () ) + ">", "test.testmain.service8:acc1", ":<" + universalUri + ">" ); // Has the above been tracked? em = mgrFact.getEntityManagerFactory ().createEntityManager (); ProvenanceRegisterEntryDAO provDao = new ProvenanceRegisterEntryDAO ( em ); List<ProvenanceRegisterEntry> proves = provDao.find ( null, "%.setEntitiesVisibility", Arrays.asList ( p ( "publicFlag", "true" ), p ( "%Date", "2014%" ), p ( "entity", service6.getName (), "acc1" ) ) ); out.println ( "------ MAPPING RECORDS: " + proves ); assertEquals ( "Expected provenance records not saved!", 1, proves.size () ); // Turn URI into service:accession, provenance entry param are always normalised this way proves = provDao.find ( null, "%.setEntitiesVisibility", Arrays.asList ( p ( "publicFlag", "true" ), p ( "%Date", "2014%" ), ProvenanceRegisterParameter.pent ( provDao.getEntityIdResolver (), "<" + EntityIdResolver.buildUriFromAcc ( "acc1", service6.getUriPattern () ) + ">" ) ) ); out.println ( "------ MAPPING RECORDS FROM SPLIT URI: " + proves ); assertEquals ( "Expected provenance records not saved!", 1, proves.size () ); // Universal URI proves = provDao.find ( null, "%.setEntitiesVisibility", Arrays.asList ( p ( "publicFlag", "true" ), p ( "%Date", "2014%" ), p ( "entity", Service.UNSPECIFIED_SERVICE_NAME, universalUri ) ) ); out.println ( "------ MAPPING RECORDS GOT FROM UNIVERSAL URI: " + proves ); assertEquals ( "Expected provenance records not saved!", 1, proves.size () ); } }