You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

349 lines
8.6 KiB

  1. #include "acutest.h"
  2. #include "config.hpp"
  3. void
  4. test_nop()
  5. {
  6. TEST_CHECK(true);
  7. }
  8. void
  9. test_config_bool()
  10. {
  11. ConfigBOOL v;
  12. TEST_CHECK(v.from_string("true") == 0);
  13. TEST_CHECK(v == true);
  14. TEST_CHECK(v.to_string() == "true");
  15. TEST_CHECK(v.from_string("false") == 0);
  16. TEST_CHECK(v == false);
  17. TEST_CHECK(v.to_string() == "false");
  18. TEST_CHECK(v.from_string("asdf") == -EINVAL);
  19. }
  20. void
  21. test_config_uint64()
  22. {
  23. ConfigUINT64 v;
  24. TEST_CHECK(v.from_string("0") == 0);
  25. TEST_CHECK(v == (uint64_t)0);
  26. TEST_CHECK(v.to_string() == "0");
  27. TEST_CHECK(v.from_string("123") == 0);
  28. TEST_CHECK(v == (uint64_t)123);
  29. TEST_CHECK(v.to_string() == "123");
  30. TEST_CHECK(v.from_string("1234567890") == 0);
  31. TEST_CHECK(v == (uint64_t)1234567890);
  32. TEST_CHECK(v.to_string() == "1234567890");
  33. TEST_CHECK(v.from_string("asdf") == -EINVAL);
  34. }
  35. void
  36. test_config_int()
  37. {
  38. ConfigINT v;
  39. TEST_CHECK(v.from_string("0") == 0);
  40. TEST_CHECK(v == (int)0);
  41. TEST_CHECK(v.to_string() == "0");
  42. TEST_CHECK(v.from_string("123") == 0);
  43. TEST_CHECK(v == (int)123);
  44. TEST_CHECK(v.to_string() == "123");
  45. TEST_CHECK(v.from_string("1234567890") == 0);
  46. TEST_CHECK(v == (int)1234567890);
  47. TEST_CHECK(v.to_string() == "1234567890");
  48. TEST_CHECK(v.from_string("asdf") == -EINVAL);
  49. }
  50. void
  51. test_config_str()
  52. {
  53. ConfigSTR v;
  54. TEST_CHECK(v.from_string("foo") == 0);
  55. TEST_CHECK(v == "foo");
  56. TEST_CHECK(v.to_string() == "foo");
  57. }
  58. void
  59. test_config_branches()
  60. {
  61. uint64_t minfreespace;
  62. Branches b(minfreespace);
  63. Branches::CPtr bcp0;
  64. Branches::CPtr bcp1;
  65. minfreespace = 1234;
  66. TEST_CHECK(b->minfreespace() == 1234);
  67. TEST_CHECK(b.to_string() == "");
  68. bcp0 = b;
  69. TEST_CHECK(b.from_string("/foo/bar") == 0);
  70. TEST_CHECK(b.to_string() == "/foo/bar=RW");
  71. bcp1 = b;
  72. TEST_CHECK(bcp0.get() != bcp1.get());
  73. TEST_CHECK(b.from_string("/foo/bar=RW,1234") == 0);
  74. TEST_CHECK(b.to_string() == "/foo/bar=RW,1234");
  75. TEST_CHECK(b.from_string("/foo/bar=RO,1234:/foo/baz=NC,4321") == 0);
  76. TEST_CHECK(b.to_string() == "/foo/bar=RO,1234:/foo/baz=NC,4321");
  77. bcp0 = b;
  78. TEST_CHECK((*bcp0).size() == 2);
  79. TEST_CHECK((*bcp0)[0].path == "/foo/bar");
  80. TEST_CHECK((*bcp0)[0].minfreespace() == 1234);
  81. TEST_MSG("minfreespace: expected = %lu; produced = %lu",
  82. 1234,
  83. (*bcp0)[0].minfreespace());
  84. TEST_CHECK((*bcp0)[1].path == "/foo/baz");
  85. TEST_CHECK((*bcp0)[1].minfreespace() == 4321);
  86. TEST_MSG("minfreespace: expected = %lu; produced = %lu",
  87. 4321,
  88. (*bcp0)[1].minfreespace());
  89. TEST_CHECK(b.from_string("foo/bar") == 0);
  90. TEST_CHECK(b.from_string("./foo/bar") == 0);
  91. TEST_CHECK(b.from_string("./foo/bar:/bar/baz:blah/asdf") == 0);
  92. }
  93. void
  94. test_config_update_branches()
  95. {
  96. uint64_t minfreespace;
  97. Branches b(minfreespace);
  98. minfreespace = 1234;
  99. //
  100. TEST_CHECK(b.from_string("/first:/second") == 0);
  101. TEST_CHECK(b.from_string("-/first") == 0);
  102. TEST_CHECK(b.to_string() == "/second=RW");
  103. TEST_CHECK(b.from_string("+>/last") == 0);
  104. TEST_CHECK(b.to_string() == "/second=RW:/last=RW");
  105. TEST_CHECK(b.from_string("+/last") == 0);
  106. TEST_CHECK(b.to_string() == "/second=RW:/last=RW:/last=RW");
  107. //
  108. TEST_CHECK(b.from_string("/second") == 0);
  109. TEST_CHECK(b.from_string("+</first") == 0);
  110. TEST_CHECK(b.to_string() == "/first=RW:/second=RW");
  111. //
  112. TEST_CHECK(b.from_string("/first:/second") == 0);
  113. TEST_CHECK(b.from_string("-/second") == 0);
  114. TEST_CHECK(b.to_string() == "/first=RW");
  115. //
  116. TEST_CHECK(b.from_string("/first:/second") == 0);
  117. TEST_CHECK(b.from_string("->") == 0);
  118. TEST_CHECK(b.to_string() == "/first=RW");
  119. //
  120. TEST_CHECK(b.from_string("/first:/second") == 0);
  121. TEST_CHECK(b.from_string("-<") == 0);
  122. TEST_CHECK(b.to_string() == "/second=RW");
  123. //
  124. TEST_CHECK(b.from_string("=/dir") == 0);
  125. TEST_CHECK(b.to_string() == "/dir=RW");
  126. TEST_CHECK(b.from_string("/dir") == 0);
  127. TEST_CHECK(b.to_string() == "/dir=RW");
  128. // error out when no branches left
  129. TEST_CHECK(b.from_string("=/dir") == 0);
  130. TEST_CHECK(b.from_string("-/dir") < 0);
  131. TEST_CHECK(b.from_string("-<") < 0);
  132. TEST_CHECK(b.from_string("->") < 0);
  133. // error out when setting empty branches
  134. TEST_CHECK(b.from_string("=") < 0);
  135. TEST_CHECK(b.from_string("") < 0);
  136. }
  137. void
  138. test_config_cachefiles()
  139. {
  140. CacheFiles cf;
  141. TEST_CHECK(cf.from_string("libfuse") == 0);
  142. TEST_CHECK(cf.to_string() == "libfuse");
  143. TEST_CHECK(cf.from_string("off") == 0);
  144. TEST_CHECK(cf.to_string() == "off");
  145. TEST_CHECK(cf.from_string("partial") == 0);
  146. TEST_CHECK(cf.to_string() == "partial");
  147. TEST_CHECK(cf.from_string("full") == 0);
  148. TEST_CHECK(cf.to_string() == "full");
  149. TEST_CHECK(cf.from_string("auto-full") == 0);
  150. TEST_CHECK(cf.to_string() == "auto-full");
  151. TEST_CHECK(cf.from_string("foobar") == -EINVAL);
  152. }
  153. void
  154. test_config_inodecalc()
  155. {
  156. InodeCalc ic("passthrough");
  157. TEST_CHECK(ic.from_string("passthrough") == 0);
  158. TEST_CHECK(ic.to_string() == "passthrough");
  159. TEST_CHECK(ic.from_string("path-hash") == 0);
  160. TEST_CHECK(ic.to_string() == "path-hash");
  161. TEST_CHECK(ic.from_string("devino-hash") == 0);
  162. TEST_CHECK(ic.to_string() == "devino-hash");
  163. TEST_CHECK(ic.from_string("hybrid-hash") == 0);
  164. TEST_CHECK(ic.to_string() == "hybrid-hash");
  165. TEST_CHECK(ic.from_string("path-hash32") == 0);
  166. TEST_CHECK(ic.to_string() == "path-hash32");
  167. TEST_CHECK(ic.from_string("devino-hash32") == 0);
  168. TEST_CHECK(ic.to_string() == "devino-hash32");
  169. TEST_CHECK(ic.from_string("hybrid-hash32") == 0);
  170. TEST_CHECK(ic.to_string() == "hybrid-hash32");
  171. TEST_CHECK(ic.from_string("asdf") == -EINVAL);
  172. }
  173. void
  174. test_config_moveonenospc()
  175. {
  176. MoveOnENOSPC m(false);
  177. TEST_CHECK(m.to_string() == "false");
  178. TEST_CHECK(m.from_string("mfs") == 0);
  179. TEST_CHECK(m.to_string() == "mfs");
  180. TEST_CHECK(m.from_string("mspmfs") == 0);
  181. TEST_CHECK(m.to_string() == "mspmfs");
  182. TEST_CHECK(m.from_string("true") == 0);
  183. TEST_CHECK(m.to_string() == "mfs");
  184. TEST_CHECK(m.from_string("blah") == -EINVAL);
  185. }
  186. void
  187. test_config_nfsopenhack()
  188. {
  189. NFSOpenHack n;
  190. TEST_CHECK(n.from_string("off") == 0);
  191. TEST_CHECK(n.to_string() == "off");
  192. TEST_CHECK(n == NFSOpenHack::ENUM::OFF);
  193. TEST_CHECK(n.from_string("git") == 0);
  194. TEST_CHECK(n.to_string() == "git");
  195. TEST_CHECK(n == NFSOpenHack::ENUM::GIT);
  196. TEST_CHECK(n.from_string("all") == 0);
  197. TEST_CHECK(n.to_string() == "all");
  198. TEST_CHECK(n == NFSOpenHack::ENUM::ALL);
  199. }
  200. void
  201. test_config_readdir()
  202. {
  203. ReadDir r;
  204. TEST_CHECK(r.from_string("linux") == 0);
  205. TEST_CHECK(r.to_string() == "linux");
  206. TEST_CHECK(r == ReadDir::ENUM::LINUX);
  207. TEST_CHECK(r.from_string("posix") == 0);
  208. TEST_CHECK(r.to_string() == "posix");
  209. TEST_CHECK(r == ReadDir::ENUM::POSIX);
  210. }
  211. void
  212. test_config_statfs()
  213. {
  214. StatFS s;
  215. TEST_CHECK(s.from_string("base") == 0);
  216. TEST_CHECK(s.to_string() == "base");
  217. TEST_CHECK(s == StatFS::ENUM::BASE);
  218. TEST_CHECK(s.from_string("full") == 0);
  219. TEST_CHECK(s.to_string() == "full");
  220. TEST_CHECK(s == StatFS::ENUM::FULL);
  221. TEST_CHECK(s.from_string("asdf") == -EINVAL);
  222. }
  223. void
  224. test_config_statfs_ignore()
  225. {
  226. StatFSIgnore s;
  227. TEST_CHECK(s.from_string("none") == 0);
  228. TEST_CHECK(s.to_string() == "none");
  229. TEST_CHECK(s == StatFSIgnore::ENUM::NONE);
  230. TEST_CHECK(s.from_string("ro") == 0);
  231. TEST_CHECK(s.to_string() == "ro");
  232. TEST_CHECK(s == StatFSIgnore::ENUM::RO);
  233. TEST_CHECK(s.from_string("nc") == 0);
  234. TEST_CHECK(s.to_string() == "nc");
  235. TEST_CHECK(s == StatFSIgnore::ENUM::NC);
  236. TEST_CHECK(s.from_string("asdf") == -EINVAL);
  237. }
  238. void
  239. test_config_xattr()
  240. {
  241. XAttr x;
  242. TEST_CHECK(x.from_string("passthrough") == 0);
  243. TEST_CHECK(x.to_string() == "passthrough");
  244. TEST_CHECK(x == XAttr::ENUM::PASSTHROUGH);
  245. TEST_CHECK(x.from_string("noattr") == 0);
  246. TEST_CHECK(x.to_string() == "noattr");
  247. TEST_CHECK(x == XAttr::ENUM::NOATTR);
  248. TEST_CHECK(x.from_string("nosys") == 0);
  249. TEST_CHECK(x.to_string() == "nosys");
  250. TEST_CHECK(x == XAttr::ENUM::NOSYS);
  251. TEST_CHECK(x.from_string("asdf") == -EINVAL);
  252. }
  253. void
  254. test_config()
  255. {
  256. Config cfg;
  257. TEST_CHECK(cfg.set_raw("async_read","true") == 0);
  258. }
  259. TEST_LIST =
  260. {
  261. {"nop",test_nop},
  262. {"config_bool",test_config_bool},
  263. {"config_uint64",test_config_uint64},
  264. {"config_int",test_config_int},
  265. {"config_str",test_config_str},
  266. {"config_branches",test_config_branches},
  267. {"config_update_branches",test_config_update_branches},
  268. {"config_cachefiles",test_config_cachefiles},
  269. {"config_inodecalc",test_config_inodecalc},
  270. {"config_moveonenospc",test_config_moveonenospc},
  271. {"config_nfsopenhack",test_config_nfsopenhack},
  272. {"config_readdir",test_config_readdir},
  273. {"config_statfs",test_config_statfs},
  274. {"config_statfsignore",test_config_statfs_ignore},
  275. {"config_xattr",test_config_xattr},
  276. {"config",test_config},
  277. {NULL,NULL}
  278. };