test_dirs.toml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. [[case]] # format
  2. code = """
  3. lfs_format(&lfs, &cfg) => 0;
  4. """
  5. [[case]] # mount/unmount
  6. code = """
  7. lfs_format(&lfs, &cfg) => 0;
  8. lfs_mount(&lfs, &cfg) => 0;
  9. lfs_unmount(&lfs) => 0;
  10. """
  11. [[case]] # root
  12. code = """
  13. lfs_format(&lfs, &cfg) => 0;
  14. lfs_mount(&lfs, &cfg) => 0;
  15. lfs_dir_open(&lfs, &dir, "/") => 0;
  16. lfs_dir_read(&lfs, &dir, &info) => 1;
  17. assert(info.type == LFS_TYPE_DIR);
  18. assert(strcmp(info.name, ".") == 0);
  19. lfs_dir_read(&lfs, &dir, &info) => 1;
  20. assert(info.type == LFS_TYPE_DIR);
  21. assert(strcmp(info.name, "..") == 0);
  22. lfs_dir_read(&lfs, &dir, &info) => 0;
  23. lfs_dir_close(&lfs, &dir) => 0;
  24. lfs_unmount(&lfs) => 0;
  25. """
  26. [[case]] # directory creation
  27. code = """
  28. lfs_format(&lfs, &cfg) => 0;
  29. lfs_mount(&lfs, &cfg) => 0;
  30. for (int i = 0; i < N; i++) {
  31. sprintf(path, "dir%03d", i);
  32. lfs_mkdir(&lfs, path) => 0;
  33. }
  34. lfs_unmount(&lfs) => 0;
  35. lfs_mount(&lfs, &cfg) => 0;
  36. lfs_dir_open(&lfs, &dir, "/") => 0;
  37. lfs_dir_read(&lfs, &dir, &info) => 1;
  38. assert(info.type == LFS_TYPE_DIR);
  39. assert(strcmp(info.name, ".") == 0);
  40. lfs_dir_read(&lfs, &dir, &info) => 1;
  41. assert(info.type == LFS_TYPE_DIR);
  42. assert(strcmp(info.name, "..") == 0);
  43. for (int i = 0; i < N; i++) {
  44. sprintf(path, "dir%03d", i);
  45. lfs_dir_read(&lfs, &dir, &info) => 1;
  46. assert(info.type == LFS_TYPE_DIR);
  47. assert(strcmp(info.name, path) == 0);
  48. }
  49. lfs_dir_read(&lfs, &dir, &info) => 0;
  50. lfs_dir_close(&lfs, &dir) => 0;
  51. lfs_unmount(&lfs);
  52. """
  53. define.N = 'range(0, 100, 3)'
  54. [[case]] # directory removal
  55. code = """
  56. lfs_format(&lfs, &cfg) => 0;
  57. lfs_mount(&lfs, &cfg) => 0;
  58. for (int i = 0; i < N; i++) {
  59. sprintf(path, "removeme%03d", i);
  60. lfs_mkdir(&lfs, path) => 0;
  61. }
  62. lfs_unmount(&lfs) => 0;
  63. lfs_mount(&lfs, &cfg) => 0;
  64. lfs_dir_open(&lfs, &dir, "/") => 0;
  65. lfs_dir_read(&lfs, &dir, &info) => 1;
  66. assert(info.type == LFS_TYPE_DIR);
  67. assert(strcmp(info.name, ".") == 0);
  68. lfs_dir_read(&lfs, &dir, &info) => 1;
  69. assert(info.type == LFS_TYPE_DIR);
  70. assert(strcmp(info.name, "..") == 0);
  71. for (int i = 0; i < N; i++) {
  72. sprintf(path, "removeme%03d", i);
  73. lfs_dir_read(&lfs, &dir, &info) => 1;
  74. assert(info.type == LFS_TYPE_DIR);
  75. assert(strcmp(info.name, path) == 0);
  76. }
  77. lfs_dir_read(&lfs, &dir, &info) => 0;
  78. lfs_dir_close(&lfs, &dir) => 0;
  79. lfs_unmount(&lfs);
  80. lfs_mount(&lfs, &cfg) => 0;
  81. for (int i = 0; i < N; i++) {
  82. sprintf(path, "removeme%03d", i);
  83. lfs_remove(&lfs, path) => 0;
  84. }
  85. lfs_unmount(&lfs);
  86. lfs_mount(&lfs, &cfg) => 0;
  87. lfs_dir_open(&lfs, &dir, "/") => 0;
  88. lfs_dir_read(&lfs, &dir, &info) => 1;
  89. assert(info.type == LFS_TYPE_DIR);
  90. assert(strcmp(info.name, ".") == 0);
  91. lfs_dir_read(&lfs, &dir, &info) => 1;
  92. assert(info.type == LFS_TYPE_DIR);
  93. assert(strcmp(info.name, "..") == 0);
  94. lfs_dir_read(&lfs, &dir, &info) => 0;
  95. lfs_dir_close(&lfs, &dir) => 0;
  96. lfs_unmount(&lfs) => 0;
  97. """
  98. define.N = 'range(3, 100, 11)'
  99. [[case]] # file creation
  100. code = """
  101. lfs_format(&lfs, &cfg) => 0;
  102. lfs_mount(&lfs, &cfg) => 0;
  103. for (int i = 0; i < N; i++) {
  104. sprintf(path, "file%03d", i);
  105. lfs_file_open(&lfs, &file, path, LFS_O_CREAT | LFS_O_WRONLY) => 0;
  106. lfs_file_close(&lfs, &file) => 0;
  107. }
  108. lfs_unmount(&lfs) => 0;
  109. lfs_mount(&lfs, &cfg) => 0;
  110. lfs_dir_open(&lfs, &dir, "/") => 0;
  111. lfs_dir_read(&lfs, &dir, &info) => 1;
  112. assert(info.type == LFS_TYPE_DIR);
  113. assert(strcmp(info.name, ".") == 0);
  114. lfs_dir_read(&lfs, &dir, &info) => 1;
  115. assert(info.type == LFS_TYPE_DIR);
  116. assert(strcmp(info.name, "..") == 0);
  117. for (int i = 0; i < N; i++) {
  118. sprintf(path, "file%03d", i);
  119. lfs_dir_read(&lfs, &dir, &info) => 1;
  120. assert(info.type == LFS_TYPE_REG);
  121. assert(strcmp(info.name, path) == 0);
  122. }
  123. lfs_dir_read(&lfs, &dir, &info) => 0;
  124. lfs_dir_close(&lfs, &dir) => 0;
  125. lfs_unmount(&lfs);
  126. """
  127. define.N = 'range(3, 100, 11)'
  128. [[case]] # file removal
  129. code = """
  130. lfs_format(&lfs, &cfg) => 0;
  131. lfs_mount(&lfs, &cfg) => 0;
  132. for (int i = 0; i < N; i++) {
  133. sprintf(path, "removeme%03d", i);
  134. lfs_file_open(&lfs, &file, path, LFS_O_CREAT | LFS_O_WRONLY) => 0;
  135. lfs_file_close(&lfs, &file) => 0;
  136. }
  137. lfs_unmount(&lfs) => 0;
  138. lfs_mount(&lfs, &cfg) => 0;
  139. lfs_dir_open(&lfs, &dir, "/") => 0;
  140. lfs_dir_read(&lfs, &dir, &info) => 1;
  141. assert(info.type == LFS_TYPE_DIR);
  142. assert(strcmp(info.name, ".") == 0);
  143. lfs_dir_read(&lfs, &dir, &info) => 1;
  144. assert(info.type == LFS_TYPE_DIR);
  145. assert(strcmp(info.name, "..") == 0);
  146. for (int i = 0; i < N; i++) {
  147. sprintf(path, "removeme%03d", i);
  148. lfs_dir_read(&lfs, &dir, &info) => 1;
  149. assert(info.type == LFS_TYPE_REG);
  150. assert(strcmp(info.name, path) == 0);
  151. }
  152. lfs_dir_read(&lfs, &dir, &info) => 0;
  153. lfs_dir_close(&lfs, &dir) => 0;
  154. lfs_unmount(&lfs);
  155. lfs_mount(&lfs, &cfg) => 0;
  156. for (int i = 0; i < N; i++) {
  157. sprintf(path, "removeme%03d", i);
  158. lfs_remove(&lfs, path) => 0;
  159. }
  160. lfs_unmount(&lfs);
  161. lfs_mount(&lfs, &cfg) => 0;
  162. lfs_dir_open(&lfs, &dir, "/") => 0;
  163. lfs_dir_read(&lfs, &dir, &info) => 1;
  164. assert(info.type == LFS_TYPE_DIR);
  165. assert(strcmp(info.name, ".") == 0);
  166. lfs_dir_read(&lfs, &dir, &info) => 1;
  167. assert(info.type == LFS_TYPE_DIR);
  168. assert(strcmp(info.name, "..") == 0);
  169. lfs_dir_read(&lfs, &dir, &info) => 0;
  170. lfs_dir_close(&lfs, &dir) => 0;
  171. lfs_unmount(&lfs) => 0;
  172. """
  173. define.N = 'range(0, 100, 3)'
  174. [[case]] # error cases
  175. code = """
  176. lfs_format(&lfs, &cfg) => 0;
  177. lfs_mount(&lfs, &cfg) => 0;
  178. lfs_mkdir(&lfs, "potato") => 0;
  179. lfs_file_open(&lfs, &file, "burito", LFS_O_CREAT | LFS_O_WRONLY) => 0;
  180. lfs_file_close(&lfs, &file) => 0;
  181. lfs_unmount(&lfs) => 0;
  182. lfs_mount(&lfs, &cfg) => 0;
  183. lfs_mkdir(&lfs, "potato") => LFS_ERR_EXIST;
  184. lfs_dir_open(&lfs, &dir, "tomato") => LFS_ERR_NOENT;
  185. lfs_dir_open(&lfs, &dir, "burito") => LFS_ERR_NOTDIR;
  186. lfs_file_open(&lfs, &file, "tomato", LFS_O_RDONLY) => LFS_ERR_NOENT;
  187. lfs_file_open(&lfs, &file, "potato", LFS_O_RDONLY) => LFS_ERR_ISDIR;
  188. lfs_unmount(&lfs) => 0;
  189. """