Search in sources :

Example 1 with UploadSingleInitiationResponse

use of org.finra.herd.model.api.xml.UploadSingleInitiationResponse in project herd by FINRAOS.

the class UploadDownloadRestControllerTest method testInitiateUploadSingle.

@Test
public void testInitiateUploadSingle() {
    // Create business object format keys.
    BusinessObjectFormatKey sourceBusinessObjectFormatKey = new BusinessObjectFormatKey(BDEF_NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION);
    BusinessObjectFormatKey targetBusinessObjectFormatKey = new BusinessObjectFormatKey(BDEF_NAMESPACE_2, BDEF_NAME_2, FORMAT_USAGE_CODE_2, FORMAT_FILE_TYPE_CODE_2, FORMAT_VERSION_2);
    // Create a file object.
    File file = new File(LOCAL_FILE, FILE_SIZE);
    // Create a request.
    UploadSingleInitiationRequest request = new UploadSingleInitiationRequest(sourceBusinessObjectFormatKey, targetBusinessObjectFormatKey, Arrays.asList(new Attribute(ATTRIBUTE_NAME_1_MIXED_CASE, ATTRIBUTE_VALUE_1)), file, STORAGE_NAME);
    // Create business object data keys.
    BusinessObjectDataKey sourceBusinessObjectDataKey = new BusinessObjectDataKey(BDEF_NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, PARTITION_VALUE, SUBPARTITION_VALUES, DATA_VERSION);
    BusinessObjectDataKey targetBusinessObjectDataKey = new BusinessObjectDataKey(BDEF_NAMESPACE_2, BDEF_NAME_2, FORMAT_USAGE_CODE_2, FORMAT_FILE_TYPE_CODE_2, FORMAT_VERSION_2, PARTITION_VALUE_2, SUBPARTITION_VALUES_2, DATA_VERSION_2);
    // Create a business object data objects.
    BusinessObjectData sourceBusinessObjectData = new BusinessObjectData();
    sourceBusinessObjectData.setId(ID);
    sourceBusinessObjectData.setStatus(BDATA_STATUS);
    sourceBusinessObjectData.setStorageUnits(Arrays.asList(new StorageUnit(new Storage(STORAGE_NAME, STORAGE_PLATFORM_CODE, NO_ATTRIBUTES), NO_STORAGE_DIRECTORY, NO_STORAGE_FILES, STORAGE_UNIT_STATUS, NO_STORAGE_UNIT_STATUS_HISTORY, NO_STORAGE_POLICY_TRANSITION_FAILED_ATTEMPTS, NO_RESTORE_EXPIRATION_ON)));
    BusinessObjectData targetBusinessObjectData = new BusinessObjectData();
    targetBusinessObjectData.setId(ID_2);
    targetBusinessObjectData.setStatus(BDATA_STATUS_2);
    targetBusinessObjectData.setStorageUnits(Arrays.asList(new StorageUnit(new Storage(STORAGE_NAME_2, STORAGE_PLATFORM_CODE, NO_ATTRIBUTES), NO_STORAGE_DIRECTORY, NO_STORAGE_FILES, STORAGE_UNIT_STATUS_2, NO_STORAGE_UNIT_STATUS_HISTORY, NO_STORAGE_POLICY_TRANSITION_FAILED_ATTEMPTS, NO_RESTORE_EXPIRATION_ON)));
    // Create a response.
    UploadSingleInitiationResponse response = new UploadSingleInitiationResponse(sourceBusinessObjectData, targetBusinessObjectData, file, UUID_VALUE, AWS_ASSUMED_ROLE_ACCESS_KEY, AWS_ASSUMED_ROLE_SECRET_KEY, AWS_ASSUMED_ROLE_SESSION_TOKEN, AWS_ASSUMED_ROLE_SESSION_EXPIRATION_TIME, AWS_KMS_KEY_ID, STORAGE_NAME);
    // Mock the external calls.
    when(uploadDownloadService.initiateUploadSingle(request)).thenReturn(response);
    when(businessObjectDataHelper.getBusinessObjectDataKey(sourceBusinessObjectData)).thenReturn(sourceBusinessObjectDataKey);
    when(businessObjectDataHelper.getBusinessObjectDataKey(targetBusinessObjectData)).thenReturn(targetBusinessObjectDataKey);
    // Call the method under test.
    UploadSingleInitiationResponse result = uploadDownloadRestController.initiateUploadSingle(request);
    // Verify the external calls.
    verify(uploadDownloadService).initiateUploadSingle(request);
    verify(businessObjectDataHelper).getBusinessObjectDataKey(sourceBusinessObjectData);
    verify(businessObjectDataHelper).getBusinessObjectDataKey(targetBusinessObjectData);
    verify(notificationEventService).processBusinessObjectDataNotificationEventAsync(NotificationEventTypeEntity.EventTypesBdata.BUS_OBJCT_DATA_RGSTN, sourceBusinessObjectDataKey, BDATA_STATUS, null);
    verify(notificationEventService).processBusinessObjectDataNotificationEventAsync(NotificationEventTypeEntity.EventTypesBdata.BUS_OBJCT_DATA_STTS_CHG, sourceBusinessObjectDataKey, BDATA_STATUS, null);
    verify(notificationEventService).processStorageUnitNotificationEventAsync(NotificationEventTypeEntity.EventTypesStorageUnit.STRGE_UNIT_STTS_CHG, sourceBusinessObjectDataKey, STORAGE_NAME, STORAGE_UNIT_STATUS, null);
    verify(notificationEventService).processBusinessObjectDataNotificationEventAsync(NotificationEventTypeEntity.EventTypesBdata.BUS_OBJCT_DATA_RGSTN, targetBusinessObjectDataKey, BDATA_STATUS_2, null);
    verify(notificationEventService).processBusinessObjectDataNotificationEventAsync(NotificationEventTypeEntity.EventTypesBdata.BUS_OBJCT_DATA_STTS_CHG, targetBusinessObjectDataKey, BDATA_STATUS_2, null);
    verify(notificationEventService).processStorageUnitNotificationEventAsync(NotificationEventTypeEntity.EventTypesStorageUnit.STRGE_UNIT_STTS_CHG, targetBusinessObjectDataKey, STORAGE_NAME_2, STORAGE_UNIT_STATUS_2, null);
    verifyNoMoreInteractionsHelper();
    // Validate the results.
    assertEquals(response, result);
}
Also used : Storage(org.finra.herd.model.api.xml.Storage) Attribute(org.finra.herd.model.api.xml.Attribute) BusinessObjectData(org.finra.herd.model.api.xml.BusinessObjectData) BusinessObjectFormatKey(org.finra.herd.model.api.xml.BusinessObjectFormatKey) UploadSingleInitiationRequest(org.finra.herd.model.api.xml.UploadSingleInitiationRequest) StorageUnit(org.finra.herd.model.api.xml.StorageUnit) UploadSingleInitiationResponse(org.finra.herd.model.api.xml.UploadSingleInitiationResponse) File(org.finra.herd.model.api.xml.File) BusinessObjectDataKey(org.finra.herd.model.api.xml.BusinessObjectDataKey) Test(org.junit.Test)

