TxFsDiskTest.kt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. * Copyright 2019-2022 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/dev/LICENSE
  8. */
  9. package net.mamoe.mirai.mock.test
  10. import com.google.common.jimfs.Configuration
  11. import com.google.common.jimfs.Jimfs
  12. import net.mamoe.mirai.mock.resserver.MockServerFileDisk
  13. import net.mamoe.mirai.utils.ExternalResource.Companion.toExternalResource
  14. import org.junit.jupiter.api.AfterEach
  15. import org.junit.jupiter.api.Test
  16. import java.nio.file.Files
  17. import kotlin.test.assertEquals
  18. import kotlin.test.assertFails
  19. import kotlin.test.assertFalse
  20. import kotlin.test.assertTrue
  21. internal class TxFsDiskTest {
  22. val tmpfs = Jimfs.newFileSystem(Configuration.unix())
  23. val disk = MockServerFileDisk.newFileDisk(tmpfs.getPath("/disk"))
  24. private fun splitLine() = println("==================================================================")
  25. @AfterEach
  26. fun release() {
  27. println("===================[ FILE SYSTEM STRUCT DUMP ]========================")
  28. Files.walk(tmpfs.getPath("/")).use { s ->
  29. s.forEach { pt ->
  30. println(pt)
  31. }
  32. }
  33. println("===================[ ]========================")
  34. tmpfs.close()
  35. }
  36. @Test
  37. fun testDisk() {
  38. val system = disk.newFsSystem()
  39. val root = system.root
  40. println(root)
  41. println(root.fileInfo)
  42. splitLine()
  43. kotlin.run {
  44. val subdir = root.mksubdir("a-dir", 0)
  45. println(subdir)
  46. println(subdir.fileInfo)
  47. assertEquals("/a-dir", subdir.path)
  48. assertFails { root.moveTo(subdir) }
  49. val children = root.listFiles()!!.onEach { println(it) }.toList()
  50. assertEquals(1, children.size)
  51. assertEquals(subdir, children[0])
  52. assertEquals(root, subdir.parent)
  53. subdir.delete()
  54. println(subdir)
  55. assertFalse { subdir.exists }
  56. assertFalse { subdir.isFile }
  57. assertFalse { subdir.isDirectory }
  58. assertTrue { subdir.toString().startsWith("<not exists>") }
  59. assertFails { subdir.fileInfo }
  60. }
  61. splitLine()
  62. kotlin.run {
  63. val newFile = root.uploadFile(
  64. "test.txt",
  65. """A""".toByteArray().toExternalResource().toAutoCloseable(),
  66. 5
  67. )
  68. val newFileInfo = newFile.fileInfo
  69. assertEquals(5, newFileInfo.creator)
  70. assertEquals(root, newFile.parent)
  71. assertEquals("test.txt", newFile.name)
  72. assertEquals("/test.txt", newFile.path)
  73. newFile.rename("hello world.bin")
  74. assertEquals("hello world.bin", newFile.name)
  75. val children = root.listFiles()!!.onEach { println(it) }.toList()
  76. assertEquals(1, children.size)
  77. assertEquals(children[0], newFile)
  78. val subdir = root.mksubdir("1", 3)
  79. newFile.moveTo(subdir)
  80. assertEquals("/1/hello world.bin", newFile.path)
  81. assertEquals(subdir, newFile.parent)
  82. val children1 = subdir.listFiles()!!.toList()
  83. assertEquals(1, children1.size)
  84. assertEquals(newFile, children1[0])
  85. val children2 = root.listFiles()!!.toList()
  86. assertEquals(1, children2.size)
  87. assertEquals(subdir, children2[0])
  88. assertEquals(newFile, system.findByPath("/1/hello world.bin").firstOrNull())
  89. println("TEST SUB DIR: $subdir")
  90. // TODO: Download content
  91. }
  92. }
  93. }