Search in sources :

Example 6 with StorageException

use of com.amplifyframework.storage.StorageException in project amplify-android by aws-amplify.

the class AWSS3StorageUploadFileOperation method start.

@SuppressLint("SyntheticAccessor")
@Override
public void start() {
    // Only start if it hasn't already been started
    if (transferObserver != null) {
        return;
    }
    // Grab the file to upload...
    File file = getRequest().getLocal();
    // Set up the metadata
    ObjectMetadata objectMetadata = new ObjectMetadata();
    objectMetadata.setUserMetadata(getRequest().getMetadata());
    objectMetadata.setContentType(getRequest().getContentType());
    ServerSideEncryption storageServerSideEncryption = getRequest().getServerSideEncryption();
    if (!ServerSideEncryption.NONE.equals(storageServerSideEncryption)) {
        objectMetadata.setSSEAlgorithm(storageServerSideEncryption.getName());
    }
    // Upload!
    awsS3StoragePluginConfiguration.getAWSS3PluginPrefixResolver(cognitoAuthProvider).resolvePrefix(getRequest().getAccessLevel(), getRequest().getTargetIdentityId(), prefix -> {
        try {
            String serviceKey = prefix.concat(getRequest().getKey());
            transferObserver = storageService.uploadFile(serviceKey, file, objectMetadata);
            transferObserver.setTransferListener(new UploadTransferListener());
        } catch (Exception exception) {
            onError.accept(new StorageException("Issue uploading file.", exception, "See included exception for more details and suggestions to fix."));
        }
    }, onError);
}
Also used : ServerSideEncryption(com.amplifyframework.storage.s3.ServerSideEncryption) File(java.io.File) ObjectMetadata(com.amazonaws.services.s3.model.ObjectMetadata) StorageException(com.amplifyframework.storage.StorageException) StorageException(com.amplifyframework.storage.StorageException) SuppressLint(android.annotation.SuppressLint)

Example 7 with StorageException

use of com.amplifyframework.storage.StorageException in project amplify-android by aws-amplify.

the class StorageComponentTest method testUploadFileGetsKey.

/**
 * Test that calling upload file method from Storage category correctly
 * invokes the registered AWSS3StoragePlugin instance and returns a
 * {@link StorageUploadFileResult} with correct remote key.
 *
 * @throws Exception when an error is encountered while uploading
 */
@Test
public void testUploadFileGetsKey() throws Exception {
    final String toRemoteKey = RandomString.string();
    final File fromLocalFile = new RandomTempFile(FILE_SIZE);
    TransferObserver observer = mock(TransferObserver.class);
    when(storageService.uploadFile(anyString(), any(File.class), any(ObjectMetadata.class))).thenReturn(observer);
    doAnswer(invocation -> {
        TransferListener listener = invocation.getArgument(0);
        listener.onStateChanged(0, TransferState.COMPLETED);
        return null;
    }).when(observer).setTransferListener(any(TransferListener.class));
    StorageUploadFileResult result = Await.<StorageUploadFileResult, StorageException>result((onResult, onError) -> storage.uploadFile(toRemoteKey, fromLocalFile, onResult, onError));
    assertEquals(toRemoteKey, result.getKey());
}
Also used : TransferListener(com.amazonaws.mobileconnectors.s3.transferutility.TransferListener) StorageUploadFileResult(com.amplifyframework.storage.result.StorageUploadFileResult) TransferObserver(com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver) RandomTempFile(com.amplifyframework.testutils.random.RandomTempFile) Mockito.anyString(org.mockito.Mockito.anyString) RandomString(com.amplifyframework.testutils.random.RandomString) File(java.io.File) RandomTempFile(com.amplifyframework.testutils.random.RandomTempFile) ObjectMetadata(com.amazonaws.services.s3.model.ObjectMetadata) StorageException(com.amplifyframework.storage.StorageException) Test(org.junit.Test)

Example 8 with StorageException

use of com.amplifyframework.storage.StorageException in project amplify-android by aws-amplify.

the class StorageComponentTest method testRemoveObjectGetsKey.

/**
 * Test that calling remove method from Storage category correctly
 * invokes the registered AWSS3StoragePlugin instance and returns a
 * {@link StorageRemoveResult} with key of removed item.
 *
 * @throws StorageException when an error is encountered while deleting
 *                          file from storage
 */
@Test
public void testRemoveObjectGetsKey() throws StorageException {
    final String remoteKey = RandomString.string();
    StorageRemoveResult result = Await.<StorageRemoveResult, StorageException>result((onResult, onError) -> storage.remove(remoteKey, onResult, onError));
    assertEquals(remoteKey, result.getKey());
}
Also used : StorageRemoveResult(com.amplifyframework.storage.result.StorageRemoveResult) Mockito.anyString(org.mockito.Mockito.anyString) RandomString(com.amplifyframework.testutils.random.RandomString) StorageException(com.amplifyframework.storage.StorageException) Test(org.junit.Test)

