From 0a7ebb7b4afb03eac0f6264c9c3bc9ffa3a261dc Mon Sep 17 00:00:00 2001 From: Eritque arcus Date: Wed, 18 Jan 2023 04:42:56 -0500 Subject: [PATCH] add implement of md5 and sha1 for MockAbsoluteFile (#2436) * add impl of md5 and sha1 * add tests * modify as required --- .../absolutefile/MockAbsoluteFolder.kt | 33 +++++++++++++------ mirai-core-mock/test/AbsoluteFileTest.kt | 32 ++++++++++++++++++ 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt b/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt index 78d5b1ad9..708032100 100644 --- a/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt +++ b/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt @@ -47,16 +47,29 @@ private fun MockServerRemoteFile.toMockAbsFile( sha1: ByteArray = byteArrayOf() ): AbsoluteFile { val parent = this.parent.toMockAbsFolder(files) - // todo md5 and sha - return MockAbsoluteFile( - sha1, - md5, - files, - parent, - this.id, - this.name, - parent.absolutePath.removeSuffix("/") + "/" + this.name - ) + return if (md5.isEmpty() || sha1.isEmpty()) { + asExternalResource().use { res -> + MockAbsoluteFile( + if (sha1.isEmpty()) res.sha1 else sha1, + if (md5.isEmpty()) res.md5 else md5, + files, + parent, + this.id, + this.name, + parent.absolutePath.removeSuffix("/") + "/" + this.name + ) + } + } else { + MockAbsoluteFile( + sha1, + md5, + files, + parent, + this.id, + this.name, + parent.absolutePath.removeSuffix("/") + "/" + this.name + ) + } } internal open class MockAbsoluteFolder( diff --git a/mirai-core-mock/test/AbsoluteFileTest.kt b/mirai-core-mock/test/AbsoluteFileTest.kt index 788b0833a..5d3c2d7d7 100644 --- a/mirai-core-mock/test/AbsoluteFileTest.kt +++ b/mirai-core-mock/test/AbsoluteFileTest.kt @@ -22,9 +22,11 @@ import net.mamoe.mirai.mock.internal.serverfs.MockServerFileSystemImpl import net.mamoe.mirai.mock.utils.simpleMemberInfo import net.mamoe.mirai.utils.ExternalResource.Companion.toExternalResource import net.mamoe.mirai.utils.cast +import net.mamoe.mirai.utils.md5 import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Test import java.nio.file.FileSystem +import kotlin.test.assertContentEquals import kotlin.test.assertEquals import kotlin.test.assertNotEquals @@ -97,4 +99,34 @@ internal class AbsoluteFileTest : MockBotTestBase() { assertEquals(true, file.exists()) assertNotEquals(null, folder.resolveFiles("test.txt").firstOrNull()) } + + @Test + fun testMD5() = runTest { + val bytes = "test".toByteArray() + val file = bytes.toExternalResource().use { res -> + files.root.uploadNewFile("/test.txt", res) + } + assertContentEquals(bytes.md5(), file.md5) + } + + @Test + fun testMD5WithResolve() = runTest { + val bytes = "test".toByteArray() + bytes.toExternalResource().use { res -> + files.root.uploadNewFile("/test.txt", res) + } + val file = files.root.resolveFiles("/test.txt").toList() + assertEquals(1, file.size) + assertContentEquals(bytes.md5(), file[0].md5) + } + + @Test + fun testMD5WithIDResolve() = runTest { + val bytes = "test".toByteArray() + val absFile = bytes.toExternalResource().use { res -> + files.root.uploadNewFile("/test.txt", res) + } + val file = files.root.resolveFileById(absFile.id, true)!! + assertContentEquals(bytes.md5(), file.md5) + } } \ No newline at end of file