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.

339 lines
8.3 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. }
  129. void
  130. test_config_cachefiles()
  131. {
  132. CacheFiles cf;
  133. TEST_CHECK(cf.from_string("libfuse") == 0);
  134. TEST_CHECK(cf.to_string() == "libfuse");
  135. TEST_CHECK(cf.from_string("off") == 0);
  136. TEST_CHECK(cf.to_string() == "off");
  137. TEST_CHECK(cf.from_string("partial") == 0);
  138. TEST_CHECK(cf.to_string() == "partial");
  139. TEST_CHECK(cf.from_string("full") == 0);
  140. TEST_CHECK(cf.to_string() == "full");
  141. TEST_CHECK(cf.from_string("auto-full") == 0);
  142. TEST_CHECK(cf.to_string() == "auto-full");
  143. TEST_CHECK(cf.from_string("foobar") == -EINVAL);
  144. }
  145. void
  146. test_config_inodecalc()
  147. {
  148. InodeCalc ic("passthrough");
  149. TEST_CHECK(ic.from_string("passthrough") == 0);
  150. TEST_CHECK(ic.to_string() == "passthrough");
  151. TEST_CHECK(ic.from_string("path-hash") == 0);
  152. TEST_CHECK(ic.to_string() == "path-hash");
  153. TEST_CHECK(ic.from_string("devino-hash") == 0);
  154. TEST_CHECK(ic.to_string() == "devino-hash");
  155. TEST_CHECK(ic.from_string("hybrid-hash") == 0);
  156. TEST_CHECK(ic.to_string() == "hybrid-hash");
  157. TEST_CHECK(ic.from_string("path-hash32") == 0);
  158. TEST_CHECK(ic.to_string() == "path-hash32");
  159. TEST_CHECK(ic.from_string("devino-hash32") == 0);
  160. TEST_CHECK(ic.to_string() == "devino-hash32");
  161. TEST_CHECK(ic.from_string("hybrid-hash32") == 0);
  162. TEST_CHECK(ic.to_string() == "hybrid-hash32");
  163. TEST_CHECK(ic.from_string("asdf") == -EINVAL);
  164. }
  165. void
  166. test_config_moveonenospc()
  167. {
  168. MoveOnENOSPC m(false);
  169. TEST_CHECK(m.to_string() == "false");
  170. TEST_CHECK(m.from_string("mfs") == 0);
  171. TEST_CHECK(m.to_string() == "mfs");
  172. TEST_CHECK(m.from_string("mspmfs") == 0);
  173. TEST_CHECK(m.to_string() == "mspmfs");
  174. TEST_CHECK(m.from_string("true") == 0);
  175. TEST_CHECK(m.to_string() == "mfs");
  176. TEST_CHECK(m.from_string("blah") == -EINVAL);
  177. }
  178. void
  179. test_config_nfsopenhack()
  180. {
  181. NFSOpenHack n;
  182. TEST_CHECK(n.from_string("off") == 0);
  183. TEST_CHECK(n.to_string() == "off");
  184. TEST_CHECK(n == NFSOpenHack::ENUM::OFF);
  185. TEST_CHECK(n.from_string("git") == 0);
  186. TEST_CHECK(n.to_string() == "git");
  187. TEST_CHECK(n == NFSOpenHack::ENUM::GIT);
  188. TEST_CHECK(n.from_string("all") == 0);
  189. TEST_CHECK(n.to_string() == "all");
  190. TEST_CHECK(n == NFSOpenHack::ENUM::ALL);
  191. }
  192. void
  193. test_config_readdir()
  194. {
  195. ReadDir r;
  196. TEST_CHECK(r.from_string("linux") == 0);
  197. TEST_CHECK(r.to_string() == "linux");
  198. TEST_CHECK(r == ReadDir::ENUM::LINUX);
  199. TEST_CHECK(r.from_string("posix") == 0);
  200. TEST_CHECK(r.to_string() == "posix");
  201. TEST_CHECK(r == ReadDir::ENUM::POSIX);
  202. }
  203. void
  204. test_config_statfs()
  205. {
  206. StatFS s;
  207. TEST_CHECK(s.from_string("base") == 0);
  208. TEST_CHECK(s.to_string() == "base");
  209. TEST_CHECK(s == StatFS::ENUM::BASE);
  210. TEST_CHECK(s.from_string("full") == 0);
  211. TEST_CHECK(s.to_string() == "full");
  212. TEST_CHECK(s == StatFS::ENUM::FULL);
  213. TEST_CHECK(s.from_string("asdf") == -EINVAL);
  214. }
  215. void
  216. test_config_statfs_ignore()
  217. {
  218. StatFSIgnore s;
  219. TEST_CHECK(s.from_string("none") == 0);
  220. TEST_CHECK(s.to_string() == "none");
  221. TEST_CHECK(s == StatFSIgnore::ENUM::NONE);
  222. TEST_CHECK(s.from_string("ro") == 0);
  223. TEST_CHECK(s.to_string() == "ro");
  224. TEST_CHECK(s == StatFSIgnore::ENUM::RO);
  225. TEST_CHECK(s.from_string("nc") == 0);
  226. TEST_CHECK(s.to_string() == "nc");
  227. TEST_CHECK(s == StatFSIgnore::ENUM::NC);
  228. TEST_CHECK(s.from_string("asdf") == -EINVAL);
  229. }
  230. void
  231. test_config_xattr()
  232. {
  233. XAttr x;
  234. TEST_CHECK(x.from_string("passthrough") == 0);
  235. TEST_CHECK(x.to_string() == "passthrough");
  236. TEST_CHECK(x == XAttr::ENUM::PASSTHROUGH);
  237. TEST_CHECK(x.from_string("noattr") == 0);
  238. TEST_CHECK(x.to_string() == "noattr");
  239. TEST_CHECK(x == XAttr::ENUM::NOATTR);
  240. TEST_CHECK(x.from_string("nosys") == 0);
  241. TEST_CHECK(x.to_string() == "nosys");
  242. TEST_CHECK(x == XAttr::ENUM::NOSYS);
  243. TEST_CHECK(x.from_string("asdf") == -EINVAL);
  244. }
  245. void
  246. test_config()
  247. {
  248. Config cfg;
  249. TEST_CHECK(cfg.set_raw("async_read","true") == 0);
  250. }
  251. TEST_LIST =
  252. {
  253. {"nop",test_nop},
  254. {"config_bool",test_config_bool},
  255. {"config_uint64",test_config_uint64},
  256. {"config_int",test_config_int},
  257. {"config_str",test_config_str},
  258. {"config_branches",test_config_branches},
  259. {"config_update_branches",test_config_update_branches},
  260. {"config_cachefiles",test_config_cachefiles},
  261. {"config_inodecalc",test_config_inodecalc},
  262. {"config_moveonenospc",test_config_moveonenospc},
  263. {"config_nfsopenhack",test_config_nfsopenhack},
  264. {"config_readdir",test_config_readdir},
  265. {"config_statfs",test_config_statfs},
  266. {"config_statfsignore",test_config_statfs_ignore},
  267. {"config_xattr",test_config_xattr},
  268. {"config",test_config},
  269. {NULL,NULL}
  270. };