Search in sources :

Example 1 with UploadArchiveService

use of org.sagebionetworks.bridge.services.UploadArchiveService in project BridgeServer2 by Sage-Bionetworks.

the class UploadArchiveServiceZipTest method beforeClass.

@BeforeClass
public static void beforeClass() {
    // Make upload archive service.
    uploadArchiveService = new UploadArchiveService();
    uploadArchiveService.setMaxZipEntrySize(1000000);
    uploadArchiveService.setMaxNumZipEntries(1000000);
    // Zip some data, so our tests have something to work with.
    zippedData = uploadArchiveService.zip(UNZIPPED_FILE_MAP);
}
Also used : UploadArchiveService(org.sagebionetworks.bridge.services.UploadArchiveService) BeforeClass(org.testng.annotations.BeforeClass)

Example 2 with UploadArchiveService

use of org.sagebionetworks.bridge.services.UploadArchiveService in project BridgeServer2 by Sage-Bionetworks.

the class UploadArchiveServiceZipTest method testZipEntryTooBig.

@Test(expectedExceptions = BadRequestException.class)
public void testZipEntryTooBig() throws Exception {
    // Set up a test service just for this test. Set the max size to something super small, like 6.
    UploadArchiveService testSvc = new UploadArchiveService();
    testSvc.setMaxNumZipEntries(1000000);
    testSvc.setMaxZipEntrySize(6);
    // Execute - will throw
    testSvc.unzip(zippedData);
}
Also used : UploadArchiveService(org.sagebionetworks.bridge.services.UploadArchiveService) Test(org.testng.annotations.Test)

Example 3 with UploadArchiveService

use of org.sagebionetworks.bridge.services.UploadArchiveService in project BridgeServer2 by Sage-Bionetworks.

the class UploadArchiveUtil method main.

@SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
    // args / usage
    if (args.length != 4) {
        System.out.println("Usage: play \"run-main org.sagebionetworks.bridge.util.UploadArchiveUtil [encrypt/decrypt] " + "[appId] [input filename] [output filename]\"");
        System.exit(1);
        return;
    }
    String method = args[0];
    String appId = args[1];
    String inFilename = args[2];
    String outFilename = args[3];
    // load spring beans
    ApplicationContext springCtx = new ClassPathXmlApplicationContext("application-context.xml");
    UploadArchiveService uploadArchiveService = springCtx.getBean(UploadArchiveService.class);
    // read input file
    File inFile = new File(inFilename);
    byte[] inData = Files.toByteArray(inFile);
    // encrypt / decrypt
    byte[] outData;
    switch(method) {
        case "encrypt":
            outData = uploadArchiveService.encrypt(appId, inData);
            break;
        case "decrypt":
            outData = uploadArchiveService.decrypt(appId, inData);
            break;
        default:
            throw new IllegalArgumentException(String.format("Invalid method %s", method));
    }
    // write output file
    File outFile = new File(outFilename);
    Files.write(outData, outFile);
}
Also used : ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) ApplicationContext(org.springframework.context.ApplicationContext) UploadArchiveService(org.sagebionetworks.bridge.services.UploadArchiveService) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) File(java.io.File)

Example 4 with UploadArchiveService

use of org.sagebionetworks.bridge.services.UploadArchiveService in project BridgeServer2 by Sage-Bionetworks.

the class UploadHandlersEndToEndTest method test.

