Skip to content

Commit

Permalink
fix: user metadata was persisted empty in the database (#2165)
Browse files Browse the repository at this point in the history
* fix: usermeta was persisted as empty in the database

* fix compilation error

* fix compilation error

* avoid adding metadata if it is null
  • Loading branch information
sdhuka committed Dec 9, 2022
1 parent 968f940 commit 9fd2915
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 14 deletions.
Expand Up @@ -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
Expand Down Expand Up @@ -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<ContentValues>(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()
Expand Down
Expand Up @@ -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
Expand Down

0 comments on commit 9fd2915

Please sign in to comment.