test_corrupt.sh 2.6 KB

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