Example 2 with UploadSingleInitiationResponse

use of org.finra.herd.model.api.xml.UploadSingleInitiationResponse in project herd by FINRAOS.

the class UploadDownloadServiceTest method testInitiateDownloadSingleBusinessObjectDataNoExists.

@Test
public void testInitiateDownloadSingleBusinessObjectDataNoExists() {
    String INVALID_PARTITION_VALUE = "DOES_NOT_EXIST";
    // Create the upload data.
    UploadSingleInitiationResponse uploadSingleInitiationResponse = uploadDownloadServiceTestHelper.createUploadedFileData(BusinessObjectDataStatusEntity.VALID);
    // Change the target business object data partition value to something invalid.
    uploadSingleInitiationResponse.getTargetBusinessObjectData().setPartitionValue(INVALID_PARTITION_VALUE);
    // Try to initiate a single file download when business object data does not exist (i.e. the partition value doesn't match).
    try {
        // Initiate the download against the uploaded data (i.e. the target business object data).
        initiateDownload(uploadSingleInitiationResponse.getTargetBusinessObjectData());
        fail("Suppose to throw an ObjectNotFoundException when business object data does not exist.");
    } catch (ObjectNotFoundException e) {
        BusinessObjectData businessObjectData = uploadSingleInitiationResponse.getTargetBusinessObjectData();
        assertEquals(businessObjectDataServiceTestHelper.getExpectedBusinessObjectDataNotFoundErrorMessage(businessObjectData.getNamespace(), businessObjectData.getBusinessObjectDefinitionName(), businessObjectData.getBusinessObjectFormatUsage(), businessObjectData.getBusinessObjectFormatFileType(), businessObjectData.getBusinessObjectFormatVersion(), INVALID_PARTITION_VALUE, NO_SUBPARTITION_VALUES, businessObjectData.getVersion(), null), e.getMessage());
    }
}
Also used : BusinessObjectData(org.finra.herd.model.api.xml.BusinessObjectData) ObjectNotFoundException(org.finra.herd.model.ObjectNotFoundException) UploadSingleInitiationResponse(org.finra.herd.model.api.xml.UploadSingleInitiationResponse) Test(org.junit.Test)