Example 9 with StorageException

use of com.amplifyframework.storage.StorageException in project amplify-android by aws-amplify.

the class StorageComponentTest method testGenerateUrlGetsPresignedUrl.

/**
 * Test that calling get URL method from Storage category correctly invokes
 * the registered AWSS3StoragePlugin instance and returns a {@link URL}
 * instance for that download.
 *
 * @throws StorageException when an error is encountered while generating
 *                          URL from storage service
 */
@Test
public void testGenerateUrlGetsPresignedUrl() throws StorageException {
    final String fromRemoteKey = RandomString.string();
    final URL urlFromRemoteKey;
    try {
        // URL instance cannot be mocked so just make one
        // https://{random-host}:0/{fromRemoteKey}
        urlFromRemoteKey = new URL("https", RandomString.string(), 0, fromRemoteKey, null);
    } catch (MalformedURLException exception) {
        throw new RuntimeException(exception);
    }
    // Allow mock StorageService instance to return a non-null
    // URL instance.
    when(storageService.getPresignedUrl(anyString(), anyInt())).thenReturn(urlFromRemoteKey);
    // Let Storage category invoke getUrl on mock Storage Service.
    StorageGetUrlResult result = Await.<StorageGetUrlResult, StorageException>result((onResult, onError) -> storage.getUrl(fromRemoteKey, onResult, onError));
    assertEquals(urlFromRemoteKey, result.getUrl());
}
Also used : MalformedURLException(java.net.MalformedURLException) Mockito.anyString(org.mockito.Mockito.anyString) RandomString(com.amplifyframework.testutils.random.RandomString) StorageException(com.amplifyframework.storage.StorageException) URL(java.net.URL) StorageGetUrlResult(com.amplifyframework.storage.result.StorageGetUrlResult) Test(org.junit.Test)

Example 10 with StorageException

use of com.amplifyframework.storage.StorageException in project amplify-android by aws-amplify.

the class StorageComponentTest method testInputStreamError.

/**
 * Test that calling upload inputStream method from Storage category fails
 * successfully when {@link TransferListener} emits an error.
 *
 * @throws IOException when the upload file cannot be created
 */
@Test
public void testInputStreamError() throws IOException {
    final StorageException testError = new StorageException("Test error message", "Test recovery message");
    final String toRemoteKey = RandomString.string();
    final InputStream inputStream = new ByteArrayInputStream(RandomBytes.bytes());
    TransferObserver observer = mock(TransferObserver.class);
    when(storageService.uploadInputStream(anyString(), any(InputStream.class), any(ObjectMetadata.class))).thenReturn(observer);
    doAnswer(invocation -> {
        TransferListener listener = invocation.getArgument(0);
        listener.onError(0, testError);
        return null;
    }).when(observer).setTransferListener(any(TransferListener.class));
    StorageException error = Await.<StorageUploadInputStreamResult, StorageException>error((onResult, onError) -> storage.uploadInputStream(toRemoteKey, inputStream, onResult, onError));
    assertEquals(testError, error.getCause());
}
Also used : TransferListener(com.amazonaws.mobileconnectors.s3.transferutility.TransferListener) StorageUploadInputStreamResult(com.amplifyframework.storage.result.StorageUploadInputStreamResult) ByteArrayInputStream(java.io.ByteArrayInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) TransferObserver(com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver) Mockito.anyString(org.mockito.Mockito.anyString) RandomString(com.amplifyframework.testutils.random.RandomString) StorageException(com.amplifyframework.storage.StorageException) ObjectMetadata(com.amazonaws.services.s3.model.ObjectMetadata) Test(org.junit.Test)

Aggregations

StorageException (com.amplifyframework.storage.StorageException)19 Test (org.junit.Test)15 RandomString (com.amplifyframework.testutils.random.RandomString)9 Mockito.anyString (org.mockito.Mockito.anyString)9 TransferListener (com.amazonaws.mobileconnectors.s3.transferutility.TransferListener)6 TransferObserver (com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver)6 ObjectMetadata (com.amazonaws.services.s3.model.ObjectMetadata)6 File (java.io.File)5 RandomTempFile (com.amplifyframework.testutils.random.RandomTempFile)4 SuppressLint (android.annotation.SuppressLint)3 InputStream (java.io.InputStream)3 StorageDownloadFileResult (com.amplifyframework.storage.result.StorageDownloadFileResult)2 StorageUploadFileResult (com.amplifyframework.storage.result.StorageUploadFileResult)2 StorageUploadInputStreamResult (com.amplifyframework.storage.result.StorageUploadInputStreamResult)2 ServerSideEncryption (com.amplifyframework.storage.s3.ServerSideEncryption)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 URL (java.net.URL)2 Region (com.amazonaws.regions.Region)1 StorageItem (com.amplifyframework.storage.StorageItem)1 StorageDownloadFileOptions (com.amplifyframework.storage.options.StorageDownloadFileOptions)1