private void test(UploadSchema schema, Survey survey, Map<String, String> fileMap, String nonZippedFileContent) throws Exception {
    // Set up zip service.
    UploadArchiveService unzipService = new UploadArchiveService();
    if (upload.isZipped()) {
        // fileMap is in strings. Convert to bytes so we can use the Zipper.
        Map<String, byte[]> fileBytesMap = new HashMap<>();
        for (Map.Entry<String, String> oneFile : fileMap.entrySet()) {
            String filename = oneFile.getKey();
            String fileString = oneFile.getValue();
            fileBytesMap.put(filename, fileString.getBytes(Charsets.UTF_8));
        }
        // Add metadata.json to the fileBytesMap.
        fileBytesMap.put("metadata.json", METADATA_JSON_CONTENT);
        // For zipping, we use the real service.
        unzipService.setMaxNumZipEntries(1000000);
        unzipService.setMaxZipEntrySize(1000000);
        rawFile = unzipService.zip(fileBytesMap);
    } else {
        // If it's not zipped, use the nonZippedFileContent as the raw file.
        rawFile = nonZippedFileContent.getBytes(Charsets.UTF_8);
    }
    // Set up UploadFileHelper
    DigestUtils mockMd5DigestUtils = mock(DigestUtils.class);
    when(mockMd5DigestUtils.digest(any(File.class))).thenReturn(TestConstants.MOCK_MD5);
    when(mockMd5DigestUtils.digest(any(byte[].class))).thenReturn(TestConstants.MOCK_MD5);
    UploadFileHelper uploadFileHelper = new UploadFileHelper();
    uploadFileHelper.setFileHelper(inMemoryFileHelper);
    uploadFileHelper.setMd5DigestUtils(mockMd5DigestUtils);
    uploadFileHelper.setS3Helper(mockS3UploadHelper);
    // set up S3DownloadHandler - mock S3 Helper
    // "S3" returns file unencrypted for simplicity of testing
    S3Helper mockS3DownloadHelper = mock(S3Helper.class);
    doAnswer(invocation -> {
        File destFile = invocation.getArgument(2);
        inMemoryFileHelper.writeBytes(destFile, rawFile);
        // Required return
        return null;
    }).when(mockS3DownloadHelper).downloadS3File(eq(TestConstants.UPLOAD_BUCKET), eq(UPLOAD_ID), any());
    S3DownloadHandler s3DownloadHandler = new S3DownloadHandler();
    s3DownloadHandler.setFileHelper(inMemoryFileHelper);
    s3DownloadHandler.setS3Helper(mockS3DownloadHelper);
    // set up DecryptHandler - For ease of tests, this will just return the input verbatim.
    UploadArchiveService mockUploadArchiveService = mock(UploadArchiveService.class);
    when(mockUploadArchiveService.decrypt(eq(TEST_APP_ID), any(InputStream.class))).thenAnswer(invocation -> invocation.getArgument(1));
    DecryptHandler decryptHandler = new DecryptHandler();
    decryptHandler.setFileHelper(inMemoryFileHelper);
    decryptHandler.setUploadArchiveService(mockUploadArchiveService);
    // Set up UnzipHandler
    UnzipHandler unzipHandler = new UnzipHandler();
    unzipHandler.setFileHelper(inMemoryFileHelper);
    unzipHandler.setUploadArchiveService(unzipService);
    // Set up InitRecordHandler
    InitRecordHandler initRecordHandler = new InitRecordHandler();
    initRecordHandler.setFileHelper(inMemoryFileHelper);
    // mock schema service
    UploadSchemaService mockUploadSchemaService = mock(UploadSchemaService.class);
    if (schema != null) {
        when(mockUploadSchemaService.getUploadSchemaByIdAndRev(TEST_APP_ID, schema.getSchemaId(), schema.getRevision())).thenReturn(schema);
        when(mockUploadSchemaService.getUploadSchemaByIdAndRevNoThrow(TEST_APP_ID, schema.getSchemaId(), schema.getRevision())).thenReturn(schema);
    }
    // mock survey service
    SurveyService mockSurveyService = mock(SurveyService.class);
    if (survey != null) {
        when(mockSurveyService.getSurvey(TEST_APP_ID, new GuidCreatedOnVersionHolderImpl(survey.getGuid(), survey.getCreatedOn()), false, true)).thenReturn(survey);
    }
    // set up IosSchemaValidationHandler
    IosSchemaValidationHandler2 iosSchemaValidationHandler = new IosSchemaValidationHandler2();
    iosSchemaValidationHandler.setFileHelper(inMemoryFileHelper);
    iosSchemaValidationHandler.setUploadFileHelper(uploadFileHelper);
    iosSchemaValidationHandler.setUploadSchemaService(mockUploadSchemaService);
    iosSchemaValidationHandler.setSurveyService(mockSurveyService);
    // set up GenericUploadFormatHandler
    GenericUploadFormatHandler genericUploadFormatHandler = new GenericUploadFormatHandler();
    genericUploadFormatHandler.setFileHelper(inMemoryFileHelper);
    genericUploadFormatHandler.setUploadFileHelper(uploadFileHelper);
    genericUploadFormatHandler.setUploadSchemaService(mockUploadSchemaService);
    genericUploadFormatHandler.setSurveyService(mockSurveyService);
    // set up UploadFormatHandler
    UploadFormatHandler uploadFormatHandler = new UploadFormatHandler();
    uploadFormatHandler.setV1LegacyHandler(iosSchemaValidationHandler);
    uploadFormatHandler.setV2GenericHandler(genericUploadFormatHandler);
    // set up StrictValidationHandler
    StrictValidationHandler strictValidationHandler = new StrictValidationHandler();
    strictValidationHandler.setUploadSchemaService(mockUploadSchemaService);
    AppService mockAppService = mock(AppService.class);
    when(mockAppService.getApp(TEST_APP_ID)).thenReturn(APP);
    strictValidationHandler.setAppService(mockAppService);
    Enrollment enrollment = Enrollment.create(TEST_APP_ID, "test-study", "userId", EXTERNAL_ID);
    // set up TranscribeConsentHandler
    Account account = Account.create();
    account.setDataGroups(ImmutableSet.of("parkinson", "test_user"));
    account.setSharingScope(SharingScope.SPONSORS_AND_PARTNERS);
    account.setEnrollments(ImmutableSet.of(enrollment));
    AccountService mockAccountService = mock(AccountService.class);
    when(mockAccountService.getAccount(any())).thenReturn(Optional.of(account));
    ParticipantService mockParticipantService = mock(ParticipantService.class);
    when(mockParticipantService.getStudyStartTime(any())).thenReturn(STUDY_START_TIME);
    TranscribeConsentHandler transcribeConsentHandler = new TranscribeConsentHandler();
    transcribeConsentHandler.setAccountService(mockAccountService);
    transcribeConsentHandler.setParticipantService(mockParticipantService);
    // Set up UploadRawZipHandler.
    UploadRawZipHandler uploadRawZipHandler = new UploadRawZipHandler();
    uploadRawZipHandler.setUploadFileHelper(uploadFileHelper);
    // set up UploadArtifactsHandler
    UploadArtifactsHandler uploadArtifactsHandler = new UploadArtifactsHandler();
    uploadArtifactsHandler.setHealthDataService(mockHealthDataService);
    // set up task factory
    List<UploadValidationHandler> handlerList = ImmutableList.of(s3DownloadHandler, decryptHandler, unzipHandler, initRecordHandler, uploadFormatHandler, strictValidationHandler, transcribeConsentHandler, uploadRawZipHandler, uploadArtifactsHandler);
    UploadValidationTaskFactory taskFactory = new UploadValidationTaskFactory();
    taskFactory.setFileHelper(inMemoryFileHelper);
    taskFactory.setHandlerList(handlerList);
    taskFactory.setUploadDao(mockUploadDao);
    taskFactory.setHealthDataService(mockHealthDataService);
    // create task, execute
    UploadValidationTask task = taskFactory.newTask(TEST_APP_ID, upload);
    task.run();
}
Also used : GuidCreatedOnVersionHolderImpl(org.sagebionetworks.bridge.models.GuidCreatedOnVersionHolderImpl) Account(org.sagebionetworks.bridge.models.accounts.Account) ParticipantService(org.sagebionetworks.bridge.services.ParticipantService) HashMap(java.util.HashMap) Enrollment(org.sagebionetworks.bridge.models.studies.Enrollment) SurveyService(org.sagebionetworks.bridge.services.SurveyService) UploadArchiveService(org.sagebionetworks.bridge.services.UploadArchiveService) AppService(org.sagebionetworks.bridge.services.AppService) UploadSchemaService(org.sagebionetworks.bridge.services.UploadSchemaService) InputStream(java.io.InputStream) DigestUtils(org.apache.commons.codec.digest.DigestUtils) S3Helper(org.sagebionetworks.bridge.s3.S3Helper) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) HashMap(java.util.HashMap) File(java.io.File) AccountService(org.sagebionetworks.bridge.services.AccountService)