Example 3 with UploadSingleInitiationResponse

use of org.finra.herd.model.api.xml.UploadSingleInitiationResponse in project herd by FINRAOS.

the class UploadDownloadServiceTest method testInitiateUploadSingleUpperCaseParameters.

@Test
public void testInitiateUploadSingleUpperCaseParameters() {
    // Create database entities required for testing.
    uploadDownloadServiceTestHelper.createDatabaseEntitiesForUploadDownloadTesting();
    // Initiate a file upload using lower case values.
    UploadSingleInitiationResponse resultUploadSingleInitiationResponse = uploadDownloadService.initiateUploadSingle(uploadDownloadServiceTestHelper.createUploadSingleInitiationRequest(NAMESPACE.toLowerCase(), BDEF_NAME.toLowerCase(), FORMAT_USAGE_CODE.toLowerCase(), FORMAT_FILE_TYPE_CODE.toLowerCase(), FORMAT_VERSION, NAMESPACE.toLowerCase(), BDEF_NAME_2.toLowerCase(), FORMAT_USAGE_CODE_2.toLowerCase(), FORMAT_FILE_TYPE_CODE_2.toLowerCase(), FORMAT_VERSION_2));
    // Validate the returned object.
    uploadDownloadServiceTestHelper.validateUploadSingleInitiationResponse(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, NAMESPACE, BDEF_NAME_2, FORMAT_USAGE_CODE_2, FORMAT_FILE_TYPE_CODE_2, FORMAT_VERSION_2, businessObjectDefinitionServiceTestHelper.getNewAttributes(), FILE_NAME, FILE_SIZE_1_KB, null, resultUploadSingleInitiationResponse);
}
Also used : UploadSingleInitiationResponse(org.finra.herd.model.api.xml.UploadSingleInitiationResponse) Test(org.junit.Test)

Example 4 with UploadSingleInitiationResponse

use of org.finra.herd.model.api.xml.UploadSingleInitiationResponse in project herd by FINRAOS.

the class UploadDownloadServiceTest method runPerformCompleteUploadSingleMessageTest.

private void runPerformCompleteUploadSingleMessageTest() {
    uploadDownloadServiceTestHelper.createDatabaseEntitiesForUploadDownloadTesting();
    UploadSingleInitiationResponse resultUploadSingleInitiationResponse = uploadDownloadService.initiateUploadSingle(uploadDownloadServiceTestHelper.createUploadSingleInitiationRequest(NAMESPACE, BDEF_NAME, FORMAT_USAGE_CODE, FORMAT_FILE_TYPE_CODE, FORMAT_VERSION, NAMESPACE, BDEF_NAME_2, FORMAT_USAGE_CODE_2, FORMAT_FILE_TYPE_CODE_2, FORMAT_VERSION_2, FILE_NAME));
    // Get the file path.
    String filePath = resultUploadSingleInitiationResponse.getTargetBusinessObjectData().getStorageUnits().get(0).getStorageFiles().get(0).getFilePath();
    // Put a 1 KB file in the S3 "loading dock" bucket.
    PutObjectRequest putObjectRequest = new PutObjectRequest(storageDaoTestHelper.getS3LoadingDockBucketName(), filePath, new ByteArrayInputStream(new byte[(int) FILE_SIZE_1_KB]), null);
    s3Operations.putObject(putObjectRequest, null);
    try {
        // Complete the upload.
        UploadDownloadServiceImpl.CompleteUploadSingleMessageResult result = uploadDownloadService.performCompleteUploadSingleMessage(filePath);
        // Validate the result object.
        assertEquals(BusinessObjectDataStatusEntity.UPLOADING, result.getSourceOldBusinessObjectDataStatus());
        assertEquals(BusinessObjectDataStatusEntity.DELETED, result.getSourceNewBusinessObjectDataStatus());
        assertEquals(BusinessObjectDataStatusEntity.UPLOADING, result.getTargetOldBusinessObjectDataStatus());
        assertEquals(BusinessObjectDataStatusEntity.VALID, result.getTargetNewBusinessObjectDataStatus());
        // Try to complete the upload the second time. This might happen when a duplicate S3 notification is received for the same uploaded file.
        result = uploadDownloadService.performCompleteUploadSingleMessage(filePath);
        // Validate the result object.
        assertEquals(BusinessObjectDataStatusEntity.DELETED, result.getSourceOldBusinessObjectDataStatus());
        assertNull(result.getSourceNewBusinessObjectDataStatus());
        assertEquals(BusinessObjectDataStatusEntity.VALID, result.getTargetOldBusinessObjectDataStatus());
        assertNull(result.getTargetNewBusinessObjectDataStatus());
    } finally {
        // Clean up the S3.
        s3Dao.deleteDirectory(S3FileTransferRequestParamsDto.builder().withS3BucketName(storageDaoTestHelper.getS3LoadingDockBucketName()).withS3KeyPrefix(filePath).build());
        s3Operations.rollback();
    }
}
Also used : UploadDownloadServiceImpl(org.finra.herd.service.impl.UploadDownloadServiceImpl) ByteArrayInputStream(java.io.ByteArrayInputStream) UploadSingleInitiationResponse(org.finra.herd.model.api.xml.UploadSingleInitiationResponse) PutObjectRequest(com.amazonaws.services.s3.model.PutObjectRequest)

