ckan-util-library/src/test/java/org/gcube/datacatalogue/ckanutillibrary/server/TestDataCatalogueLib.java

611 lines
22 KiB
Java

package org.gcube.datacatalogue.ckanutillibrary.server;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.datacatalogue.ckanutillibrary.server.utils.CatalogueUtilMethods;
import org.gcube.datacatalogue.ckanutillibrary.shared.CKanUserWrapper;
import org.gcube.datacatalogue.ckanutillibrary.shared.CkanDatasetRelationship;
import org.gcube.datacatalogue.ckanutillibrary.shared.DatasetRelationships;
import org.gcube.datacatalogue.ckanutillibrary.shared.ResourceBean;
import org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg;
import org.junit.Test;
import org.slf4j.LoggerFactory;
import eu.trentorise.opendata.jackan.CheckedCkanClient;
import eu.trentorise.opendata.jackan.model.CkanDataset;
import eu.trentorise.opendata.jackan.model.CkanGroup;
import eu.trentorise.opendata.jackan.model.CkanOrganization;
import eu.trentorise.opendata.jackan.model.CkanResource;
import eu.trentorise.opendata.jackan.model.CkanUser;
/**
* Tests class.
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
*/
public class TestDataCatalogueLib {
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(TestDataCatalogueLib.class);
private DataCatalogueFactory factory;
private String scope = "/gcube/devsec/devVRE";
//private String testUser = "costantino_perciante";
private String testUser = "francesco_mangiacrapa";
String subjectId = "aa_father4";
String objectId = "bb_son4";
//@Before
public void before() throws Exception{
factory = DataCatalogueFactory.getFactory();
}
//@Test
public void getSysadminEmail() throws Exception{
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
System.out.println(utils.getCatalogueEmail());
}
//@Test
public void getStatistics() throws Exception{
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
logger.debug("Statistics " + utils.getStatistics());
}
//@Test
public void getLandingPages() throws Exception{
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
logger.debug("Landing pages " + utils.getLandingPages());
}
//@Test
public void getOrganizationForName() throws Exception{
String orgName = "nextnext";
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
CkanOrganization org = utils.getOrganizationByName(orgName);
logger.debug("The "+CkanOrganization.class.getSimpleName()+" is: "+org.getName());
logger.debug("LandingPages of "+CkanOrganization.class.getSimpleName()+" for name " + utils.getLandingPages());
if(org.getUsers()!=null) {
for (CkanUser user : org.getUsers()) {
logger.debug("User: "+user.getName());
}
}
}
//@Test
public void getRoleOfUserInOrganization() throws Exception{
String orgName = "nextnext";
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
CkanOrganization org = utils.getOrganizationByName(orgName);
String apiKey = utils.getApiKeyFromUsername(testUser);
String role = utils.getRoleOfUserInOrganization(testUser, org.getName(), apiKey);
logger.debug("The user "+testUser+" in the org "+org.getName() + " has the role "+role);
}
//@Test
public void getGroupForName() throws Exception{
String groupName = "ariadne";
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
CkanGroup org = utils.getGroupByName(groupName);
logger.debug("The "+CkanGroup.class.getSimpleName()+" is: "+org.getName());
logger.debug("LandingPages of "+CkanGroup.class.getSimpleName()+" for name " + utils.getLandingPages());
if(org.getUsers()!=null) {
for (CkanUser user : org.getUsers()) {
logger.debug("User: "+user.getName());
}
}
}
//@Test
public void getDatasetIdsFromDB() throws Exception{
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
List<String> ids = utils.getProductsIdsInGroupOrOrg("aquamaps", true, 0, Integer.MAX_VALUE);
logger.debug("Size is " + ids.size());
}
//@Test
public void searchInOrganization() throws Exception{
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
String apiKey = utils.getApiKeyFromUsername(testUser);
List<CkanDataset> matches = utils.searchForPackageInOrganization(apiKey, "\"asfis:HMC+eez:AGO;FAO+grsf-org:INT+eez:AGO;RFB+iso3:AGO+isscfg:01.1.1\"", 0, 10, "grsf_admin");
logger.debug("Size is " + matches.size());
}
//@Test
public void search() throws Exception{
DataCatalogueImpl utils = factory.getUtilsPerScope(scope);
String apiKey = utils.getApiKeyFromUsername(testUser);
List<CkanDataset> matches = utils.searchForPackage(apiKey, "\"asfis:HMC+eez:AGO;FAO+grsf-org:INT+eez:AGO;RFB+iso3:AGO+isscfg:01.1.1\"", 0, 10);
logger.debug("Size is " + matches.size());
}
// @Test
public void testManageProduct() throws Exception{
DataCatalogueImpl catalogue = factory.getUtilsPerScope(scope);
String apiKey = catalogue.getApiKeyFromUsername("costantino_perciante");
//Map<String, List<String>> map = new HashMap<String, List<String>>();
//map.put("a new custom field", Arrays.asList("a new custom field 2"));
//catalogue.patchProductCustomFields("test-searchable-504043", apiKey, map);
catalogue.removeCustomField("test-searchable-504043", "a new custom field", "a new custom field", apiKey);
}
//@Test
public void getRole() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
instance.getOrganizationsAndRolesByUser(testUser, Arrays.asList(RolesCkanGroupOrOrg.ADMIN, RolesCkanGroupOrOrg.EDITOR, RolesCkanGroupOrOrg.MEMBER
));
}
//@Test
public void datasetsRelationshipCreate() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
DatasetRelationships relation = DatasetRelationships.parent_of;
boolean resC = instance.createDatasetRelationship(subjectId, objectId, relation, "Comment for this relationship", instance.getApiKeyFromUsername(testUser));
logger.debug("Res is " + resC);
}
//@Test
public void datasetsRelationshipDelete() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
DatasetRelationships relation = DatasetRelationships.child_of;
boolean resD = instance.deleteDatasetRelationship(subjectId, objectId, relation, instance.getApiKeyFromUsername(testUser));
logger.debug("ResD is " + resD);
}
//@Test
public void datasetRelationshipRetrieve() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
List<CkanDatasetRelationship> res = instance.getRelationshipDatasets(subjectId, objectId, instance.getApiKeyFromUsername(testUser));
logger.debug("Relationships " + res);
}
//@Test
public void factoryTest() throws Exception{
DataCatalogueFactory factory = DataCatalogueFactory.getFactory();
while(true){
factory.getUtilsPerScope("/gcube");
Thread.sleep(60* 1000 * 3);
factory.getUtilsPerScope("/gcube");
break;
}
for (int i = 0; i < 5; i++) {
Thread.sleep(1000);
factory.getUtilsPerScope("/gcube");
}
}
//@Test
public void testgetApiKeyFromUser() throws Exception {
logger.debug("Testing getApiKeyFromUser");
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String username = "francescomangiacrapa";
String key = instance.getApiKeyFromUsername(username);
System.out.println("key for " + username + " is " + key);
}
//@Test
public void testgetUserFromApiKey() throws Exception {
logger.debug("Testing getApiKeyFromUser");
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String key = "put-your-key-here";
CKanUserWrapper user = instance.getUserFromApiKey(key);
System.out.println("user for " + key + " is " + user);
}
//@Test
public void getOrganizationsByUser() throws Exception {
System.out.println("Testing getOrganizationsByUser");
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String username = "francescomangiacrapa";
List<CkanOrganization> organizations = instance.getOrganizationsByUser(username);
System.out.println("organizations for user " + username + " are: ");
for (CkanOrganization ckanOrganization : organizations) {
System.out.println("-" + ckanOrganization.getName());
}
}
//@Test
public void getGroupsAndRolesByUser() throws Exception {
logger.debug("Testing getGroupsAndRolesByUser");
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String username = "andrea.rossi";
instance = new DataCatalogueImpl("/gcube");
List<RolesCkanGroupOrOrg> rolesToMatch = new ArrayList<RolesCkanGroupOrOrg>();
rolesToMatch.add(RolesCkanGroupOrOrg.ADMIN);
rolesToMatch.add(RolesCkanGroupOrOrg.MEMBER);
rolesToMatch.add(RolesCkanGroupOrOrg.EDITOR);
Map<String, List<RolesCkanGroupOrOrg>> map = instance.getOrganizationsAndRolesByUser(username, rolesToMatch);
System.out.println("organizations for user " + username + " are " + map);
}
//@Test
public void getUsers() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
List<RolesCkanGroupOrOrg> rolesToMatch = new ArrayList<RolesCkanGroupOrOrg>();
rolesToMatch.add(RolesCkanGroupOrOrg.ADMIN);
rolesToMatch.add(RolesCkanGroupOrOrg.EDITOR);
Map<String, List<RolesCkanGroupOrOrg>> orgs = instance.getOrganizationsAndRolesByUser("costantino_perciante", rolesToMatch);
Iterator<Entry<String, List<RolesCkanGroupOrOrg>>> iterator = orgs.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<java.lang.String, java.util.List<org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg>> entry = (Map.Entry<java.lang.String, java.util.List<org.gcube.datacatalogue.ckanutillibrary.shared.RolesCkanGroupOrOrg>>) iterator
.next();
logger.debug("Org is " + entry.getKey() + " and role is " + entry.getValue().get(0));
}
}
//@Test
public void getScopePerUrl(){
ScopeProvider.instance.set("/gcube");
String url = "https://dev4.d4science.org/group/devvre/ckan";
String scopeToUse = ApplicationProfileScopePerUrlReader.getScopePerUrl(url);
logger.debug("Retrieved scope is " + scopeToUse);
ScopeProvider.instance.reset(); // the following sysout should print null
String url2 = "https://dev4.d4science.org/group/devvre/ckan";
String scopeToUse2 = ApplicationProfileScopePerUrlReader.getScopePerUrl(url2);
logger.debug("Retrieved scope is " + scopeToUse2);
}
//@Test
public void createUsers() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope("/gcube/devsec/devVRE");
CheckedCkanClient client = new CheckedCkanClient(instance.getCatalogueUrl(), instance.getApiKeyFromUsername("costantino_perciante"));
CkanUser editorUser = new CkanUser("user_editor_devvre", "user_editor_devvre@test.it", "");
client.createUser(editorUser);
CkanUser adminUser = new CkanUser("user_admin_devvre", "user_admin_devvre@test.it", "");
client.createUser(adminUser);
CkanUser memberUser = new CkanUser("user_member_devvre", "user_member_devvre@test.it", "");
client.createUser(memberUser);
}
//@Test
public void createAsEditor() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope("/gcube/devsec/devVRE");
boolean checkedEditor = instance.checkRoleIntoOrganization("user_editor_devvre", "devvre", RolesCkanGroupOrOrg.MEMBER);
if(checkedEditor){
logger.debug("Created editor in devvre? " + checkedEditor);
}
boolean checkedAdmin = instance.checkRoleIntoOrganization("user_admin_devvre", "devvre", RolesCkanGroupOrOrg.MEMBER);
if(checkedAdmin){
logger.debug("Created admin in devvre? " + checkedAdmin);
}
boolean checkedMember = instance.checkRoleIntoOrganization("user_member_devvre", "devvre", RolesCkanGroupOrOrg.MEMBER);
if(checkedMember){
logger.debug("Created member in devvre? " + checkedMember);
}
}
//@Test
public void editorCreateDataset() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope("/gcube/devsec/devVRE");
instance.createCKanDataset(instance.getApiKeyFromUsername("user_editor_devvre"), "dataset_as_editor_devvre_private", null, "devvre", null, null, null, null, 1, null, null, null, null, null, false);
}
//@Test
public void adminCreateDataset() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope("/gcube/devsec/devVRE");
//instance.createCKanDataset(instance.getApiKeyFromUsername("user_admin_devvre"), "dataset_as_admin_devvre", "devvre", null, null, null, null, 1, null, null, null, null, null, false);
instance.createCKanDataset(instance.getApiKeyFromUsername("user_admin_devvre"), "dataset_as_admin_devvre_private", null, "devvre", null, null, null, null, 1, null, null, null, null, null, false);
}
//@Test
public void adminChangeVisibility() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope("/gcube/devsec/devVRE");
//instance.createCKanDataset(instance.getApiKeyFromUsername("user_editor_devvre"), "dataset_as_editor_devvre", "devvre", null, null, null, null, 1, null, null, null, null, null, false);
//instance.setDatasetPrivate(true, "3571cca5-b0ae-4dc6-b791-434a8e062ce5", "dataset_as_admin_devvre_public", instance.getApiKeyFromUsername("user_admin_devvre"));
boolean res = instance.setDatasetPrivate(false, "3571cca5-b0ae-4dc6-b791-434a8e062ce5", "33bbdcb1-929f-441f-8718-a9e5134f517d", instance.getApiKeyFromUsername("user_admin_devvre"));
logger.debug(""+res);
// CheckedCkanClient client = new CheckedCkanClient(instance.getCatalogueUrl(), instance.getApiKeyFromUsername("user_admin_devvre"));
// CkanDataset dataset = client.getDataset("dataset_as_admin_devvre_private");
// logger.debug("Current value for private: " + dataset.isPriv());
// dataset.setPriv(!dataset.isPriv());
// CkanDataset datasetUpd = client.updateDataset(dataset);
// logger.debug("Private value is " + datasetUpd.isPriv());
//
}
//@Test
public void testInvalidOrgRole() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
boolean res = instance.isRoleAlreadySet("francesco_mangiacrapa", "devvre_group", RolesCkanGroupOrOrg.ADMIN, true);
logger.debug(""+res);
// set to editor
instance.checkRoleIntoGroup("francesco_mangiacrapa", "devvre_group", RolesCkanGroupOrOrg.EDITOR);
}
//@Test
public void existProductWithNameOrId() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
boolean res = instance.existProductWithNameOrId("notification_portlet_2");
logger.debug(""+res);
}
//@Test
public void testGroupAssociation() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String datasetId = "test_grsf_group_stock_groups_sadsad";
String groupName = "assessment-unit";
instance.assignDatasetToGroup(groupName, datasetId, instance.getApiKeyFromUsername("costantino_perciante"));
}
//@Test
public void testAddResource() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String datasetId = "another_test_to_fix_add_resource";
//instance.assignDatasetToGroup(groupName, datasetId, instance.getApiKeyFromUsername("costantino_perciante"));
String api = instance.getApiKeyFromUsername(testUser);
CheckedCkanClient client = new CheckedCkanClient(instance.getCatalogueUrl(), api);
List<String> randomName = Arrays.asList("FIRMS", "RAM", "FishSource");
for (int i = 0; i < 100; i++) {
CkanResource resource = new CkanResource("https://data-dev.d4science.net/YpCK", datasetId);
String name = randomName.get((int)Math.round(Math.ceil(Math.random() * 3)));
resource.setName(name);
client.createResource(resource);
}
}
//@Test
public void testAddResourceToDataset() throws Exception{
factory = DataCatalogueFactory.getFactory();
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String datasetId = "another_test_to_fix_add_resource";
String apiKey = instance.getApiKeyFromUsername(testUser);
String resourceURL = "https://data-dev.d4science.net/YpCK";
String name = "Resouce "+resourceURL.subSequence(resourceURL.length()-4, resourceURL.length());
ResourceBean resourceBean = new ResourceBean(resourceURL, name, "", "",
testUser,datasetId,"");
instance.addResourceToDataset(resourceBean, apiKey);
}
//@Test
public void checkGroupRole() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String role = instance.getRoleOfUserInGroup("francesco.mangiacrapa", "test-by-francesco", instance.getApiKeyFromUsername("francesco.mangiacrapa"));
logger.debug("Role is " + role);
}
//@Test
public void getURL() throws Exception{
DataCatalogueImpl util = factory.getUtilsPerScope("/gcube/devNext/NextNext");
CkanDataset dataset = new CkanDataset();
CheckedCkanClient client = new CheckedCkanClient(util.getCatalogueUrl(), util.getApiKeyFromUsername("costantino_perciante"));
dataset.setName("random-test-" + UUID.randomUUID().toString().substring(0, 5));
dataset.setOwnerOrg(client.getOrganization("devvre").getId());
dataset.setOpen(true);
dataset.setPriv(true);
//CkanDataset id = client.createDataset(dataset);
// util.setDatasetPrivate(true, client.getOrganization("devvre").getId(), id.getId(), util.getApiKeyFromUsername("costantino_perciante"));
}
//@Test
public void deleteAndPurgeDataset() throws Exception{
DataCatalogueImpl util = factory.getUtilsPerScope("/gcube/devNext/NextNext");
boolean deleted = util.deleteProduct("random-test-56sadadsfsdf", util.getApiKeyFromUsername("user_admin_devvre"), true);
logger.debug("Deleted ? " + deleted);
}
// @Test
public void testSearchableSet() throws Exception{
DataCatalogueImpl util = factory.getUtilsPerScope("/gcube/devNext/NextNext");
boolean setSearchability = util.setSearchableField("1b261d07-9f9c-414f-ad8d-c5aa429548fc", false);
logger.debug("Searchability set? " + setSearchability);
}
//@Test
public void testNameConversion(){
logger.debug(CatalogueUtilMethods.fromCKanUsernameToUsername("costantino_perciante"));
}
//@Test
public void getGroupsRoles() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
Map<RolesCkanGroupOrOrg, List<String>> res = instance.getRolesAndUsersGroup("abundance-level");
logger.debug(res.toString());
}
//@Test
public void testResourcePatch() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String id = "858f5e77-80c2-4cb2-bcfc-77529693dc9a";
instance.patchResource(id, "http://ftp.d4science.org/previews/69cc0769-de6f-45eb-a842-7be2807e8887.jpg", "new_name_for_testing_patch.csv", "description test", "", instance.getApiKeyFromUsername("costantino_perciante"));
}
//@Test
public void testPatchProduct() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
Map<String, List<String>> customFieldsToChange = new HashMap<String, List<String>>();
customFieldsToChange.put("Status", Arrays.asList("Pending"));
instance.patchProductCustomFields("a-test-to-ignore", instance.getApiKeyFromUsername("costantino_perciante"), customFieldsToChange, false);
}
//@Test
public void addTag()throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
instance.addTag("test-after-tags-editing", instance.getApiKeyFromUsername("costantino_perciante"), "api add tag to test");
}
//@Test
public void removeTag()throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
instance.removeTag("test-after-tags-editing", instance.getApiKeyFromUsername("costantino_perciante"), "api add tag to test");
}
//@Test
public void removeGroup()throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
instance.removeDatasetFromGroup("pending", "test-after-tags-editing", instance.getApiKeyFromUsername("costantino_perciante"));
}
//@Test
public void getGroups() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
instance.getParentGroups("abundance-level", instance.getApiKeyFromUsername("costantino_perciante"));
}
// @Test
public void createGroupsAndSetAsFather() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
//CkanGroup childGroup = instance.createGroup("test-group-child", "A child group", null);
//CkanGroup parentGroup = instance.createGroup("test-group-parent", "A parent group", null);
instance.setGroupParent("test-group-parent", "test-group-child");
}
//@Test
public void testBelongsToGroup() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
boolean checked = instance.isDatasetInGroup("assessment-unit", "test-after-updates-17-1654");
logger.debug("Result is " + checked);
}
// @Test
public void getDatasetsInGroup() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
List<CkanDataset> result = instance.getProductsInGroup("assessment-unit");
for (CkanDataset ckanDataset : result) {
logger.debug("Dataset name is " + ckanDataset.getName());
}
}
//@Test
public void getUserRoleByGroup() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String username = "costantino_perciante";
long init = System.currentTimeMillis();
instance.getUserRoleByGroup(username, instance.getApiKeyFromUsername(username));
long end = System.currentTimeMillis();
logger.debug("Time taken " + (end - init));
}
//@Test
public void getUserRoleByOrganization() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String username = "costantino_perciante";
long init = System.currentTimeMillis();
instance.getUserRoleByOrganization(username, instance.getApiKeyFromUsername(username));
long end = System.currentTimeMillis();
logger.debug("Time taken " + (end - init));
}
//@Test
public void getHigher(){
logger.debug("Max is " + RolesCkanGroupOrOrg.getHigher(RolesCkanGroupOrOrg.ADMIN, RolesCkanGroupOrOrg.ADMIN));
}
//@Test
public void getUrlProduct() throws Exception{
DataCatalogueImpl instance = factory.getUtilsPerScope(scope);
String datasetName = "test_from_andrea_rossi";
String url = instance.getUrlFromDatasetIdOrName(datasetName);
logger.debug("url is " + url);
}
//@Test
public void getCatalogueURLs() throws Exception{
DataCatalogueImpl util = factory.getUtilsPerScope("/gcube/devNext/NextNext");
logger.debug("MAP ACCESS URL TO CATALOGUE:" +util.getMapAccessURLToCatalogue());
}
}