test_attrs.sh 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. #!/bin/bash
  2. set -eu
  3. echo "=== Attr tests ==="
  4. rm -rf blocks
  5. tests/test.py << TEST
  6. lfs_format(&lfs, &cfg) => 0;
  7. lfs_mount(&lfs, &cfg) => 0;
  8. lfs_mkdir(&lfs, "hello") => 0;
  9. lfs_file_open(&lfs, &file[0], "hello/hello",
  10. LFS_O_WRONLY | LFS_O_CREAT) => 0;
  11. lfs_file_write(&lfs, &file[0], "hello", strlen("hello"))
  12. => strlen("hello");
  13. lfs_file_close(&lfs, &file[0]);
  14. lfs_unmount(&lfs) => 0;
  15. TEST
  16. echo "--- Set/get attribute ---"
  17. tests/test.py << TEST
  18. lfs_mount(&lfs, &cfg) => 0;
  19. lfs_setattr(&lfs, "hello", 'A', "aaaa", 4) => 0;
  20. lfs_setattr(&lfs, "hello", 'B', "bbbbbb", 6) => 0;
  21. lfs_setattr(&lfs, "hello", 'C', "ccccc", 5) => 0;
  22. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  23. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 6;
  24. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  25. memcmp(buffer, "aaaa", 4) => 0;
  26. memcmp(buffer+4, "bbbbbb", 6) => 0;
  27. memcmp(buffer+10, "ccccc", 5) => 0;
  28. lfs_setattr(&lfs, "hello", 'B', "", 0) => 0;
  29. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  30. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 0;
  31. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  32. memcmp(buffer, "aaaa", 4) => 0;
  33. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  34. memcmp(buffer+10, "ccccc", 5) => 0;
  35. lfs_setattr(&lfs, "hello", 'B', "dddddd", 6) => 0;
  36. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  37. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 6;
  38. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  39. memcmp(buffer, "aaaa", 4) => 0;
  40. memcmp(buffer+4, "dddddd", 6) => 0;
  41. memcmp(buffer+10, "ccccc", 5) => 0;
  42. lfs_setattr(&lfs, "hello", 'B', "eee", 3) => 0;
  43. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  44. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 3;
  45. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  46. memcmp(buffer, "aaaa", 4) => 0;
  47. memcmp(buffer+4, "eee\0\0\0", 6) => 0;
  48. memcmp(buffer+10, "ccccc", 5) => 0;
  49. lfs_setattr(&lfs, "hello", 'A', buffer, LFS_ATTR_MAX+1) => LFS_ERR_NOSPC;
  50. lfs_setattr(&lfs, "hello", 'B', "fffffffff", 9) => 0;
  51. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  52. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 9;
  53. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  54. lfs_unmount(&lfs) => 0;
  55. TEST
  56. tests/test.py << TEST
  57. lfs_mount(&lfs, &cfg) => 0;
  58. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  59. lfs_getattr(&lfs, "hello", 'B', buffer+4, 9) => 9;
  60. lfs_getattr(&lfs, "hello", 'C', buffer+13, 5) => 5;
  61. memcmp(buffer, "aaaa", 4) => 0;
  62. memcmp(buffer+4, "fffffffff", 9) => 0;
  63. memcmp(buffer+13, "ccccc", 5) => 0;
  64. lfs_file_open(&lfs, &file[0], "hello/hello", LFS_O_RDONLY) => 0;
  65. lfs_file_read(&lfs, &file[0], buffer, sizeof(buffer)) => strlen("hello");
  66. memcmp(buffer, "hello", strlen("hello")) => 0;
  67. lfs_file_close(&lfs, &file[0]);
  68. lfs_unmount(&lfs) => 0;
  69. TEST
  70. echo "--- Set/get fs attribute ---"
  71. tests/test.py << TEST
  72. lfs_mount(&lfs, &cfg) => 0;
  73. lfs_fs_setattr(&lfs, 'A', "aaaa", 4) => 0;
  74. lfs_fs_setattr(&lfs, 'B', "bbbbbb", 6) => 0;
  75. lfs_fs_setattr(&lfs, 'C', "ccccc", 5) => 0;
  76. lfs_fs_getattr(&lfs, 'A', buffer, 4) => 4;
  77. lfs_fs_getattr(&lfs, 'B', buffer+4, 6) => 6;
  78. lfs_fs_getattr(&lfs, 'C', buffer+10, 5) => 5;
  79. memcmp(buffer, "aaaa", 4) => 0;
  80. memcmp(buffer+4, "bbbbbb", 6) => 0;
  81. memcmp(buffer+10, "ccccc", 5) => 0;
  82. lfs_fs_setattr(&lfs, 'B', "", 0) => 0;
  83. lfs_fs_getattr(&lfs, 'A', buffer, 4) => 4;
  84. lfs_fs_getattr(&lfs, 'B', buffer+4, 6) => 0;
  85. lfs_fs_getattr(&lfs, 'C', buffer+10, 5) => 5;
  86. memcmp(buffer, "aaaa", 4) => 0;
  87. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  88. memcmp(buffer+10, "ccccc", 5) => 0;
  89. lfs_fs_setattr(&lfs, 'B', "dddddd", 6) => 0;
  90. lfs_fs_getattr(&lfs, 'A', buffer, 4) => 4;
  91. lfs_fs_getattr(&lfs, 'B', buffer+4, 6) => 6;
  92. lfs_fs_getattr(&lfs, 'C', buffer+10, 5) => 5;
  93. memcmp(buffer, "aaaa", 4) => 0;
  94. memcmp(buffer+4, "dddddd", 6) => 0;
  95. memcmp(buffer+10, "ccccc", 5) => 0;
  96. lfs_fs_setattr(&lfs, 'B', "eee", 3) => 0;
  97. lfs_fs_getattr(&lfs, 'A', buffer, 4) => 4;
  98. lfs_fs_getattr(&lfs, 'B', buffer+4, 6) => 3;
  99. lfs_fs_getattr(&lfs, 'C', buffer+10, 5) => 5;
  100. memcmp(buffer, "aaaa", 4) => 0;
  101. memcmp(buffer+4, "eee\0\0\0", 6) => 0;
  102. memcmp(buffer+10, "ccccc", 5) => 0;
  103. lfs_fs_setattr(&lfs, 'A', buffer, LFS_ATTR_MAX+1) => LFS_ERR_NOSPC;
  104. lfs_fs_setattr(&lfs, 'B', "fffffffff", 9) => 0;
  105. lfs_fs_getattr(&lfs, 'A', buffer, 4) => 4;
  106. lfs_fs_getattr(&lfs, 'B', buffer+4, 6) => 9;
  107. lfs_fs_getattr(&lfs, 'C', buffer+10, 5) => 5;
  108. lfs_unmount(&lfs) => 0;
  109. TEST
  110. tests/test.py << TEST
  111. lfs_mount(&lfs, &cfg) => 0;
  112. lfs_fs_getattr(&lfs, 'A', buffer, 4) => 4;
  113. lfs_fs_getattr(&lfs, 'B', buffer+4, 9) => 9;
  114. lfs_fs_getattr(&lfs, 'C', buffer+13, 5) => 5;
  115. memcmp(buffer, "aaaa", 4) => 0;
  116. memcmp(buffer+4, "fffffffff", 9) => 0;
  117. memcmp(buffer+13, "ccccc", 5) => 0;
  118. lfs_file_open(&lfs, &file[0], "hello/hello", LFS_O_RDONLY) => 0;
  119. lfs_file_read(&lfs, &file[0], buffer, sizeof(buffer)) => strlen("hello");
  120. memcmp(buffer, "hello", strlen("hello")) => 0;
  121. lfs_file_close(&lfs, &file[0]);
  122. lfs_unmount(&lfs) => 0;
  123. TEST
  124. echo "--- Set/get file attribute ---"
  125. tests/test.py << TEST
  126. lfs_mount(&lfs, &cfg) => 0;
  127. struct lfs_attr a1 = {'A', buffer, 4};
  128. struct lfs_attr b1 = {'B', buffer+4, 6, &a1};
  129. struct lfs_attr c1 = {'C', buffer+10, 5, &b1};
  130. struct lfs_file_config cfg1 = {.attrs = &c1};
  131. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  132. memcpy(buffer, "aaaa", 4);
  133. memcpy(buffer+4, "bbbbbb", 6);
  134. memcpy(buffer+10, "ccccc", 5);
  135. lfs_file_close(&lfs, &file[0]) => 0;
  136. memset(buffer, 0, 15);
  137. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  138. lfs_file_close(&lfs, &file[0]) => 0;
  139. memcmp(buffer, "aaaa", 4) => 0;
  140. memcmp(buffer+4, "bbbbbb", 6) => 0;
  141. memcmp(buffer+10, "ccccc", 5) => 0;
  142. b1.size = 0;
  143. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  144. lfs_file_close(&lfs, &file[0]) => 0;
  145. memset(buffer, 0, 15);
  146. b1.size = 6;
  147. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  148. lfs_file_close(&lfs, &file[0]) => 0;
  149. memcmp(buffer, "aaaa", 4) => 0;
  150. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  151. memcmp(buffer+10, "ccccc", 5) => 0;
  152. b1.size = 6;
  153. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  154. memcpy(buffer+4, "dddddd", 6);
  155. lfs_file_close(&lfs, &file[0]) => 0;
  156. memset(buffer, 0, 15);
  157. b1.size = 6;
  158. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  159. lfs_file_close(&lfs, &file[0]) => 0;
  160. memcmp(buffer, "aaaa", 4) => 0;
  161. memcmp(buffer+4, "dddddd", 6) => 0;
  162. memcmp(buffer+10, "ccccc", 5) => 0;
  163. b1.size = 3;
  164. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  165. memcpy(buffer+4, "eee", 3);
  166. lfs_file_close(&lfs, &file[0]) => 0;
  167. memset(buffer, 0, 15);
  168. b1.size = 6;
  169. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  170. lfs_file_close(&lfs, &file[0]) => 0;
  171. memcmp(buffer, "aaaa", 4) => 0;
  172. memcmp(buffer+4, "eee\0\0\0", 6) => 0;
  173. memcmp(buffer+10, "ccccc", 5) => 0;
  174. a1.size = LFS_ATTR_MAX+1;
  175. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_WRONLY, &cfg1)
  176. => LFS_ERR_NOSPC;
  177. struct lfs_attr a2 = {'A', buffer, 4};
  178. struct lfs_attr b2 = {'B', buffer+4, 9, &a2};
  179. struct lfs_attr c2 = {'C', buffer+13, 5, &b2};
  180. struct lfs_file_config cfg2 = {.attrs = &c2};
  181. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_RDWR, &cfg2) => 0;
  182. memcpy(buffer+4, "fffffffff", 9);
  183. lfs_file_close(&lfs, &file[0]) => 0;
  184. a1.size = 4;
  185. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  186. lfs_file_close(&lfs, &file[0]) => 0;
  187. lfs_unmount(&lfs) => 0;
  188. TEST
  189. tests/test.py << TEST
  190. lfs_mount(&lfs, &cfg) => 0;
  191. struct lfs_attr a2 = {'A', buffer, 4};
  192. struct lfs_attr b2 = {'B', buffer+4, 9, &a2};
  193. struct lfs_attr c2 = {'C', buffer+13, 5, &b2};
  194. struct lfs_file_config cfg2 = {.attrs = &c2};
  195. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_RDONLY, &cfg2) => 0;
  196. lfs_file_close(&lfs, &file[0]) => 0;
  197. memcmp(buffer, "aaaa", 4) => 0;
  198. memcmp(buffer+4, "fffffffff", 9) => 0;
  199. memcmp(buffer+13, "ccccc", 5) => 0;
  200. lfs_file_open(&lfs, &file[0], "hello/hello", LFS_O_RDONLY) => 0;
  201. lfs_file_read(&lfs, &file[0], buffer, sizeof(buffer)) => strlen("hello");
  202. memcmp(buffer, "hello", strlen("hello")) => 0;
  203. lfs_file_close(&lfs, &file[0]);
  204. lfs_unmount(&lfs) => 0;
  205. TEST
  206. echo "--- Deferred file attributes ---"
  207. tests/test.py << TEST
  208. lfs_mount(&lfs, &cfg) => 0;
  209. struct lfs_attr a1 = {'B', "gggg", 4};
  210. struct lfs_attr b1 = {'C', "", 0, &a1};
  211. struct lfs_attr c1 = {'D', "hhhh", 4, &b1};
  212. struct lfs_file_config cfg1 = {.attrs = &c1};
  213. lfs_file_opencfg(&lfs, &file[0], "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  214. lfs_getattr(&lfs, "hello/hello", 'B', buffer, 9) => 9;
  215. lfs_getattr(&lfs, "hello/hello", 'C', buffer+9, 9) => 5;
  216. lfs_getattr(&lfs, "hello/hello", 'D', buffer+18, 9) => LFS_ERR_NOATTR;
  217. memcmp(buffer, "fffffffff", 9) => 0;
  218. memcmp(buffer+9, "ccccc\0\0\0\0", 9) => 0;
  219. memcmp(buffer+18, "\0\0\0\0\0\0\0\0\0", 9) => 0;
  220. lfs_file_sync(&lfs, &file[0]) => 0;
  221. lfs_getattr(&lfs, "hello/hello", 'B', buffer, 9) => 4;
  222. lfs_getattr(&lfs, "hello/hello", 'C', buffer+9, 9) => 0;
  223. lfs_getattr(&lfs, "hello/hello", 'D', buffer+18, 9) => 4;
  224. memcmp(buffer, "gggg\0\0\0\0\0", 9) => 0;
  225. memcmp(buffer+9, "\0\0\0\0\0\0\0\0\0", 9) => 0;
  226. memcmp(buffer+18, "hhhh\0\0\0\0\0", 9) => 0;
  227. lfs_file_close(&lfs, &file[0]) => 0;
  228. lfs_unmount(&lfs) => 0;
  229. TEST
  230. echo "--- Results ---"
  231. tests/stats.py