/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
package org.roda.core.index;
import static org.testng.AssertJUnit.assertEquals;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.ParseException;
import java.util.ArrayList;
import org.roda.core.CorporaConstants;
import org.roda.core.RodaCoreFactory;
import org.roda.core.TestsHelper;
import org.roda.core.data.common.RodaConstants;
import org.roda.core.data.exceptions.RODAException;
import org.roda.core.data.v2.index.IndexResult;
import org.roda.core.data.v2.index.sublist.Sublist;
import org.roda.core.data.v2.ip.IndexedAIP;
import org.roda.core.data.v2.ip.IndexedFile;
import org.roda.core.data.v2.ip.IndexedRepresentation;
import org.roda.core.data.v2.ip.metadata.IndexedPreservationEvent;
import org.roda.core.data.v2.user.User;
import org.roda.core.model.ModelService;
import org.roda.core.storage.DefaultStoragePath;
import org.roda.core.storage.StorageService;
import org.roda.core.storage.fs.FSUtils;
import org.roda.core.storage.fs.FileStorageService;
import org.roda.core.util.IdUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@Test(groups = {RodaConstants.TEST_GROUP_ALL, RodaConstants.TEST_GROUP_TRAVIS})
public class PermissionsTest {
private static Path basePath;
private static ModelService model;
private static IndexService index;
private static StorageService corporaService;
private static final Logger LOGGER = LoggerFactory.getLogger(PermissionsTest.class);
@BeforeClass
public static void setUp() throws Exception {
basePath = TestsHelper.createBaseTempDir(PermissionsTest.class, true);
boolean deploySolr = true;
boolean deployLdap = true;
boolean deployFolderMonitor = false;
boolean deployOrchestrator = false;
boolean deployPluginManager = false;
boolean deployDefaultResources = false;
RodaCoreFactory.instantiateTest(deploySolr, deployLdap, deployFolderMonitor, deployOrchestrator,
deployPluginManager, deployDefaultResources);
model = RodaCoreFactory.getModelService();
index = RodaCoreFactory.getIndexService();
URL corporaURL = PermissionsTest.class.getResource("/corpora");
corporaService = new FileStorageService(Paths.get(corporaURL.toURI()));
LOGGER.debug("Running index tests under storage {}", basePath);
}
@AfterClass
public static void tearDown() throws Exception {
RodaCoreFactory.shutdown();
FSUtils.deletePath(basePath);
}
@Test
public void testAIP() throws RODAException, ParseException {
// Generate AIP Id
final String aipId = IdUtils.createUUID();
// Create AIP
model.createAIP(aipId, corporaService,
DefaultStoragePath.parse(CorporaConstants.SOURCE_AIP_CONTAINER, CorporaConstants.SOURCE_AIP_PERMISSIONS),
RodaConstants.ADMIN);
index.commitAIPs();
User user = null;
boolean justActive = true;
IndexResult<IndexedAIP> find1 = index.find(IndexedAIP.class, null, null, new Sublist(0, 10), null, user, justActive,
new ArrayList<>());
assertEquals(0, find1.getTotalCount());
justActive = false;
IndexResult<IndexedAIP> find2 = index.find(IndexedAIP.class, null, null, new Sublist(0, 10), null, user, justActive,
new ArrayList<>());
assertEquals(1, find2.getTotalCount());
user = new User("testuser", "User with access", "", false);
justActive = true;
IndexResult<IndexedAIP> find3 = index.find(IndexedAIP.class, null, null, new Sublist(0, 10), null, user, justActive,
new ArrayList<>());
assertEquals(0, find3.getTotalCount());
justActive = false;
IndexResult<IndexedAIP> find4 = index.find(IndexedAIP.class, null, null, new Sublist(0, 10), null, user, justActive,
new ArrayList<>());
assertEquals(1, find4.getTotalCount());
user = new User("guest", "User with access", "", true);
justActive = true;
IndexResult<IndexedAIP> find5 = index.find(IndexedAIP.class, null, null, new Sublist(0, 10), null, user, justActive,
new ArrayList<>());
assertEquals(0, find5.getTotalCount());
justActive = false;
IndexResult<IndexedAIP> find6 = index.find(IndexedAIP.class, null, null, new Sublist(0, 10), null, user, justActive,
new ArrayList<>());
assertEquals(0, find6.getTotalCount());
user.addGroup("testgroup");
IndexResult<IndexedAIP> find7 = index.find(IndexedAIP.class, null, null, new Sublist(0, 10), null, user, justActive,
new ArrayList<>());
assertEquals(1, find7.getTotalCount());
model.deleteAIP(aipId);
}
@Test
public void testRepresentation() throws RODAException, ParseException {
// Generate AIP Id
final String aipId = IdUtils.createUUID();
// Create AIP
model.createAIP(aipId, corporaService,
DefaultStoragePath.parse(CorporaConstants.SOURCE_AIP_CONTAINER, CorporaConstants.SOURCE_AIP_PERMISSIONS),
RodaConstants.ADMIN);
index.commitAIPs();
User user = null;
boolean justActive = true;
IndexResult<IndexedRepresentation> find1 = index.find(IndexedRepresentation.class, null, null, new Sublist(0, 10),
null, user, justActive, new ArrayList<>());
assertEquals(0, find1.getTotalCount());
justActive = false;
IndexResult<IndexedRepresentation> find2 = index.find(IndexedRepresentation.class, null, null, new Sublist(0, 10),
null, user, justActive, new ArrayList<>());
assertEquals(2, find2.getTotalCount());
user = new User("testuser", "User with access", "", false);
justActive = true;
IndexResult<IndexedRepresentation> find3 = index.find(IndexedRepresentation.class, null, null, new Sublist(0, 10),
null, user, justActive, new ArrayList<>());
assertEquals(0, find3.getTotalCount());
justActive = false;
IndexResult<IndexedRepresentation> find4 = index.find(IndexedRepresentation.class, null, null, new Sublist(0, 10),
null, user, justActive, new ArrayList<>());
assertEquals(2, find4.getTotalCount());
user = new User("guest", "User with access", "", true);
justActive = true;
IndexResult<IndexedRepresentation> find5 = index.find(IndexedRepresentation.class, null, null, new Sublist(0, 10),
null, user, justActive, new ArrayList<>());
assertEquals(0, find5.getTotalCount());
justActive = false;
IndexResult<IndexedRepresentation> find6 = index.find(IndexedRepresentation.class, null, null, new Sublist(0, 10),
null, user, justActive, new ArrayList<>());
assertEquals(0, find6.getTotalCount());
user.addGroup("testgroup");
IndexResult<IndexedRepresentation> find7 = index.find(IndexedRepresentation.class, null, null, new Sublist(0, 10),
null, user, justActive, new ArrayList<>());
assertEquals(2, find7.getTotalCount());
model.deleteAIP(aipId);
}
@Test
public void testFiles() throws RODAException, ParseException {
// Generate AIP Id
final String aipId = IdUtils.createUUID();
// Create AIP
model.createAIP(aipId, corporaService,
DefaultStoragePath.parse(CorporaConstants.SOURCE_AIP_CONTAINER, CorporaConstants.SOURCE_AIP_PERMISSIONS),
RodaConstants.ADMIN);
index.commitAIPs();
User user = null;
boolean justActive = true;
IndexResult<IndexedFile> find1 = index.find(IndexedFile.class, null, null, new Sublist(0, 10), null, user,
justActive, new ArrayList<>());
assertEquals(0, find1.getTotalCount());
justActive = false;
IndexResult<IndexedFile> find2 = index.find(IndexedFile.class, null, null, new Sublist(0, 10), null, user,
justActive, new ArrayList<>());
assertEquals(4, find2.getTotalCount());
user = new User("testuser", "User with access", "", false);
justActive = true;
IndexResult<IndexedFile> find3 = index.find(IndexedFile.class, null, null, new Sublist(0, 10), null, user,
justActive, new ArrayList<>());
assertEquals(0, find3.getTotalCount());
justActive = false;
IndexResult<IndexedFile> find4 = index.find(IndexedFile.class, null, null, new Sublist(0, 10), null, user,
justActive, new ArrayList<>());
assertEquals(4, find4.getTotalCount());
user = new User("guest", "User with access", "", true);
justActive = true;
IndexResult<IndexedFile> find5 = index.find(IndexedFile.class, null, null, new Sublist(0, 10), null, user,
justActive, new ArrayList<>());
assertEquals(0, find5.getTotalCount());
justActive = false;
IndexResult<IndexedFile> find6 = index.find(IndexedFile.class, null, null, new Sublist(0, 10), null, user,
justActive, new ArrayList<>());
assertEquals(0, find6.getTotalCount());
user.addGroup("testgroup");
IndexResult<IndexedFile> find7 = index.find(IndexedFile.class, null, null, new Sublist(0, 10), null, user,
justActive, new ArrayList<>());
assertEquals(4, find7.getTotalCount());
model.deleteAIP(aipId);
}
@Test
public void testPreservationEvents() throws RODAException, ParseException {
// Generate AIP Id
final String aipId = IdUtils.createUUID();
// Create AIP
model.createAIP(aipId, corporaService,
DefaultStoragePath.parse(CorporaConstants.SOURCE_AIP_CONTAINER, CorporaConstants.SOURCE_AIP_PERMISSIONS),
RodaConstants.ADMIN);
index.commitAIPs();
User user = null;
boolean justActive = true;
IndexResult<IndexedPreservationEvent> find1 = index.find(IndexedPreservationEvent.class, null, null,
new Sublist(0, 10), null, user, justActive, new ArrayList<>());
assertEquals(0, find1.getTotalCount());
justActive = false;
IndexResult<IndexedPreservationEvent> find2 = index.find(IndexedPreservationEvent.class, null, null,
new Sublist(0, 10), null, user, justActive, new ArrayList<>());
assertEquals(2, find2.getTotalCount());
user = new User("testuser", "User with access", "", false);
justActive = true;
IndexResult<IndexedPreservationEvent> find3 = index.find(IndexedPreservationEvent.class, null, null,
new Sublist(0, 10), null, user, justActive, new ArrayList<>());
assertEquals(0, find3.getTotalCount());
justActive = false;
IndexResult<IndexedPreservationEvent> find4 = index.find(IndexedPreservationEvent.class, null, null,
new Sublist(0, 10), null, user, justActive, new ArrayList<>());
assertEquals(2, find4.getTotalCount());
user = new User("guest", "User with access", "", true);
justActive = true;
IndexResult<IndexedPreservationEvent> find5 = index.find(IndexedPreservationEvent.class, null, null,
new Sublist(0, 10), null, user, justActive, new ArrayList<>());
assertEquals(0, find5.getTotalCount());
justActive = false;
IndexResult<IndexedPreservationEvent> find6 = index.find(IndexedPreservationEvent.class, null, null,
new Sublist(0, 10), null, user, justActive, new ArrayList<>());
assertEquals(0, find6.getTotalCount());
user.addGroup("testgroup");
IndexResult<IndexedPreservationEvent> find7 = index.find(IndexedPreservationEvent.class, null, null,
new Sublist(0, 10), null, user, justActive, new ArrayList<>());
assertEquals(2, find7.getTotalCount());
model.deleteAIP(aipId);
}
}