diff --git a/aws-storage-s3/src/androidTest/java/com/amplifyframework/storage/s3/transfer/TransferDBTest.kt b/aws-storage-s3/src/androidTest/java/com/amplifyframework/storage/s3/transfer/TransferDBTest.kt index af7bdb3c29..4937f389f0 100644 --- a/aws-storage-s3/src/androidTest/java/com/amplifyframework/storage/s3/transfer/TransferDBTest.kt +++ b/aws-storage-s3/src/androidTest/java/com/amplifyframework/storage/s3/transfer/TransferDBTest.kt @@ -19,7 +19,10 @@ import android.content.ContentValues import android.content.Context import android.net.Uri import androidx.test.core.app.ApplicationProvider +import com.amplifyframework.storage.ObjectMetadata import java.io.File +import java.sql.Date +import java.time.Instant import java.util.UUID import org.junit.After import org.junit.Assert @@ -91,6 +94,41 @@ open class TransferDBTest { } ?: Assert.fail("InsertedRecord is null") } + @Test + fun generateContentValuesForMultiPartUploadWithMetadata() { + val key = UUID.randomUUID().toString() + val expectedHttpExpiresDate = Date.from(Instant.now()) + val expectedExpirationDate = Date.from(Instant.EPOCH) + val restoreExpirationTime = Date.from(Instant.EPOCH) + val contentValues = arrayOfNulls(1) + contentValues[0] = transferDB.generateContentValuesForMultiPartUpload( + key, + bucketName, + key, + tempFile, + 0L, + 0, + null, + 1L, + 0, + ObjectMetadata( + userMetadata = mapOf("key1" to "value1"), + metaData = mutableMapOf("key1" to "value1"), + httpExpiresDate = expectedHttpExpiresDate, + expirationTime = expectedExpirationDate, + expirationTimeRuleId = "ruleId", + ongoingRestore = false, + restoreExpirationTime = restoreExpirationTime + ), + null + ) + val uri = transferDB.bulkInsertTransferRecords(contentValues) + transferDB.getTransferRecordById(uri).run { + Assert.assertEquals(mapOf("key1" to "value1"), this?.userMetadata) + Assert.assertNull(this?.headerStorageClass) + } + } + @Test fun testMultiPartDelete() { val key = UUID.randomUUID().toString() diff --git a/aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/transfer/TransferDB.kt b/aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/transfer/TransferDB.kt index f069908202..09fa778a4f 100644 --- a/aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/transfer/TransferDB.kt +++ b/aws-storage-s3/src/main/java/com/amplifyframework/storage/s3/transfer/TransferDB.kt @@ -745,23 +745,41 @@ internal class TransferDB private constructor(context: Context) { * with * @return the ContentValues */ - private fun generateContentValuesForObjectMetadata(metadata: ObjectMetadata?): ContentValues? { + private fun generateContentValuesForObjectMetadata(metadata: ObjectMetadata?): ContentValues { val values = ContentValues() metadata?.let { values.apply { - TransferTable.COLUMN_USER_METADATA to JsonUtils.mapToString(it.userMetadata) - TransferTable.COLUMN_HEADER_CONTENT_TYPE to it.metaData[ObjectMetadata.CONTENT_TYPE].toString() - TransferTable.COLUMN_HEADER_CONTENT_ENCODING to it.metaData[ObjectMetadata.CONTENT_ENCODING].toString() - TransferTable.COLUMN_HEADER_CACHE_CONTROL to it.metaData[ObjectMetadata.CACHE_CONTROL].toString() - TransferTable.COLUMN_CONTENT_MD5 to it.metaData[ObjectMetadata.CONTENT_MD5].toString() - TransferTable.COLUMN_HEADER_CONTENT_DISPOSITION to - it.metaData[ObjectMetadata.CONTENT_DISPOSITION].toString() - TransferTable.COLUMN_SSE_ALGORITHM to it.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION].toString() - TransferTable.COLUMN_SSE_KMS_KEY to - it.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION_KMS_KEY_ID].toString() - TransferTable.COLUMN_EXPIRATION_TIME_RULE_ID to it.expirationTimeRuleId - TransferTable.COLUMN_HTTP_EXPIRES_DATE to it.httpExpiresDate?.time.toString() - TransferTable.COLUMN_HEADER_STORAGE_CLASS to it.metaData[ObjectMetadata.STORAGE_CLASS].toString() + put(TransferTable.COLUMN_USER_METADATA, JsonUtils.mapToString(it.userMetadata)) + it.metaData[ObjectMetadata.CONTENT_TYPE]?.let { + put(TransferTable.COLUMN_HEADER_CONTENT_TYPE, it.toString()) + } + it.metaData[ObjectMetadata.CONTENT_ENCODING]?.let { + put(TransferTable.COLUMN_HEADER_CONTENT_ENCODING, it.toString()) + } + it.metaData[ObjectMetadata.CACHE_CONTROL]?.let { + put(TransferTable.COLUMN_HEADER_CACHE_CONTROL, it.toString()) + } + it.metaData[ObjectMetadata.CONTENT_MD5]?.let { + put(TransferTable.COLUMN_CONTENT_MD5, it.toString()) + } + it.metaData[ObjectMetadata.CONTENT_DISPOSITION]?.let { + put(TransferTable.COLUMN_HEADER_CONTENT_DISPOSITION, it.toString()) + } + it.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION]?.let { + put(TransferTable.COLUMN_SSE_ALGORITHM, it.toString()) + } + it.metaData[ObjectMetadata.SERVER_SIDE_ENCRYPTION_KMS_KEY_ID]?.let { + put(TransferTable.COLUMN_SSE_KMS_KEY, it.toString()) + } + it.expirationTimeRuleId?.let { + put(TransferTable.COLUMN_EXPIRATION_TIME_RULE_ID, it) + } + it.httpExpiresDate?.let { + put(TransferTable.COLUMN_HTTP_EXPIRES_DATE, it.time) + } + it.metaData[ObjectMetadata.STORAGE_CLASS]?.let { + put(TransferTable.COLUMN_HEADER_STORAGE_CLASS, it.toString()) + } } } return values