Example 5 with UploadSingleInitiationResponse

use of org.finra.herd.model.api.xml.UploadSingleInitiationResponse in project herd by FINRAOS.

the class UploadDownloadServiceTest method testExtendUploadSingleCredentialsBusinessObjectDataNoExists.

@Test
public void testExtendUploadSingleCredentialsBusinessObjectDataNoExists() {
    String INVALID_PARTITION_VALUE = "DOES_NOT_EXIST";
    // Create the upload data.
    UploadSingleInitiationResponse uploadSingleInitiationResponse = uploadDownloadServiceTestHelper.createUploadedFileData(BusinessObjectDataStatusEntity.VALID);
    // Change the source business object data partition value to something invalid.
    uploadSingleInitiationResponse.getSourceBusinessObjectData().setPartitionValue(INVALID_PARTITION_VALUE);
    // Try to initiate a single file download when business object data does not exist (i.e. the partition value doesn't match).
    try {
        extendUploadSingleCredentials(uploadSingleInitiationResponse.getSourceBusinessObjectData());
        fail("Suppose to throw an ObjectNotFoundException when business object data does not exist.");
    } catch (ObjectNotFoundException e) {
        BusinessObjectData businessObjectData = uploadSingleInitiationResponse.getSourceBusinessObjectData();
        assertEquals(businessObjectDataServiceTestHelper.getExpectedBusinessObjectDataNotFoundErrorMessage(businessObjectData.getNamespace(), businessObjectData.getBusinessObjectDefinitionName(), businessObjectData.getBusinessObjectFormatUsage(), businessObjectData.getBusinessObjectFormatFileType(), businessObjectData.getBusinessObjectFormatVersion(), INVALID_PARTITION_VALUE, NO_SUBPARTITION_VALUES, businessObjectData.getVersion(), null), e.getMessage());
    }
}
Also used : BusinessObjectData(org.finra.herd.model.api.xml.BusinessObjectData) ObjectNotFoundException(org.finra.herd.model.ObjectNotFoundException) UploadSingleInitiationResponse(org.finra.herd.model.api.xml.UploadSingleInitiationResponse) Test(org.junit.Test)

Aggregations

UploadSingleInitiationResponse (org.finra.herd.model.api.xml.UploadSingleInitiationResponse)23 Test (org.junit.Test)20 BusinessObjectData (org.finra.herd.model.api.xml.BusinessObjectData)7 UploadDownloadServiceImpl (org.finra.herd.service.impl.UploadDownloadServiceImpl)4 BusinessObjectDataKey (org.finra.herd.model.api.xml.BusinessObjectDataKey)3 UploadSingleInitiationRequest (org.finra.herd.model.api.xml.UploadSingleInitiationRequest)3 S3EventNotification (com.amazonaws.services.s3.event.S3EventNotification)2 S3Entity (com.amazonaws.services.s3.event.S3EventNotification.S3Entity)2 S3EventNotificationRecord (com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord)2 S3ObjectEntity (com.amazonaws.services.s3.event.S3EventNotification.S3ObjectEntity)2 ArrayList (java.util.ArrayList)2 ObjectNotFoundException (org.finra.herd.model.ObjectNotFoundException)2 BusinessObjectDataStatusUpdateRequest (org.finra.herd.model.api.xml.BusinessObjectDataStatusUpdateRequest)2 BusinessObjectDataEntity (org.finra.herd.model.jpa.BusinessObjectDataEntity)2 StorageEntity (org.finra.herd.model.jpa.StorageEntity)2 StorageUnitEntity (org.finra.herd.model.jpa.StorageUnitEntity)2 AbstractServiceTest (org.finra.herd.service.AbstractServiceTest)2 PutObjectRequest (com.amazonaws.services.s3.model.PutObjectRequest)1 Credentials (com.amazonaws.services.securitytoken.model.Credentials)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1