From 17b4ae2810cc8ab244da38f4934fe50f1fdb445c Mon Sep 17 00:00:00 2001 From: Eritque arcus Date: Tue, 17 Jan 2023 18:18:48 -0500 Subject: [PATCH 1/3] add impl of md5 and sha1 --- .../absolutefile/MockAbsoluteFolder.kt | 5 ++-- mirai-core-mock/test/AbsoluteFileTest.kt | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt b/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt index 78d5b1ad98a..f7fe50eabbf 100644 --- a/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt +++ b/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt @@ -43,11 +43,10 @@ private fun MockServerRemoteFile.toMockAbsFolder(files: MockRemoteFiles): Absolu private fun MockServerRemoteFile.toMockAbsFile( files: MockRemoteFiles, - md5: ByteArray = byteArrayOf(), - sha1: ByteArray = byteArrayOf() + md5: ByteArray = asExternalResource().use { it.md5 }, + sha1: ByteArray = asExternalResource().use { it.sha1 } ): AbsoluteFile { val parent = this.parent.toMockAbsFolder(files) - // todo md5 and sha return MockAbsoluteFile( sha1, md5, diff --git a/mirai-core-mock/test/AbsoluteFileTest.kt b/mirai-core-mock/test/AbsoluteFileTest.kt index 788b0833a0d..f326f7fa0b1 100644 --- a/mirai-core-mock/test/AbsoluteFileTest.kt +++ b/mirai-core-mock/test/AbsoluteFileTest.kt @@ -22,8 +22,10 @@ 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.io.ByteArrayInputStream import java.nio.file.FileSystem import kotlin.test.assertEquals import kotlin.test.assertNotEquals @@ -97,4 +99,26 @@ 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) + } + assertEquals(bytes.md5().joinToString(" "), file.md5.joinToString(" ")) + } + + @Test + fun testMD5WithStream() = runTest { + val bytes = "test".toByteArray() + ByteArrayInputStream(bytes).use { stream -> + val absFile = stream.toExternalResource().use { res -> + files.root.uploadNewFile("/test.txt", res) + } + assertEquals(bytes.md5().joinToString(" "), absFile.md5.joinToString(" ")) + } + + } + } \ No newline at end of file From 3ce0969c852d4206ac4b4aeae4cc5f32daf2712a Mon Sep 17 00:00:00 2001 From: Eritque arcus Date: Tue, 17 Jan 2023 18:24:41 -0500 Subject: [PATCH 2/3] add tests --- mirai-core-mock/test/AbsoluteFileTest.kt | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/mirai-core-mock/test/AbsoluteFileTest.kt b/mirai-core-mock/test/AbsoluteFileTest.kt index f326f7fa0b1..6afbbdf4d89 100644 --- a/mirai-core-mock/test/AbsoluteFileTest.kt +++ b/mirai-core-mock/test/AbsoluteFileTest.kt @@ -25,7 +25,6 @@ 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.io.ByteArrayInputStream import java.nio.file.FileSystem import kotlin.test.assertEquals import kotlin.test.assertNotEquals @@ -110,15 +109,23 @@ internal class AbsoluteFileTest : MockBotTestBase() { } @Test - fun testMD5WithStream() = runTest { + fun testMD5WithResolve() = runTest { val bytes = "test".toByteArray() - ByteArrayInputStream(bytes).use { stream -> - val absFile = stream.toExternalResource().use { res -> - files.root.uploadNewFile("/test.txt", res) - } - assertEquals(bytes.md5().joinToString(" "), absFile.md5.joinToString(" ")) + bytes.toExternalResource().use { res -> + files.root.uploadNewFile("/test.txt", res) } - + val file = files.root.resolveFiles("/test.txt").toList() + assertEquals(1, file.size) + assertEquals(bytes.md5().joinToString(" "), file[0].md5.joinToString(" ")) } + @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)!! + assertEquals(bytes.md5().joinToString(" "), file.md5.joinToString(" ")) + } } \ No newline at end of file From 3047cdac4b7d0ff7ea813bcec5ad3603455a21e6 Mon Sep 17 00:00:00 2001 From: Eritque arcus Date: Tue, 17 Jan 2023 19:15:59 -0500 Subject: [PATCH 3/3] modify as required --- .../absolutefile/MockAbsoluteFolder.kt | 36 +++++++++++++------ mirai-core-mock/test/AbsoluteFileTest.kt | 7 ++-- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt b/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt index f7fe50eabbf..70803210038 100644 --- a/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt +++ b/mirai-core-mock/src/internal/remotefile/absolutefile/MockAbsoluteFolder.kt @@ -43,19 +43,33 @@ private fun MockServerRemoteFile.toMockAbsFolder(files: MockRemoteFiles): Absolu private fun MockServerRemoteFile.toMockAbsFile( files: MockRemoteFiles, - md5: ByteArray = asExternalResource().use { it.md5 }, - sha1: ByteArray = asExternalResource().use { it.sha1 } + md5: ByteArray = byteArrayOf(), + sha1: ByteArray = byteArrayOf() ): AbsoluteFile { val parent = this.parent.toMockAbsFolder(files) - 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 6afbbdf4d89..5d3c2d7d75b 100644 --- a/mirai-core-mock/test/AbsoluteFileTest.kt +++ b/mirai-core-mock/test/AbsoluteFileTest.kt @@ -26,6 +26,7 @@ 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 @@ -105,7 +106,7 @@ internal class AbsoluteFileTest : MockBotTestBase() { val file = bytes.toExternalResource().use { res -> files.root.uploadNewFile("/test.txt", res) } - assertEquals(bytes.md5().joinToString(" "), file.md5.joinToString(" ")) + assertContentEquals(bytes.md5(), file.md5) } @Test @@ -116,7 +117,7 @@ internal class AbsoluteFileTest : MockBotTestBase() { } val file = files.root.resolveFiles("/test.txt").toList() assertEquals(1, file.size) - assertEquals(bytes.md5().joinToString(" "), file[0].md5.joinToString(" ")) + assertContentEquals(bytes.md5(), file[0].md5) } @Test @@ -126,6 +127,6 @@ internal class AbsoluteFileTest : MockBotTestBase() { files.root.uploadNewFile("/test.txt", res) } val file = files.root.resolveFileById(absFile.id, true)!! - assertEquals(bytes.md5().joinToString(" "), file.md5.joinToString(" ")) + assertContentEquals(bytes.md5(), file.md5) } } \ No newline at end of file