test_attrs.toml 12 KB

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