test_corrupt.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/bin/bash
  2. set -eu
  3. echo "=== Corrupt tests ==="
  4. NAMEMULT=64
  5. FILEMULT=1
  6. lfs_mktree() {
  7. tests/test.py ${1:-} << TEST
  8. lfs_format(&lfs, &cfg) => 0;
  9. lfs_mount(&lfs, &cfg) => 0;
  10. for (int i = 1; i < 10; i++) {
  11. for (int j = 0; j < $NAMEMULT; j++) {
  12. buffer[j] = '0'+i;
  13. }
  14. buffer[$NAMEMULT] = '\0';
  15. lfs_mkdir(&lfs, (char*)buffer) => 0;
  16. buffer[$NAMEMULT] = '/';
  17. for (int j = 0; j < $NAMEMULT; j++) {
  18. buffer[j+$NAMEMULT+1] = '0'+i;
  19. }
  20. buffer[2*$NAMEMULT+1] = '\0';
  21. lfs_file_open(&lfs, &file[0], (char*)buffer,
  22. LFS_O_WRONLY | LFS_O_CREAT) => 0;
  23. size = $NAMEMULT;
  24. for (int j = 0; j < i*$FILEMULT; j++) {
  25. lfs_file_write(&lfs, &file[0], buffer, size) => size;
  26. }
  27. lfs_file_close(&lfs, &file[0]) => 0;
  28. }
  29. lfs_unmount(&lfs) => 0;
  30. TEST
  31. }
  32. lfs_chktree() {
  33. tests/test.py ${1:-} << TEST
  34. lfs_mount(&lfs, &cfg) => 0;
  35. for (int i = 1; i < 10; i++) {
  36. for (int j = 0; j < $NAMEMULT; j++) {
  37. buffer[j] = '0'+i;
  38. }
  39. buffer[$NAMEMULT] = '\0';
  40. lfs_stat(&lfs, (char*)buffer, &info) => 0;
  41. info.type => LFS_TYPE_DIR;
  42. buffer[$NAMEMULT] = '/';
  43. for (int j = 0; j < $NAMEMULT; j++) {
  44. buffer[j+$NAMEMULT+1] = '0'+i;
  45. }
  46. buffer[2*$NAMEMULT+1] = '\0';
  47. lfs_file_open(&lfs, &file[0], (char*)buffer, LFS_O_RDONLY) => 0;
  48. size = $NAMEMULT;
  49. for (int j = 0; j < i*$FILEMULT; j++) {
  50. lfs_file_read(&lfs, &file[0], rbuffer, size) => size;
  51. memcmp(buffer, rbuffer, size) => 0;
  52. }
  53. lfs_file_close(&lfs, &file[0]) => 0;
  54. }
  55. lfs_unmount(&lfs) => 0;
  56. TEST
  57. }
  58. echo "--- Sanity check ---"
  59. rm -rf blocks
  60. lfs_mktree
  61. lfs_chktree
  62. echo "--- Block corruption ---"
  63. for i in {2..33}
  64. do
  65. rm -rf blocks
  66. mkdir blocks
  67. ln -s /dev/zero blocks/$(printf '%x' $i)
  68. echo $i 1i
  69. lfs_mktree
  70. echo $i 2i
  71. lfs_chktree
  72. echo $i 3i
  73. done
  74. echo "--- Block persistance ---"
  75. for i in {2..33}
  76. do
  77. rm -rf blocks
  78. mkdir blocks
  79. lfs_mktree
  80. chmod a-w blocks/$(printf '%x' $i) || true
  81. lfs_mktree
  82. lfs_chktree
  83. done
  84. echo "--- Big region corruption ---"
  85. rm -rf blocks
  86. mkdir blocks
  87. for i in {2..255}
  88. do
  89. ln -s /dev/zero blocks/$(printf '%x' $i)
  90. done
  91. lfs_mktree
  92. lfs_chktree
  93. echo "--- Alternating corruption ---"
  94. rm -rf blocks
  95. mkdir blocks
  96. for i in {2..511..2}
  97. do
  98. ln -s /dev/zero blocks/$(printf '%x' $i)
  99. done
  100. lfs_mktree
  101. lfs_chktree
  102. echo "--- Results ---"
  103. tests/stats.py