test_attrs.toml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. [cases.test_attrs_get_set]
  2. code = '''
  3. lfs_t lfs;
  4. lfs_format(&lfs, cfg) => 0;
  5. lfs_mount(&lfs, cfg) => 0;
  6. lfs_mkdir(&lfs, "hello") => 0;
  7. lfs_file_t file;
  8. lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  9. lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello");
  10. lfs_file_close(&lfs, &file);
  11. lfs_unmount(&lfs) => 0;
  12. lfs_mount(&lfs, cfg) => 0;
  13. uint8_t buffer[1024];
  14. memset(buffer, 0, sizeof(buffer));
  15. lfs_setattr(&lfs, "hello", 'A', "aaaa", 4) => 0;
  16. lfs_setattr(&lfs, "hello", 'B', "bbbbbb", 6) => 0;
  17. lfs_setattr(&lfs, "hello", 'C', "ccccc", 5) => 0;
  18. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  19. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 6;
  20. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  21. memcmp(buffer, "aaaa", 4) => 0;
  22. memcmp(buffer+4, "bbbbbb", 6) => 0;
  23. memcmp(buffer+10, "ccccc", 5) => 0;
  24. lfs_setattr(&lfs, "hello", 'B', "", 0) => 0;
  25. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  26. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 0;
  27. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  28. memcmp(buffer, "aaaa", 4) => 0;
  29. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  30. memcmp(buffer+10, "ccccc", 5) => 0;
  31. lfs_removeattr(&lfs, "hello", 'B') => 0;
  32. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  33. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => LFS_ERR_NOATTR;
  34. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  35. memcmp(buffer, "aaaa", 4) => 0;
  36. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  37. memcmp(buffer+10, "ccccc", 5) => 0;
  38. lfs_setattr(&lfs, "hello", 'B', "dddddd", 6) => 0;
  39. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  40. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 6;
  41. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  42. memcmp(buffer, "aaaa", 4) => 0;
  43. memcmp(buffer+4, "dddddd", 6) => 0;
  44. memcmp(buffer+10, "ccccc", 5) => 0;
  45. lfs_setattr(&lfs, "hello", 'B', "eee", 3) => 0;
  46. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  47. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 3;
  48. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  49. memcmp(buffer, "aaaa", 4) => 0;
  50. memcmp(buffer+4, "eee\0\0\0", 6) => 0;
  51. memcmp(buffer+10, "ccccc", 5) => 0;
  52. lfs_setattr(&lfs, "hello", 'A', buffer, LFS_ATTR_MAX+1) => LFS_ERR_NOSPC;
  53. lfs_setattr(&lfs, "hello", 'B', "fffffffff", 9) => 0;
  54. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  55. lfs_getattr(&lfs, "hello", 'B', buffer+4, 6) => 9;
  56. lfs_getattr(&lfs, "hello", 'C', buffer+10, 5) => 5;
  57. lfs_unmount(&lfs) => 0;
  58. lfs_mount(&lfs, cfg) => 0;
  59. memset(buffer, 0, sizeof(buffer));
  60. lfs_getattr(&lfs, "hello", 'A', buffer, 4) => 4;
  61. lfs_getattr(&lfs, "hello", 'B', buffer+4, 9) => 9;
  62. lfs_getattr(&lfs, "hello", 'C', buffer+13, 5) => 5;
  63. memcmp(buffer, "aaaa", 4) => 0;
  64. memcmp(buffer+4, "fffffffff", 9) => 0;
  65. memcmp(buffer+13, "ccccc", 5) => 0;
  66. lfs_file_open(&lfs, &file, "hello/hello", LFS_O_RDONLY) => 0;
  67. lfs_file_read(&lfs, &file, buffer, sizeof(buffer)) => strlen("hello");
  68. memcmp(buffer, "hello", strlen("hello")) => 0;
  69. lfs_file_close(&lfs, &file);
  70. lfs_unmount(&lfs) => 0;
  71. '''
  72. [cases.test_attrs_get_set_root]
  73. code = '''
  74. lfs_t lfs;
  75. lfs_format(&lfs, cfg) => 0;
  76. lfs_mount(&lfs, cfg) => 0;
  77. lfs_mkdir(&lfs, "hello") => 0;
  78. lfs_file_t file;
  79. lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  80. lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello");
  81. lfs_file_close(&lfs, &file);
  82. lfs_unmount(&lfs) => 0;
  83. lfs_mount(&lfs, cfg) => 0;
  84. uint8_t buffer[1024];
  85. memset(buffer, 0, sizeof(buffer));
  86. lfs_setattr(&lfs, "/", 'A', "aaaa", 4) => 0;
  87. lfs_setattr(&lfs, "/", 'B', "bbbbbb", 6) => 0;
  88. lfs_setattr(&lfs, "/", 'C', "ccccc", 5) => 0;
  89. lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4;
  90. lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 6;
  91. lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5;
  92. memcmp(buffer, "aaaa", 4) => 0;
  93. memcmp(buffer+4, "bbbbbb", 6) => 0;
  94. memcmp(buffer+10, "ccccc", 5) => 0;
  95. lfs_setattr(&lfs, "/", 'B', "", 0) => 0;
  96. lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4;
  97. lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 0;
  98. lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5;
  99. memcmp(buffer, "aaaa", 4) => 0;
  100. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  101. memcmp(buffer+10, "ccccc", 5) => 0;
  102. lfs_removeattr(&lfs, "/", 'B') => 0;
  103. lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4;
  104. lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => LFS_ERR_NOATTR;
  105. lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5;
  106. memcmp(buffer, "aaaa", 4) => 0;
  107. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  108. memcmp(buffer+10, "ccccc", 5) => 0;
  109. lfs_setattr(&lfs, "/", 'B', "dddddd", 6) => 0;
  110. lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4;
  111. lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 6;
  112. lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5;
  113. memcmp(buffer, "aaaa", 4) => 0;
  114. memcmp(buffer+4, "dddddd", 6) => 0;
  115. memcmp(buffer+10, "ccccc", 5) => 0;
  116. lfs_setattr(&lfs, "/", 'B', "eee", 3) => 0;
  117. lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4;
  118. lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 3;
  119. lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5;
  120. memcmp(buffer, "aaaa", 4) => 0;
  121. memcmp(buffer+4, "eee\0\0\0", 6) => 0;
  122. memcmp(buffer+10, "ccccc", 5) => 0;
  123. lfs_setattr(&lfs, "/", 'A', buffer, LFS_ATTR_MAX+1) => LFS_ERR_NOSPC;
  124. lfs_setattr(&lfs, "/", 'B', "fffffffff", 9) => 0;
  125. lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4;
  126. lfs_getattr(&lfs, "/", 'B', buffer+4, 6) => 9;
  127. lfs_getattr(&lfs, "/", 'C', buffer+10, 5) => 5;
  128. lfs_unmount(&lfs) => 0;
  129. lfs_mount(&lfs, cfg) => 0;
  130. memset(buffer, 0, sizeof(buffer));
  131. lfs_getattr(&lfs, "/", 'A', buffer, 4) => 4;
  132. lfs_getattr(&lfs, "/", 'B', buffer+4, 9) => 9;
  133. lfs_getattr(&lfs, "/", 'C', buffer+13, 5) => 5;
  134. memcmp(buffer, "aaaa", 4) => 0;
  135. memcmp(buffer+4, "fffffffff", 9) => 0;
  136. memcmp(buffer+13, "ccccc", 5) => 0;
  137. lfs_file_open(&lfs, &file, "hello/hello", LFS_O_RDONLY) => 0;
  138. lfs_file_read(&lfs, &file, buffer, sizeof(buffer)) => strlen("hello");
  139. memcmp(buffer, "hello", strlen("hello")) => 0;
  140. lfs_file_close(&lfs, &file);
  141. lfs_unmount(&lfs) => 0;
  142. '''
  143. [cases.test_attrs_get_set_file]
  144. code = '''
  145. lfs_t lfs;
  146. lfs_format(&lfs, cfg) => 0;
  147. lfs_mount(&lfs, cfg) => 0;
  148. lfs_mkdir(&lfs, "hello") => 0;
  149. lfs_file_t file;
  150. lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  151. lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello");
  152. lfs_file_close(&lfs, &file);
  153. lfs_unmount(&lfs) => 0;
  154. lfs_mount(&lfs, cfg) => 0;
  155. uint8_t buffer[1024];
  156. memset(buffer, 0, sizeof(buffer));
  157. struct lfs_attr attrs1[] = {
  158. {'A', buffer, 4},
  159. {'B', buffer+4, 6},
  160. {'C', buffer+10, 5},
  161. };
  162. struct lfs_file_config cfg1 = {.attrs=attrs1, .attr_count=3};
  163. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  164. memcpy(buffer, "aaaa", 4);
  165. memcpy(buffer+4, "bbbbbb", 6);
  166. memcpy(buffer+10, "ccccc", 5);
  167. lfs_file_close(&lfs, &file) => 0;
  168. memset(buffer, 0, 15);
  169. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  170. lfs_file_close(&lfs, &file) => 0;
  171. memcmp(buffer, "aaaa", 4) => 0;
  172. memcmp(buffer+4, "bbbbbb", 6) => 0;
  173. memcmp(buffer+10, "ccccc", 5) => 0;
  174. attrs1[1].size = 0;
  175. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  176. lfs_file_close(&lfs, &file) => 0;
  177. memset(buffer, 0, 15);
  178. attrs1[1].size = 6;
  179. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  180. lfs_file_close(&lfs, &file) => 0;
  181. memcmp(buffer, "aaaa", 4) => 0;
  182. memcmp(buffer+4, "\0\0\0\0\0\0", 6) => 0;
  183. memcmp(buffer+10, "ccccc", 5) => 0;
  184. attrs1[1].size = 6;
  185. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  186. memcpy(buffer+4, "dddddd", 6);
  187. lfs_file_close(&lfs, &file) => 0;
  188. memset(buffer, 0, 15);
  189. attrs1[1].size = 6;
  190. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  191. lfs_file_close(&lfs, &file) => 0;
  192. memcmp(buffer, "aaaa", 4) => 0;
  193. memcmp(buffer+4, "dddddd", 6) => 0;
  194. memcmp(buffer+10, "ccccc", 5) => 0;
  195. attrs1[1].size = 3;
  196. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  197. memcpy(buffer+4, "eee", 3);
  198. lfs_file_close(&lfs, &file) => 0;
  199. memset(buffer, 0, 15);
  200. attrs1[1].size = 6;
  201. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  202. lfs_file_close(&lfs, &file) => 0;
  203. memcmp(buffer, "aaaa", 4) => 0;
  204. memcmp(buffer+4, "eee\0\0\0", 6) => 0;
  205. memcmp(buffer+10, "ccccc", 5) => 0;
  206. attrs1[0].size = LFS_ATTR_MAX+1;
  207. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1)
  208. => LFS_ERR_NOSPC;
  209. struct lfs_attr attrs2[] = {
  210. {'A', buffer, 4},
  211. {'B', buffer+4, 9},
  212. {'C', buffer+13, 5},
  213. };
  214. struct lfs_file_config cfg2 = {.attrs=attrs2, .attr_count=3};
  215. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDWR, &cfg2) => 0;
  216. memcpy(buffer+4, "fffffffff", 9);
  217. lfs_file_close(&lfs, &file) => 0;
  218. attrs1[0].size = 4;
  219. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg1) => 0;
  220. lfs_file_close(&lfs, &file) => 0;
  221. lfs_unmount(&lfs) => 0;
  222. lfs_mount(&lfs, cfg) => 0;
  223. memset(buffer, 0, sizeof(buffer));
  224. struct lfs_attr attrs3[] = {
  225. {'A', buffer, 4},
  226. {'B', buffer+4, 9},
  227. {'C', buffer+13, 5},
  228. };
  229. struct lfs_file_config cfg3 = {.attrs=attrs3, .attr_count=3};
  230. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_RDONLY, &cfg3) => 0;
  231. lfs_file_close(&lfs, &file) => 0;
  232. memcmp(buffer, "aaaa", 4) => 0;
  233. memcmp(buffer+4, "fffffffff", 9) => 0;
  234. memcmp(buffer+13, "ccccc", 5) => 0;
  235. lfs_file_open(&lfs, &file, "hello/hello", LFS_O_RDONLY) => 0;
  236. lfs_file_read(&lfs, &file, buffer, sizeof(buffer)) => strlen("hello");
  237. memcmp(buffer, "hello", strlen("hello")) => 0;
  238. lfs_file_close(&lfs, &file);
  239. lfs_unmount(&lfs) => 0;
  240. '''
  241. [cases.test_attrs_deferred_file]
  242. code = '''
  243. lfs_t lfs;
  244. lfs_format(&lfs, cfg) => 0;
  245. lfs_mount(&lfs, cfg) => 0;
  246. lfs_mkdir(&lfs, "hello") => 0;
  247. lfs_file_t file;
  248. lfs_file_open(&lfs, &file, "hello/hello", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  249. lfs_file_write(&lfs, &file, "hello", strlen("hello")) => strlen("hello");
  250. lfs_file_close(&lfs, &file);
  251. lfs_unmount(&lfs) => 0;
  252. lfs_mount(&lfs, cfg) => 0;
  253. lfs_setattr(&lfs, "hello/hello", 'B', "fffffffff", 9) => 0;
  254. lfs_setattr(&lfs, "hello/hello", 'C', "ccccc", 5) => 0;
  255. uint8_t buffer[1024];
  256. memset(buffer, 0, sizeof(buffer));
  257. struct lfs_attr attrs1[] = {
  258. {'B', "gggg", 4},
  259. {'C', "", 0},
  260. {'D', "hhhh", 4},
  261. };
  262. struct lfs_file_config cfg1 = {.attrs=attrs1, .attr_count=3};
  263. lfs_file_opencfg(&lfs, &file, "hello/hello", LFS_O_WRONLY, &cfg1) => 0;
  264. lfs_getattr(&lfs, "hello/hello", 'B', buffer, 9) => 9;
  265. lfs_getattr(&lfs, "hello/hello", 'C', buffer+9, 9) => 5;
  266. lfs_getattr(&lfs, "hello/hello", 'D', buffer+18, 9) => LFS_ERR_NOATTR;
  267. memcmp(buffer, "fffffffff", 9) => 0;
  268. memcmp(buffer+9, "ccccc\0\0\0\0", 9) => 0;
  269. memcmp(buffer+18, "\0\0\0\0\0\0\0\0\0", 9) => 0;
  270. lfs_file_sync(&lfs, &file) => 0;
  271. lfs_getattr(&lfs, "hello/hello", 'B', buffer, 9) => 4;
  272. lfs_getattr(&lfs, "hello/hello", 'C', buffer+9, 9) => 0;
  273. lfs_getattr(&lfs, "hello/hello", 'D', buffer+18, 9) => 4;
  274. memcmp(buffer, "gggg\0\0\0\0\0", 9) => 0;
  275. memcmp(buffer+9, "\0\0\0\0\0\0\0\0\0", 9) => 0;
  276. memcmp(buffer+18, "hhhh\0\0\0\0\0", 9) => 0;
  277. lfs_file_close(&lfs, &file) => 0;
  278. lfs_unmount(&lfs) => 0;
  279. '''