test_corrupt.sh 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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 {0..33}
  64. do
  65. rm -rf blocks
  66. mkdir blocks
  67. ln -s /dev/zero blocks/$(printf '%x' $i)
  68. lfs_mktree
  69. lfs_chktree
  70. done
  71. echo "--- Big region corruption ---"
  72. rm -rf blocks
  73. mkdir blocks
  74. for i in {2..255}
  75. do
  76. ln -s /dev/zero blocks/$(printf '%x' $i)
  77. done
  78. lfs_mktree
  79. lfs_chktree
  80. echo "--- Alternating corruption ---"
  81. rm -rf blocks
  82. mkdir blocks
  83. for i in {2..511..2}
  84. do
  85. ln -s /dev/zero blocks/$(printf '%x' $i)
  86. done
  87. lfs_mktree
  88. lfs_chktree
  89. echo "--- Results ---"
  90. tests/stats.py