package eu.europeana.cloud.integration.usecases; import eu.europeana.cloud.client.uis.rest.CloudException; import eu.europeana.cloud.client.uis.rest.UISClient; import eu.europeana.cloud.common.model.CloudIdAndTimestampResponse; import eu.europeana.cloud.common.response.RepresentationRevisionResponse; import eu.europeana.cloud.common.utils.Tags; import eu.europeana.cloud.mcs.driver.FileServiceClient; import eu.europeana.cloud.mcs.driver.RecordServiceClient; import eu.europeana.cloud.service.mcs.exception.MCSException; import org.apache.commons.io.IOUtils; import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.util.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static eu.europeana.cloud.integration.usecases.IntegrationConstants.*; /** * Created by Tarek on 2/9/2017. */ public class ActiveRecordsTestCase implements TestCase { @Resource private DatasetHelper sourceDatasetHelper; @Resource private UISClient adminUisClient; @Resource private RecordServiceClient adminRecordServiceClient; @Resource private RecordServiceClient sourceRecordServiceClient; @Resource private FileServiceClient sourceFileServiceClient; private final static int RECORDS_NUMBERS = 3; public void executeTestCase() throws CloudException, MCSException, IOException { System.out.println("ActiveRecordsTestCase started .."); try { List<CloudIdAndTimestampResponse> dereferenceCloudIdAndTimestampResponseList = getLatestCloudIdAndTimestampResponsesForDereferenceRevision(); assertNotNull(dereferenceCloudIdAndTimestampResponseList); assertEquals(dereferenceCloudIdAndTimestampResponseList.size(), RECORDS_NUMBERS); List<CloudIdAndTimestampResponse> publishedCloudIdAndTimestampResponseList = getLatestCloudIdAndTimestampResponsesForPublishRevision(); assertNotNull(publishedCloudIdAndTimestampResponseList); assertEquals(publishedCloudIdAndTimestampResponseList.size(), 1); List<CloudIdAndTimestampResponse> intersectedCloudIdAndTimestamps = intersectCloudIdAndTimestampResponsesBasedOnCloudId(dereferenceCloudIdAndTimestampResponseList, publishedCloudIdAndTimestampResponseList); assertNotNull(intersectedCloudIdAndTimestamps); assertEquals(intersectedCloudIdAndTimestamps.size(), 1); String utcFormateDateString = TestHelper.getUTCDateString(intersectedCloudIdAndTimestamps.get(0).getRevisionTimestamp()); RepresentationRevisionResponse representationRevisionResponse = sourceRecordServiceClient.getRepresentationRevision(intersectedCloudIdAndTimestamps.get(0).getCloudId(), SOURCE_REPRESENTATION_NAME, DEREFERENCE_REVISION, SOURCE_PROVIDER_ID, utcFormateDateString); assertNotNull(representationRevisionResponse.getFiles()); assertEquals(representationRevisionResponse.getFiles().size(), 1); InputStream stream = sourceFileServiceClient.getFile(representationRevisionResponse.getCloudId(), SOURCE_REPRESENTATION_NAME, representationRevisionResponse.getVersion(), representationRevisionResponse.getFiles().get(0).getFileName()); List<String> lines = IOUtils.readLines(stream); assertNotNull(lines); assertEquals(lines.size(), 1); assertEquals(lines.get(0), FILE_CONTENT); //Do any Conversion to the file content; Mock it in here to use the same content String convertedContent = lines.get(0); String uri = sourceDatasetHelper.addFileToNewRepresentation(SOURCE_REPRESENTATION_NAME, SOURCE_PROVIDER_ID, convertedContent); assertNotNull(uri); System.out.println("ActiveRecordsTestCase Finished Successfully .."); } finally { cleanUp(); } } private List<CloudIdAndTimestampResponse> getLatestCloudIdAndTimestampResponsesForPublishRevision() throws MCSException, MalformedURLException, CloudException { List<String> tags; tags = new ArrayList<>(); tags.add(Tags.PUBLISHED.getTag()); Set<String> cloudIds = sourceDatasetHelper.getCloudIds(); //prepare test case for one shared cloudId prepareTestCase(SOURCE_PROVIDER_ID, SOURCE_DATASET_NAME, SOURCE_REPRESENTATION_NAME, PUBLISH_REVISION, tags, RECORDS_NUMBERS, cloudIds.iterator().next()); return sourceDatasetHelper.getLatestDataSetCloudIdByRepresentationAndRevision(SOURCE_DATASET_NAME, SOURCE_PROVIDER_ID, SOURCE_PROVIDER_ID, PUBLISH_REVISION, SOURCE_REPRESENTATION_NAME, false); } private List<CloudIdAndTimestampResponse> getLatestCloudIdAndTimestampResponsesForDereferenceRevision() throws MCSException, MalformedURLException, CloudException { List<String> tags = new ArrayList<>(); tags.add(Tags.PUBLISHED.getTag()); tags.add(Tags.DELETED.getTag()); prepareTestCase(SOURCE_PROVIDER_ID, SOURCE_DATASET_NAME, SOURCE_REPRESENTATION_NAME, DEREFERENCE_REVISION, tags, RECORDS_NUMBERS, null); return sourceDatasetHelper.getLatestDataSetCloudIdByRepresentationAndRevision(SOURCE_DATASET_NAME, SOURCE_PROVIDER_ID, SOURCE_PROVIDER_ID, DEREFERENCE_REVISION, SOURCE_REPRESENTATION_NAME, null); } private List<CloudIdAndTimestampResponse> intersectCloudIdAndTimestampResponsesBasedOnCloudId(List<CloudIdAndTimestampResponse> dereferenceCloudIdAndTimestampResponseList, List<CloudIdAndTimestampResponse> publishedCloudIdAndTimestampResponseList) { List<CloudIdAndTimestampResponse> intesectCloudIds = new ArrayList<>(); for (CloudIdAndTimestampResponse dereferenceCloudIdAndTimestamp : dereferenceCloudIdAndTimestampResponseList) { String dereferenceCloudId = dereferenceCloudIdAndTimestamp.getCloudId(); for (CloudIdAndTimestampResponse publishedCloudIdAndTimestamp : publishedCloudIdAndTimestampResponseList) { if (dereferenceCloudId.equals(publishedCloudIdAndTimestamp.getCloudId())) { intesectCloudIds.add(dereferenceCloudIdAndTimestamp); } } } return intesectCloudIds; } private void prepareTestCase(String providerId, String datasetName, String representationName, String revisionName, List<String> tags, int recordNum, String cloudId) throws MCSException, MalformedURLException, CloudException { sourceDatasetHelper.prepareDatasetWithRecordsInside(providerId, datasetName, representationName, revisionName, tags, recordNum, cloudId); } public void cleanUp() throws CloudException, MCSException { System.out.println("ActiveRecordsTestCase cleaning up .."); Set<String> cloudIds = sourceDatasetHelper.getCloudIds(); for (String cloudId : cloudIds) { adminRecordServiceClient.deleteRepresentation(cloudId, SOURCE_REPRESENTATION_NAME); adminUisClient.deleteCloudId(cloudId); } sourceDatasetHelper.deleteDataset(SOURCE_PROVIDER_ID, SOURCE_DATASET_NAME); sourceDatasetHelper.cleanCloudIds(); } }