Example 5 with UploadArchiveService

use of org.sagebionetworks.bridge.services.UploadArchiveService in project BridgeServer2 by Sage-Bionetworks.

the class UploadArchiveServiceZipTest method testTooManyZipEntries.

@Test(expectedExceptions = BadRequestException.class)
public void testTooManyZipEntries() throws Exception {
    // Set up a test service just for this test. Set the max num to something super small, like 2.
    UploadArchiveService testSvc = new UploadArchiveService();
    testSvc.setMaxNumZipEntries(2);
    testSvc.setMaxZipEntrySize(1000000);
    // Execute - will throw
    testSvc.unzip(zippedData);
}
Also used : UploadArchiveService(org.sagebionetworks.bridge.services.UploadArchiveService) Test(org.testng.annotations.Test)

Aggregations

UploadArchiveService (org.sagebionetworks.bridge.services.UploadArchiveService)5 File (java.io.File)2 Test (org.testng.annotations.Test)2 ImmutableMap (com.google.common.collect.ImmutableMap)1 InputStream (java.io.InputStream)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 DigestUtils (org.apache.commons.codec.digest.DigestUtils)1 GuidCreatedOnVersionHolderImpl (org.sagebionetworks.bridge.models.GuidCreatedOnVersionHolderImpl)1 Account (org.sagebionetworks.bridge.models.accounts.Account)1 Enrollment (org.sagebionetworks.bridge.models.studies.Enrollment)1 S3Helper (org.sagebionetworks.bridge.s3.S3Helper)1 AccountService (org.sagebionetworks.bridge.services.AccountService)1 AppService (org.sagebionetworks.bridge.services.AppService)1 ParticipantService (org.sagebionetworks.bridge.services.ParticipantService)1 SurveyService (org.sagebionetworks.bridge.services.SurveyService)1 UploadSchemaService (org.sagebionetworks.bridge.services.UploadSchemaService)1 ApplicationContext (org.springframework.context.ApplicationContext)1 ClassPathXmlApplicationContext (org.springframework.context.support.ClassPathXmlApplicationContext)1 BeforeClass (org.testng.annotations.BeforeClass)1