test_corrupt.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #!/bin/bash
  2. set -eu
  3. echo "=== Corrupt tests ==="
  4. NAMEMULT=64
  5. FILEMULT=1
  6. lfs_mktree() {
  7. scripts/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. scripts/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. BLOCKS="$(ls blocks | grep -vw '[01]')"
  63. echo "--- Block corruption ---"
  64. for b in $BLOCKS
  65. do
  66. rm -rf blocks
  67. mkdir blocks
  68. ln -s /dev/zero blocks/$b
  69. lfs_mktree
  70. lfs_chktree
  71. done
  72. echo "--- Block persistance ---"
  73. for b in $BLOCKS
  74. do
  75. rm -rf blocks
  76. mkdir blocks
  77. lfs_mktree
  78. chmod a-w blocks/$b || true
  79. lfs_mktree
  80. lfs_chktree
  81. done
  82. echo "--- Big region corruption ---"
  83. rm -rf blocks
  84. mkdir blocks
  85. for i in {2..512}
  86. do
  87. ln -s /dev/zero blocks/$(printf '%x' $i)
  88. done
  89. lfs_mktree
  90. lfs_chktree
  91. echo "--- Alternating corruption ---"
  92. rm -rf blocks
  93. mkdir blocks
  94. for i in {2..1024..2}
  95. do
  96. ln -s /dev/zero blocks/$(printf '%x' $i)
  97. done
  98. lfs_mktree
  99. lfs_chktree
  100. echo "--- Results ---"
  101. scripts/stats.py