test_routerset.c 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229
  1. /* Copyright (c) 2014-2017, The Tor Project, Inc. */
  2. /* See LICENSE for licensing information */
  3. #define ROUTERSET_PRIVATE
  4. #include "or.h"
  5. #include "geoip.h"
  6. #include "routerset.h"
  7. #include "routerparse.h"
  8. #include "policies.h"
  9. #include "nodelist.h"
  10. #include "node_st.h"
  11. #include "routerinfo_st.h"
  12. #include "routerstatus_st.h"
  13. #include "test.h"
  14. #define NS_MODULE routerset
  15. #define NS_SUBMODULE routerset_new
  16. /*
  17. * Functional (blackbox) test to determine that each member of the routerset
  18. * is non-NULL
  19. */
  20. static void
  21. NS(test_main)(void *arg)
  22. {
  23. routerset_t *rs;
  24. (void)arg;
  25. rs = routerset_new();
  26. tt_ptr_op(rs, OP_NE, NULL);
  27. tt_ptr_op(rs->list, OP_NE, NULL);
  28. tt_ptr_op(rs->names, OP_NE, NULL);
  29. tt_ptr_op(rs->digests, OP_NE, NULL);
  30. tt_ptr_op(rs->policies, OP_NE, NULL);
  31. tt_ptr_op(rs->country_names, OP_NE, NULL);
  32. done:
  33. routerset_free(rs);
  34. }
  35. #undef NS_SUBMODULE
  36. #define NS_SUBMODULE routerset_get_countryname
  37. /*
  38. * Functional test to strip the braces from a "{xx}" country code string.
  39. */
  40. static void
  41. NS(test_main)(void *arg)
  42. {
  43. const char *input;
  44. char *name;
  45. (void)arg;
  46. /* strlen(c) < 4 */
  47. input = "xxx";
  48. name = routerset_get_countryname(input);
  49. tt_ptr_op(name, OP_EQ, NULL);
  50. tor_free(name);
  51. /* c[0] != '{' */
  52. input = "xxx}";
  53. name = routerset_get_countryname(input);
  54. tt_ptr_op(name, OP_EQ, NULL);
  55. tor_free(name);
  56. /* c[3] != '}' */
  57. input = "{xxx";
  58. name = routerset_get_countryname(input);
  59. tt_ptr_op(name, OP_EQ, NULL);
  60. tor_free(name);
  61. /* tor_strlower */
  62. input = "{XX}";
  63. name = routerset_get_countryname(input);
  64. tt_str_op(name, OP_EQ, "xx");
  65. tor_free(name);
  66. input = "{xx}";
  67. name = routerset_get_countryname(input);
  68. tt_str_op(name, OP_EQ, "xx");
  69. done:
  70. tor_free(name);
  71. }
  72. #undef NS_SUBMODULE
  73. #define NS_SUBMODULE ASPECT(routerset_refresh_counties, geoip_not_loaded)
  74. /*
  75. * Structural (whitebox) test for routerset_refresh_counties, when the GeoIP DB
  76. * is not loaded.
  77. */
  78. NS_DECL(int, geoip_is_loaded, (sa_family_t family));
  79. NS_DECL(int, geoip_get_n_countries, (void));
  80. static void
  81. NS(test_main)(void *arg)
  82. {
  83. routerset_t *set = routerset_new();
  84. (void)arg;
  85. NS_MOCK(geoip_is_loaded);
  86. NS_MOCK(geoip_get_n_countries);
  87. routerset_refresh_countries(set);
  88. tt_ptr_op(set->countries, OP_EQ, NULL);
  89. tt_int_op(set->n_countries, OP_EQ, 0);
  90. tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
  91. tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 0);
  92. done:
  93. NS_UNMOCK(geoip_is_loaded);
  94. NS_UNMOCK(geoip_get_n_countries);
  95. routerset_free(set);
  96. }
  97. static int
  98. NS(geoip_is_loaded)(sa_family_t family)
  99. {
  100. (void)family;
  101. CALLED(geoip_is_loaded)++;
  102. return 0;
  103. }
  104. static int
  105. NS(geoip_get_n_countries)(void)
  106. {
  107. CALLED(geoip_get_n_countries)++;
  108. return 0;
  109. }
  110. #undef NS_SUBMODULE
  111. #define NS_SUBMODULE ASPECT(routerset_refresh_counties, no_countries)
  112. /*
  113. * Structural test for routerset_refresh_counties, when there are no countries.
  114. */
  115. NS_DECL(int, geoip_is_loaded, (sa_family_t family));
  116. NS_DECL(int, geoip_get_n_countries, (void));
  117. NS_DECL(country_t, geoip_get_country, (const char *country));
  118. static void
  119. NS(test_main)(void *arg)
  120. {
  121. routerset_t *set = routerset_new();
  122. (void)arg;
  123. NS_MOCK(geoip_is_loaded);
  124. NS_MOCK(geoip_get_n_countries);
  125. NS_MOCK(geoip_get_country);
  126. routerset_refresh_countries(set);
  127. tt_ptr_op(set->countries, OP_NE, NULL);
  128. tt_int_op(set->n_countries, OP_EQ, 1);
  129. tt_int_op((unsigned int)(*set->countries), OP_EQ, 0);
  130. tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
  131. tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1);
  132. tt_int_op(CALLED(geoip_get_country), OP_EQ, 0);
  133. done:
  134. NS_UNMOCK(geoip_is_loaded);
  135. NS_UNMOCK(geoip_get_n_countries);
  136. NS_UNMOCK(geoip_get_country);
  137. routerset_free(set);
  138. }
  139. static int
  140. NS(geoip_is_loaded)(sa_family_t family)
  141. {
  142. (void)family;
  143. CALLED(geoip_is_loaded)++;
  144. return 1;
  145. }
  146. static int
  147. NS(geoip_get_n_countries)(void)
  148. {
  149. CALLED(geoip_get_n_countries)++;
  150. return 1;
  151. }
  152. static country_t
  153. NS(geoip_get_country)(const char *countrycode)
  154. {
  155. (void)countrycode;
  156. CALLED(geoip_get_country)++;
  157. return 1;
  158. }
  159. #undef NS_SUBMODULE
  160. #define NS_SUBMODULE ASPECT(routerset_refresh_counties, one_valid_country)
  161. /*
  162. * Structural test for routerset_refresh_counties, with one valid country.
  163. */
  164. NS_DECL(int, geoip_is_loaded, (sa_family_t family));
  165. NS_DECL(int, geoip_get_n_countries, (void));
  166. NS_DECL(country_t, geoip_get_country, (const char *country));
  167. static void
  168. NS(test_main)(void *arg)
  169. {
  170. routerset_t *set = routerset_new();
  171. (void)arg;
  172. NS_MOCK(geoip_is_loaded);
  173. NS_MOCK(geoip_get_n_countries);
  174. NS_MOCK(geoip_get_country);
  175. smartlist_add(set->country_names, tor_strndup("foo", 3));
  176. routerset_refresh_countries(set);
  177. tt_ptr_op(set->countries, OP_NE, NULL);
  178. tt_int_op(set->n_countries, OP_EQ, 2);
  179. tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
  180. tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1);
  181. tt_int_op(CALLED(geoip_get_country), OP_EQ, 1);
  182. tt_int_op((unsigned int)(*set->countries), OP_NE, 0);
  183. done:
  184. NS_UNMOCK(geoip_is_loaded);
  185. NS_UNMOCK(geoip_get_n_countries);
  186. NS_UNMOCK(geoip_get_country);
  187. routerset_free(set);
  188. }
  189. static int
  190. NS(geoip_is_loaded)(sa_family_t family)
  191. {
  192. (void)family;
  193. CALLED(geoip_is_loaded)++;
  194. return 1;
  195. }
  196. static int
  197. NS(geoip_get_n_countries)(void)
  198. {
  199. CALLED(geoip_get_n_countries)++;
  200. return 2;
  201. }
  202. static country_t
  203. NS(geoip_get_country)(const char *countrycode)
  204. {
  205. (void)countrycode;
  206. CALLED(geoip_get_country)++;
  207. return 1;
  208. }
  209. #undef NS_SUBMODULE
  210. #define NS_SUBMODULE ASPECT(routerset_refresh_counties, one_invalid_country)
  211. /*
  212. * Structural test for routerset_refresh_counties, with one invalid
  213. * country code..
  214. */
  215. NS_DECL(int, geoip_is_loaded, (sa_family_t family));
  216. NS_DECL(int, geoip_get_n_countries, (void));
  217. NS_DECL(country_t, geoip_get_country, (const char *country));
  218. static void
  219. NS(test_main)(void *arg)
  220. {
  221. routerset_t *set = routerset_new();
  222. (void)arg;
  223. NS_MOCK(geoip_is_loaded);
  224. NS_MOCK(geoip_get_n_countries);
  225. NS_MOCK(geoip_get_country);
  226. smartlist_add(set->country_names, tor_strndup("foo", 3));
  227. routerset_refresh_countries(set);
  228. tt_ptr_op(set->countries, OP_NE, NULL);
  229. tt_int_op(set->n_countries, OP_EQ, 2);
  230. tt_int_op(CALLED(geoip_is_loaded), OP_EQ, 1);
  231. tt_int_op(CALLED(geoip_get_n_countries), OP_EQ, 1);
  232. tt_int_op(CALLED(geoip_get_country), OP_EQ, 1);
  233. tt_int_op((unsigned int)(*set->countries), OP_EQ, 0);
  234. done:
  235. NS_UNMOCK(geoip_is_loaded);
  236. NS_UNMOCK(geoip_get_n_countries);
  237. NS_UNMOCK(geoip_get_country);
  238. routerset_free(set);
  239. }
  240. static int
  241. NS(geoip_is_loaded)(sa_family_t family)
  242. {
  243. (void)family;
  244. CALLED(geoip_is_loaded)++;
  245. return 1;
  246. }
  247. static int
  248. NS(geoip_get_n_countries)(void)
  249. {
  250. CALLED(geoip_get_n_countries)++;
  251. return 2;
  252. }
  253. static country_t
  254. NS(geoip_get_country)(const char *countrycode)
  255. {
  256. (void)countrycode;
  257. CALLED(geoip_get_country)++;
  258. return -1;
  259. }
  260. #undef NS_SUBMODULE
  261. #define NS_SUBMODULE ASPECT(routerset_parse, malformed)
  262. /*
  263. * Functional test, with a malformed string to parse.
  264. */
  265. static void
  266. NS(test_main)(void *arg)
  267. {
  268. routerset_t *set = routerset_new();
  269. const char *s = "_";
  270. int r;
  271. (void)arg;
  272. r = routerset_parse(set, s, "");
  273. tt_int_op(r, OP_EQ, -1);
  274. done:
  275. routerset_free(set);
  276. }
  277. #undef NS_SUBMODULE
  278. #define NS_SUBMODULE ASPECT(routerset_parse, valid_hexdigest)
  279. /*
  280. * Functional test for routerset_parse, that routerset_parse returns 0
  281. * on a valid hexdigest entry.
  282. */
  283. static void
  284. NS(test_main)(void *arg)
  285. {
  286. routerset_t *set;
  287. const char *s;
  288. int r;
  289. (void)arg;
  290. set = routerset_new();
  291. s = "$0000000000000000000000000000000000000000";
  292. r = routerset_parse(set, s, "");
  293. tt_int_op(r, OP_EQ, 0);
  294. tt_int_op(digestmap_isempty(set->digests), OP_NE, 1);
  295. done:
  296. routerset_free(set);
  297. }
  298. #undef NS_SUBMODULE
  299. #define NS_SUBMODULE ASPECT(routerset_parse, valid_nickname)
  300. /*
  301. * Functional test for routerset_parse, when given a valid nickname as input.
  302. */
  303. static void
  304. NS(test_main)(void *arg)
  305. {
  306. routerset_t *set;
  307. const char *s;
  308. int r;
  309. (void)arg;
  310. set = routerset_new();
  311. s = "fred";
  312. r = routerset_parse(set, s, "");
  313. tt_int_op(r, OP_EQ, 0);
  314. tt_int_op(strmap_isempty(set->names), OP_NE, 1);
  315. done:
  316. routerset_free(set);
  317. }
  318. #undef NS_SUBMODULE
  319. #define NS_SUBMODULE ASPECT(routerset_parse, get_countryname)
  320. /*
  321. * Functional test for routerset_parse, when given a valid countryname.
  322. */
  323. static void
  324. NS(test_main)(void *arg)
  325. {
  326. routerset_t *set;
  327. const char *s;
  328. int r;
  329. (void)arg;
  330. set = routerset_new();
  331. s = "{cc}";
  332. r = routerset_parse(set, s, "");
  333. tt_int_op(r, OP_EQ, 0);
  334. tt_int_op(smartlist_len(set->country_names), OP_NE, 0);
  335. done:
  336. routerset_free(set);
  337. }
  338. #undef NS_SUBMODULE
  339. #define NS_SUBMODULE ASPECT(routerset_parse, policy_wildcard)
  340. /*
  341. * Structural test for routerset_parse, when given a valid wildcard policy.
  342. */
  343. NS_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
  344. (const char *s, int assume_action, int *malformed_list));
  345. static addr_policy_t *NS(mock_addr_policy);
  346. static void
  347. NS(test_main)(void *arg)
  348. {
  349. routerset_t *set;
  350. const char *s;
  351. int r;
  352. (void)arg;
  353. NS_MOCK(router_parse_addr_policy_item_from_string);
  354. NS(mock_addr_policy) = tor_malloc_zero(sizeof(addr_policy_t));
  355. set = routerset_new();
  356. s = "*";
  357. r = routerset_parse(set, s, "");
  358. tt_int_op(r, OP_EQ, 0);
  359. tt_int_op(smartlist_len(set->policies), OP_NE, 0);
  360. tt_int_op(CALLED(router_parse_addr_policy_item_from_string), OP_EQ, 1);
  361. done:
  362. routerset_free(set);
  363. }
  364. addr_policy_t *
  365. NS(router_parse_addr_policy_item_from_string)(const char *s,
  366. int assume_action,
  367. int *malformed_list)
  368. {
  369. (void)s;
  370. (void)assume_action;
  371. (void)malformed_list;
  372. CALLED(router_parse_addr_policy_item_from_string)++;
  373. return NS(mock_addr_policy);
  374. }
  375. #undef NS_SUBMODULE
  376. #define NS_SUBMODULE ASPECT(routerset_parse, policy_ipv4)
  377. /*
  378. * Structural test for routerset_parse, when given a valid IPv4 address
  379. * literal policy.
  380. */
  381. NS_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
  382. (const char *s, int assume_action, int *bogus));
  383. static addr_policy_t *NS(mock_addr_policy);
  384. static void
  385. NS(test_main)(void *arg)
  386. {
  387. routerset_t *set;
  388. const char *s;
  389. int r;
  390. (void)arg;
  391. NS_MOCK(router_parse_addr_policy_item_from_string);
  392. NS(mock_addr_policy) = tor_malloc_zero(sizeof(addr_policy_t));
  393. set = routerset_new();
  394. s = "127.0.0.1";
  395. r = routerset_parse(set, s, "");
  396. tt_int_op(r, OP_EQ, 0);
  397. tt_int_op(smartlist_len(set->policies), OP_NE, 0);
  398. tt_int_op(CALLED(router_parse_addr_policy_item_from_string), OP_EQ, 1);
  399. done:
  400. routerset_free(set);
  401. }
  402. addr_policy_t *
  403. NS(router_parse_addr_policy_item_from_string)(const char *s, int assume_action,
  404. int *bogus)
  405. {
  406. (void)s;
  407. (void)assume_action;
  408. CALLED(router_parse_addr_policy_item_from_string)++;
  409. *bogus = 0;
  410. return NS(mock_addr_policy);
  411. }
  412. #undef NS_SUBMODULE
  413. #define NS_SUBMODULE ASPECT(routerset_parse, policy_ipv6)
  414. /*
  415. * Structural test for routerset_parse, when given a valid IPv6 address
  416. * literal policy.
  417. */
  418. NS_DECL(addr_policy_t *, router_parse_addr_policy_item_from_string,
  419. (const char *s, int assume_action, int *bad));
  420. static addr_policy_t *NS(mock_addr_policy);
  421. static void
  422. NS(test_main)(void *arg)
  423. {
  424. routerset_t *set;
  425. const char *s;
  426. int r;
  427. (void)arg;
  428. NS_MOCK(router_parse_addr_policy_item_from_string);
  429. NS(mock_addr_policy) = tor_malloc_zero(sizeof(addr_policy_t));
  430. set = routerset_new();
  431. s = "::1";
  432. r = routerset_parse(set, s, "");
  433. tt_int_op(r, OP_EQ, 0);
  434. tt_int_op(smartlist_len(set->policies), OP_NE, 0);
  435. tt_int_op(CALLED(router_parse_addr_policy_item_from_string), OP_EQ, 1);
  436. done:
  437. routerset_free(set);
  438. }
  439. addr_policy_t *
  440. NS(router_parse_addr_policy_item_from_string)(const char *s,
  441. int assume_action, int *bad)
  442. {
  443. (void)s;
  444. (void)assume_action;
  445. CALLED(router_parse_addr_policy_item_from_string)++;
  446. *bad = 0;
  447. return NS(mock_addr_policy);
  448. }
  449. #undef NS_SUBMODULE
  450. #define NS_SUBMODULE ASPECT(routerset_union, source_bad)
  451. /*
  452. * Structural test for routerset_union, when given a bad source argument.
  453. */
  454. NS_DECL(smartlist_t *, smartlist_new, (void));
  455. static void
  456. NS(test_main)(void *arg)
  457. {
  458. routerset_t *set, *bad_set;
  459. (void)arg;
  460. set = routerset_new();
  461. bad_set = routerset_new();
  462. smartlist_free(bad_set->list);
  463. bad_set->list = NULL;
  464. NS_MOCK(smartlist_new);
  465. routerset_union(set, NULL);
  466. tt_int_op(CALLED(smartlist_new), OP_EQ, 0);
  467. routerset_union(set, bad_set);
  468. tt_int_op(CALLED(smartlist_new), OP_EQ, 0);
  469. done:
  470. NS_UNMOCK(smartlist_new);
  471. routerset_free(set);
  472. /* Just recreate list, so we can simply use routerset_free. */
  473. bad_set->list = smartlist_new();
  474. routerset_free(bad_set);
  475. }
  476. static smartlist_t *
  477. NS(smartlist_new)(void)
  478. {
  479. CALLED(smartlist_new)++;
  480. return NULL;
  481. }
  482. #undef NS_SUBMODULE
  483. #define NS_SUBMODULE ASPECT(routerset_union, one)
  484. /*
  485. * Functional test for routerset_union.
  486. */
  487. static void
  488. NS(test_main)(void *arg)
  489. {
  490. routerset_t *src = routerset_new();
  491. routerset_t *tgt;
  492. (void)arg;
  493. tgt = routerset_new();
  494. smartlist_add_strdup(src->list, "{xx}");
  495. routerset_union(tgt, src);
  496. tt_int_op(smartlist_len(tgt->list), OP_NE, 0);
  497. done:
  498. routerset_free(src);
  499. routerset_free(tgt);
  500. }
  501. #undef NS_SUBMODULE
  502. #define NS_SUBMODULE routerset_is_list
  503. /*
  504. * Functional tests for routerset_is_list.
  505. */
  506. static void
  507. NS(test_main)(void *arg)
  508. {
  509. routerset_t *set;
  510. addr_policy_t *policy;
  511. int is_list;
  512. (void)arg;
  513. /* len(set->country_names) == 0, len(set->policies) == 0 */
  514. set = routerset_new();
  515. is_list = routerset_is_list(set);
  516. routerset_free(set);
  517. set = NULL;
  518. tt_int_op(is_list, OP_NE, 0);
  519. /* len(set->country_names) != 0, len(set->policies) == 0 */
  520. set = routerset_new();
  521. smartlist_add(set->country_names, tor_strndup("foo", 3));
  522. is_list = routerset_is_list(set);
  523. routerset_free(set);
  524. set = NULL;
  525. tt_int_op(is_list, OP_EQ, 0);
  526. /* len(set->country_names) == 0, len(set->policies) != 0 */
  527. set = routerset_new();
  528. policy = tor_malloc_zero(sizeof(addr_policy_t));
  529. smartlist_add(set->policies, (void *)policy);
  530. is_list = routerset_is_list(set);
  531. routerset_free(set);
  532. set = NULL;
  533. tt_int_op(is_list, OP_EQ, 0);
  534. /* len(set->country_names) != 0, len(set->policies) != 0 */
  535. set = routerset_new();
  536. smartlist_add(set->country_names, tor_strndup("foo", 3));
  537. policy = tor_malloc_zero(sizeof(addr_policy_t));
  538. smartlist_add(set->policies, (void *)policy);
  539. is_list = routerset_is_list(set);
  540. routerset_free(set);
  541. set = NULL;
  542. tt_int_op(is_list, OP_EQ, 0);
  543. done:
  544. ;
  545. }
  546. #undef NS_SUBMODULE
  547. #define NS_SUBMODULE routerset_needs_geoip
  548. /*
  549. * Functional tests for routerset_needs_geoip.
  550. */
  551. static void
  552. NS(test_main)(void *arg)
  553. {
  554. routerset_t *set;
  555. int needs_geoip;
  556. (void)arg;
  557. set = NULL;
  558. needs_geoip = routerset_needs_geoip(set);
  559. tt_int_op(needs_geoip, OP_EQ, 0);
  560. set = routerset_new();
  561. needs_geoip = routerset_needs_geoip(set);
  562. routerset_free(set);
  563. tt_int_op(needs_geoip, OP_EQ, 0);
  564. set = NULL;
  565. set = routerset_new();
  566. smartlist_add(set->country_names, tor_strndup("xx", 2));
  567. needs_geoip = routerset_needs_geoip(set);
  568. routerset_free(set);
  569. set = NULL;
  570. tt_int_op(needs_geoip, OP_NE, 0);
  571. done:
  572. ;
  573. }
  574. #undef NS_SUBMODULE
  575. #define NS_SUBMODULE routerset_is_empty
  576. /*
  577. * Functional tests for routerset_is_empty.
  578. */
  579. static void
  580. NS(test_main)(void *arg)
  581. {
  582. routerset_t *set = NULL;
  583. int is_empty;
  584. (void)arg;
  585. is_empty = routerset_is_empty(set);
  586. tt_int_op(is_empty, OP_NE, 0);
  587. set = routerset_new();
  588. is_empty = routerset_is_empty(set);
  589. routerset_free(set);
  590. set = NULL;
  591. tt_int_op(is_empty, OP_NE, 0);
  592. set = routerset_new();
  593. smartlist_add_strdup(set->list, "{xx}");
  594. is_empty = routerset_is_empty(set);
  595. routerset_free(set);
  596. set = NULL;
  597. tt_int_op(is_empty, OP_EQ, 0);
  598. done:
  599. ;
  600. }
  601. #undef NS_SUBMODULE
  602. #define NS_SUBMODULE ASPECT(routerset_contains, null_set_or_null_set_list)
  603. /*
  604. * Functional test for routerset_contains, when given a NULL set or the
  605. * set has a NULL list.
  606. */
  607. static void
  608. NS(test_main)(void *arg)
  609. {
  610. routerset_t *set = NULL;
  611. int contains;
  612. (void)arg;
  613. contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
  614. tt_int_op(contains, OP_EQ, 0);
  615. set = tor_malloc_zero(sizeof(routerset_t));
  616. set->list = NULL;
  617. contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
  618. tor_free(set);
  619. tt_int_op(contains, OP_EQ, 0);
  620. done:
  621. ;
  622. }
  623. #undef NS_SUBMODULE
  624. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_null_nickname)
  625. /*
  626. * Functional test for routerset_contains, when given a valid routerset but a
  627. * NULL nickname.
  628. */
  629. static void
  630. NS(test_main)(void *arg)
  631. {
  632. routerset_t *set = routerset_new();
  633. char *nickname = NULL;
  634. int contains;
  635. (void)arg;
  636. contains = routerset_contains(set, NULL, 0, nickname, NULL, 0);
  637. routerset_free(set);
  638. tt_int_op(contains, OP_EQ, 0);
  639. done:
  640. ;
  641. }
  642. #undef NS_SUBMODULE
  643. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_nickname)
  644. /*
  645. * Functional test for routerset_contains, when given a valid routerset
  646. * and the nickname is in the routerset.
  647. */
  648. static void
  649. NS(test_main)(void *arg)
  650. {
  651. routerset_t *set = routerset_new();
  652. const char *nickname;
  653. int contains;
  654. (void)arg;
  655. nickname = "Foo"; /* This tests the lowercase comparison as well. */
  656. strmap_set_lc(set->names, nickname, (void *)1);
  657. contains = routerset_contains(set, NULL, 0, nickname, NULL, 0);
  658. routerset_free(set);
  659. tt_int_op(contains, OP_EQ, 4);
  660. done:
  661. ;
  662. }
  663. #undef NS_SUBMODULE
  664. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_no_nickname)
  665. /*
  666. * Functional test for routerset_contains, when given a valid routerset
  667. * and the nickname is not in the routerset.
  668. */
  669. static void
  670. NS(test_main)(void *arg)
  671. {
  672. routerset_t *set = routerset_new();
  673. int contains;
  674. (void)arg;
  675. strmap_set_lc(set->names, "bar", (void *)1);
  676. contains = routerset_contains(set, NULL, 0, "foo", NULL, 0);
  677. routerset_free(set);
  678. tt_int_op(contains, OP_EQ, 0);
  679. done:
  680. ;
  681. }
  682. #undef NS_SUBMODULE
  683. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_digest)
  684. /*
  685. * Functional test for routerset_contains, when given a valid routerset
  686. * and the digest is contained in the routerset.
  687. */
  688. static void
  689. NS(test_main)(void *arg)
  690. {
  691. routerset_t *set = routerset_new();
  692. int contains;
  693. uint8_t foo[20] = { 2, 3, 4 };
  694. (void)arg;
  695. digestmap_set(set->digests, (const char*)foo, (void *)1);
  696. contains = routerset_contains(set, NULL, 0, NULL, (const char*)foo, 0);
  697. routerset_free(set);
  698. tt_int_op(contains, OP_EQ, 4);
  699. done:
  700. ;
  701. }
  702. #undef NS_SUBMODULE
  703. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_no_digest)
  704. /*
  705. * Functional test for routerset_contains, when given a valid routerset
  706. * and the digest is not contained in the routerset.
  707. */
  708. static void
  709. NS(test_main)(void *arg)
  710. {
  711. routerset_t *set = routerset_new();
  712. int contains;
  713. uint8_t bar[20] = { 9, 10, 11, 55 };
  714. uint8_t foo[20] = { 1, 2, 3, 4};
  715. (void)arg;
  716. digestmap_set(set->digests, (const char*)bar, (void *)1);
  717. contains = routerset_contains(set, NULL, 0, NULL, (const char*)foo, 0);
  718. routerset_free(set);
  719. tt_int_op(contains, OP_EQ, 0);
  720. done:
  721. ;
  722. }
  723. #undef NS_SUBMODULE
  724. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_null_digest)
  725. /*
  726. * Functional test for routerset_contains, when given a valid routerset
  727. * and the digest is NULL.
  728. */
  729. static void
  730. NS(test_main)(void *arg)
  731. {
  732. routerset_t *set = routerset_new();
  733. int contains;
  734. uint8_t bar[20] = { 9, 10, 11, 55 };
  735. (void)arg;
  736. digestmap_set(set->digests, (const char*)bar, (void *)1);
  737. contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
  738. routerset_free(set);
  739. tt_int_op(contains, OP_EQ, 0);
  740. done:
  741. ;
  742. }
  743. #undef NS_SUBMODULE
  744. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_addr)
  745. /*
  746. * Structural test for routerset_contains, when given a valid routerset
  747. * and the address is rejected by policy.
  748. */
  749. NS_DECL(addr_policy_result_t, compare_tor_addr_to_addr_policy,
  750. (const tor_addr_t *addr, uint16_t port, const smartlist_t *policy));
  751. static tor_addr_t MOCK_TOR_ADDR;
  752. #define MOCK_TOR_ADDR_PTR (&MOCK_TOR_ADDR)
  753. static void
  754. NS(test_main)(void *arg)
  755. {
  756. routerset_t *set = routerset_new();
  757. tor_addr_t *addr = MOCK_TOR_ADDR_PTR;
  758. int contains;
  759. (void)arg;
  760. NS_MOCK(compare_tor_addr_to_addr_policy);
  761. contains = routerset_contains(set, addr, 0, NULL, NULL, 0);
  762. routerset_free(set);
  763. tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
  764. tt_int_op(contains, OP_EQ, 3);
  765. done:
  766. ;
  767. }
  768. addr_policy_result_t
  769. NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
  770. const smartlist_t *policy)
  771. {
  772. (void)port;
  773. (void)policy;
  774. CALLED(compare_tor_addr_to_addr_policy)++;
  775. tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
  776. return ADDR_POLICY_REJECTED;
  777. done:
  778. return 0;
  779. }
  780. #undef NS_SUBMODULE
  781. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_no_addr)
  782. /*
  783. * Structural test for routerset_contains, when given a valid routerset
  784. * and the address is not rejected by policy.
  785. */
  786. NS_DECL(addr_policy_result_t, compare_tor_addr_to_addr_policy,
  787. (const tor_addr_t *addr, uint16_t port, const smartlist_t *policy));
  788. static void
  789. NS(test_main)(void *arg)
  790. {
  791. routerset_t *set = routerset_new();
  792. tor_addr_t *addr = MOCK_TOR_ADDR_PTR;
  793. int contains;
  794. (void)arg;
  795. NS_MOCK(compare_tor_addr_to_addr_policy);
  796. contains = routerset_contains(set, addr, 0, NULL, NULL, 0);
  797. routerset_free(set);
  798. tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
  799. tt_int_op(contains, OP_EQ, 0);
  800. done:
  801. ;
  802. }
  803. addr_policy_result_t
  804. NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
  805. const smartlist_t *policy)
  806. {
  807. (void)port;
  808. (void)policy;
  809. CALLED(compare_tor_addr_to_addr_policy)++;
  810. tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
  811. return ADDR_POLICY_ACCEPTED;
  812. done:
  813. return 0;
  814. }
  815. #undef NS_SUBMODULE
  816. #define NS_SUBMODULE ASPECT(routerset_contains, set_and_null_addr)
  817. /*
  818. * Structural test for routerset_contains, when given a valid routerset
  819. * and the address is NULL.
  820. */
  821. NS_DECL(addr_policy_result_t, compare_tor_addr_to_addr_policy,
  822. (const tor_addr_t *addr, uint16_t port, const smartlist_t *policy));
  823. static void
  824. NS(test_main)(void *arg)
  825. {
  826. routerset_t *set = routerset_new();
  827. int contains;
  828. (void)arg;
  829. NS_MOCK(compare_tor_addr_to_addr_policy);
  830. contains = routerset_contains(set, NULL, 0, NULL, NULL, 0);
  831. routerset_free(set);
  832. tt_int_op(contains, OP_EQ, 0);
  833. done:
  834. ;
  835. }
  836. addr_policy_result_t
  837. NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
  838. const smartlist_t *policy)
  839. {
  840. (void)port;
  841. (void)policy;
  842. CALLED(compare_tor_addr_to_addr_policy)++;
  843. tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
  844. return ADDR_POLICY_ACCEPTED;
  845. done:
  846. return 0;
  847. }
  848. #undef NS_SUBMODULE
  849. #define NS_SUBMODULE ASPECT(routerset_contains, countries_no_geoip)
  850. /*
  851. * Structural test for routerset_contains, when there is no matching country
  852. * for the address.
  853. */
  854. NS_DECL(addr_policy_result_t, compare_tor_addr_to_addr_policy,
  855. (const tor_addr_t *addr, uint16_t port, const smartlist_t *policy));
  856. NS_DECL(int, geoip_get_country_by_addr, (const tor_addr_t *addr));
  857. static void
  858. NS(test_main)(void *arg)
  859. {
  860. routerset_t *set = routerset_new();
  861. int contains = 1;
  862. (void)arg;
  863. NS_MOCK(compare_tor_addr_to_addr_policy);
  864. NS_MOCK(geoip_get_country_by_addr);
  865. set->countries = bitarray_init_zero(1);
  866. bitarray_set(set->countries, 1);
  867. contains = routerset_contains(set, MOCK_TOR_ADDR_PTR, 0, NULL, NULL, -1);
  868. routerset_free(set);
  869. tt_int_op(contains, OP_EQ, 0);
  870. tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
  871. tt_int_op(CALLED(geoip_get_country_by_addr), OP_EQ, 1);
  872. done:
  873. ;
  874. }
  875. addr_policy_result_t
  876. NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
  877. const smartlist_t *policy)
  878. {
  879. (void)port;
  880. (void)policy;
  881. CALLED(compare_tor_addr_to_addr_policy)++;
  882. tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
  883. done:
  884. return ADDR_POLICY_ACCEPTED;
  885. }
  886. int
  887. NS(geoip_get_country_by_addr)(const tor_addr_t *addr)
  888. {
  889. CALLED(geoip_get_country_by_addr)++;
  890. tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
  891. done:
  892. return -1;
  893. }
  894. #undef NS_SUBMODULE
  895. #define NS_SUBMODULE ASPECT(routerset_contains, countries_geoip)
  896. /*
  897. * Structural test for routerset_contains, when there a matching country
  898. * for the address.
  899. */
  900. NS_DECL(addr_policy_result_t, compare_tor_addr_to_addr_policy,
  901. (const tor_addr_t *addr, uint16_t port, const smartlist_t *policy));
  902. NS_DECL(int, geoip_get_country_by_addr, (const tor_addr_t *addr));
  903. static void
  904. NS(test_main)(void *arg)
  905. {
  906. routerset_t *set = routerset_new();
  907. int contains = 1;
  908. (void)arg;
  909. NS_MOCK(compare_tor_addr_to_addr_policy);
  910. NS_MOCK(geoip_get_country_by_addr);
  911. set->n_countries = 2;
  912. set->countries = bitarray_init_zero(1);
  913. bitarray_set(set->countries, 1);
  914. contains = routerset_contains(set, MOCK_TOR_ADDR_PTR, 0, NULL, NULL, -1);
  915. routerset_free(set);
  916. tt_int_op(contains, OP_EQ, 2);
  917. tt_int_op(CALLED(compare_tor_addr_to_addr_policy), OP_EQ, 1);
  918. tt_int_op(CALLED(geoip_get_country_by_addr), OP_EQ, 1);
  919. done:
  920. ;
  921. }
  922. addr_policy_result_t
  923. NS(compare_tor_addr_to_addr_policy)(const tor_addr_t *addr, uint16_t port,
  924. const smartlist_t *policy)
  925. {
  926. (void)port;
  927. (void)policy;
  928. CALLED(compare_tor_addr_to_addr_policy)++;
  929. tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
  930. done:
  931. return ADDR_POLICY_ACCEPTED;
  932. }
  933. int
  934. NS(geoip_get_country_by_addr)(const tor_addr_t *addr)
  935. {
  936. CALLED(geoip_get_country_by_addr)++;
  937. tt_ptr_op(addr, OP_EQ, MOCK_TOR_ADDR_PTR);
  938. done:
  939. return 1;
  940. }
  941. #undef NS_SUBMODULE
  942. #define NS_SUBMODULE ASPECT(routerset_add_unknown_ccs, only_flag_and_no_ccs)
  943. /*
  944. * Functional test for routerset_add_unknown_ccs, where only_if_some_cc_set
  945. * is set and there are no country names.
  946. */
  947. static void
  948. NS(test_main)(void *arg)
  949. {
  950. routerset_t *set = routerset_new();
  951. routerset_t **setp = &set;
  952. int r;
  953. (void)arg;
  954. r = routerset_add_unknown_ccs(setp, 1);
  955. tt_int_op(r, OP_EQ, 0);
  956. done:
  957. routerset_free(set);
  958. }
  959. #undef NS_SUBMODULE
  960. #define NS_SUBMODULE ASPECT(routerset_add_unknown_ccs, creates_set)
  961. /*
  962. * Functional test for routerset_add_unknown_ccs, where the set argument
  963. * is created if passed in as NULL.
  964. */
  965. /* The mock is only used to stop the test from asserting erroneously. */
  966. NS_DECL(country_t, geoip_get_country, (const char *country));
  967. static void
  968. NS(test_main)(void *arg)
  969. {
  970. routerset_t *set = NULL;
  971. routerset_t **setp = &set;
  972. int r;
  973. (void)arg;
  974. NS_MOCK(geoip_get_country);
  975. r = routerset_add_unknown_ccs(setp, 0);
  976. tt_ptr_op(*setp, OP_NE, NULL);
  977. tt_int_op(r, OP_EQ, 0);
  978. done:
  979. if (set != NULL)
  980. routerset_free(set);
  981. }
  982. country_t
  983. NS(geoip_get_country)(const char *country)
  984. {
  985. (void)country;
  986. CALLED(geoip_get_country)++;
  987. return -1;
  988. }
  989. #undef NS_SUBMODULE
  990. #define NS_SUBMODULE ASPECT(routerset_add_unknown_ccs, add_unknown)
  991. /*
  992. * Structural test for routerset_add_unknown_ccs, that the "{??}"
  993. * country code is added to the list.
  994. */
  995. NS_DECL(country_t, geoip_get_country, (const char *country));
  996. NS_DECL(int, geoip_is_loaded, (sa_family_t family));
  997. static void
  998. NS(test_main)(void *arg)
  999. {
  1000. routerset_t *set = routerset_new();
  1001. routerset_t **setp = &set;
  1002. int r;
  1003. (void)arg;
  1004. NS_MOCK(geoip_get_country);
  1005. NS_MOCK(geoip_is_loaded);
  1006. r = routerset_add_unknown_ccs(setp, 0);
  1007. tt_int_op(r, OP_EQ, 1);
  1008. tt_int_op(smartlist_contains_string(set->country_names, "??"), OP_EQ, 1);
  1009. tt_int_op(smartlist_contains_string(set->list, "{??}"), OP_EQ, 1);
  1010. done:
  1011. if (set != NULL)
  1012. routerset_free(set);
  1013. }
  1014. country_t
  1015. NS(geoip_get_country)(const char *country)
  1016. {
  1017. int arg_is_qq, arg_is_a1;
  1018. CALLED(geoip_get_country)++;
  1019. arg_is_qq = !strcmp(country, "??");
  1020. arg_is_a1 = !strcmp(country, "A1");
  1021. tt_int_op(arg_is_qq || arg_is_a1, OP_EQ, 1);
  1022. if (arg_is_qq)
  1023. return 1;
  1024. done:
  1025. return -1;
  1026. }
  1027. int
  1028. NS(geoip_is_loaded)(sa_family_t family)
  1029. {
  1030. CALLED(geoip_is_loaded)++;
  1031. tt_int_op(family, OP_EQ, AF_INET);
  1032. done:
  1033. return 0;
  1034. }
  1035. #undef NS_SUBMODULE
  1036. #define NS_SUBMODULE ASPECT(routerset_add_unknown_ccs, add_a1)
  1037. /*
  1038. * Structural test for routerset_add_unknown_ccs, that the "{a1}"
  1039. * country code is added to the list.
  1040. */
  1041. NS_DECL(country_t, geoip_get_country, (const char *country));
  1042. NS_DECL(int, geoip_is_loaded, (sa_family_t family));
  1043. static void
  1044. NS(test_main)(void *arg)
  1045. {
  1046. routerset_t *set = routerset_new();
  1047. routerset_t **setp = &set;
  1048. int r;
  1049. (void)arg;
  1050. NS_MOCK(geoip_get_country);
  1051. NS_MOCK(geoip_is_loaded);
  1052. r = routerset_add_unknown_ccs(setp, 0);
  1053. tt_int_op(r, OP_EQ, 1);
  1054. tt_int_op(smartlist_contains_string(set->country_names, "a1"), OP_EQ, 1);
  1055. tt_int_op(smartlist_contains_string(set->list, "{a1}"), OP_EQ, 1);
  1056. done:
  1057. if (set != NULL)
  1058. routerset_free(set);
  1059. }
  1060. country_t
  1061. NS(geoip_get_country)(const char *country)
  1062. {
  1063. int arg_is_qq, arg_is_a1;
  1064. CALLED(geoip_get_country)++;
  1065. arg_is_qq = !strcmp(country, "??");
  1066. arg_is_a1 = !strcmp(country, "A1");
  1067. tt_int_op(arg_is_qq || arg_is_a1, OP_EQ, 1);
  1068. if (arg_is_a1)
  1069. return 1;
  1070. done:
  1071. return -1;
  1072. }
  1073. int
  1074. NS(geoip_is_loaded)(sa_family_t family)
  1075. {
  1076. CALLED(geoip_is_loaded)++;
  1077. tt_int_op(family, OP_EQ, AF_INET);
  1078. done:
  1079. return 0;
  1080. }
  1081. #undef NS_SUBMODULE
  1082. #define NS_SUBMODULE routerset_contains_extendinfo
  1083. /*
  1084. * Functional test for routerset_contains_extendinfo.
  1085. */
  1086. static void
  1087. NS(test_main)(void *arg)
  1088. {
  1089. routerset_t *set = routerset_new();
  1090. extend_info_t ei;
  1091. int r;
  1092. const char *nickname = "foo";
  1093. (void)arg;
  1094. memset(&ei, 0, sizeof(ei));
  1095. strmap_set_lc(set->names, nickname, (void *)1);
  1096. strncpy(ei.nickname, nickname, sizeof(ei.nickname) - 1);
  1097. ei.nickname[sizeof(ei.nickname) - 1] = '\0';
  1098. r = routerset_contains_extendinfo(set, &ei);
  1099. tt_int_op(r, OP_EQ, 4);
  1100. done:
  1101. routerset_free(set);
  1102. }
  1103. #undef NS_SUBMODULE
  1104. #define NS_SUBMODULE routerset_contains_router
  1105. /*
  1106. * Functional test for routerset_contains_router.
  1107. */
  1108. static void
  1109. NS(test_main)(void *arg)
  1110. {
  1111. routerset_t *set = routerset_new();
  1112. routerinfo_t ri;
  1113. country_t country = 1;
  1114. int r;
  1115. const char *nickname = "foo";
  1116. (void)arg;
  1117. memset(&ri, 0, sizeof(ri));
  1118. strmap_set_lc(set->names, nickname, (void *)1);
  1119. ri.nickname = (char *)nickname;
  1120. r = routerset_contains_router(set, &ri, country);
  1121. tt_int_op(r, OP_EQ, 4);
  1122. done:
  1123. routerset_free(set);
  1124. }
  1125. #undef NS_SUBMODULE
  1126. #define NS_SUBMODULE routerset_contains_routerstatus
  1127. /*
  1128. * Functional test for routerset_contains_routerstatus.
  1129. */
  1130. // XXX: This is a bit brief. It only populates and tests the nickname fields
  1131. // ie., enough to make the containment check succeed. Perhaps it should do
  1132. // a bit more or test a bit more.
  1133. static void
  1134. NS(test_main)(void *arg)
  1135. {
  1136. routerset_t *set = routerset_new();
  1137. routerstatus_t rs;
  1138. country_t country = 1;
  1139. int r;
  1140. const char *nickname = "foo";
  1141. (void)arg;
  1142. memset(&rs, 0, sizeof(rs));
  1143. strmap_set_lc(set->names, nickname, (void *)1);
  1144. strncpy(rs.nickname, nickname, sizeof(rs.nickname) - 1);
  1145. rs.nickname[sizeof(rs.nickname) - 1] = '\0';
  1146. r = routerset_contains_routerstatus(set, &rs, country);
  1147. tt_int_op(r, OP_EQ, 4);
  1148. done:
  1149. routerset_free(set);
  1150. }
  1151. #undef NS_SUBMODULE
  1152. #define NS_SUBMODULE ASPECT(routerset_contains_node, none)
  1153. /*
  1154. * Functional test for routerset_contains_node, when the node has no
  1155. * routerset or routerinfo.
  1156. */
  1157. static node_t NS(mock_node);
  1158. static void
  1159. NS(test_main)(void *arg)
  1160. {
  1161. routerset_t *set = routerset_new();
  1162. int r;
  1163. (void)arg;
  1164. NS(mock_node).ri = NULL;
  1165. NS(mock_node).rs = NULL;
  1166. r = routerset_contains_node(set, &NS(mock_node));
  1167. tt_int_op(r, OP_EQ, 0);
  1168. done:
  1169. routerset_free(set);
  1170. }
  1171. #undef NS_SUBMODULE
  1172. #define NS_SUBMODULE ASPECT(routerset_contains_node, routerstatus)
  1173. /*
  1174. * Functional test for routerset_contains_node, when the node has a
  1175. * routerset and no routerinfo.
  1176. */
  1177. static node_t NS(mock_node);
  1178. static void
  1179. NS(test_main)(void *arg)
  1180. {
  1181. routerset_t *set = routerset_new();
  1182. int r;
  1183. const char *nickname = "foo";
  1184. routerstatus_t rs;
  1185. (void)arg;
  1186. strmap_set_lc(set->names, nickname, (void *)1);
  1187. strncpy(rs.nickname, nickname, sizeof(rs.nickname) - 1);
  1188. rs.nickname[sizeof(rs.nickname) - 1] = '\0';
  1189. NS(mock_node).ri = NULL;
  1190. NS(mock_node).rs = &rs;
  1191. r = routerset_contains_node(set, &NS(mock_node));
  1192. tt_int_op(r, OP_EQ, 4);
  1193. done:
  1194. routerset_free(set);
  1195. }
  1196. #undef NS_SUBMODULE
  1197. #define NS_SUBMODULE ASPECT(routerset_contains_node, routerinfo)
  1198. /*
  1199. * Functional test for routerset_contains_node, when the node has no
  1200. * routerset and a routerinfo.
  1201. */
  1202. static void
  1203. NS(test_main)(void *arg)
  1204. {
  1205. routerset_t *set = routerset_new();
  1206. int r;
  1207. const char *nickname = "foo";
  1208. routerinfo_t ri;
  1209. node_t mock_node;
  1210. (void)arg;
  1211. strmap_set_lc(set->names, nickname, (void *)1);
  1212. ri.nickname = (char *)nickname;
  1213. mock_node.ri = &ri;
  1214. mock_node.rs = NULL;
  1215. r = routerset_contains_node(set, &mock_node);
  1216. tt_int_op(r, OP_EQ, 4);
  1217. done:
  1218. routerset_free(set);
  1219. }
  1220. #undef NS_SUBMODULE
  1221. #define NS_SUBMODULE ASPECT(routerset_get_all_nodes, no_routerset)
  1222. /*
  1223. * Functional test for routerset_get_all_nodes, when routerset is NULL or
  1224. * the routerset list is NULL.
  1225. */
  1226. static void
  1227. NS(test_main)(void *arg)
  1228. {
  1229. smartlist_t *out = smartlist_new();
  1230. routerset_t *set = NULL;
  1231. (void)arg;
  1232. tt_int_op(smartlist_len(out), OP_EQ, 0);
  1233. routerset_get_all_nodes(out, NULL, NULL, 0);
  1234. tt_int_op(smartlist_len(out), OP_EQ, 0);
  1235. set = routerset_new();
  1236. smartlist_free(set->list);
  1237. routerset_get_all_nodes(out, NULL, NULL, 0);
  1238. tt_int_op(smartlist_len(out), OP_EQ, 0);
  1239. /* Just recreate list, so we can simply use routerset_free. */
  1240. set->list = smartlist_new();
  1241. done:
  1242. routerset_free(set);
  1243. smartlist_free(out);
  1244. }
  1245. #undef NS_SUBMODULE
  1246. #define NS_SUBMODULE ASPECT(routerset_get_all_nodes, list_with_no_nodes)
  1247. /*
  1248. * Structural test for routerset_get_all_nodes, when the routerset list
  1249. * is empty.
  1250. */
  1251. NS_DECL(const node_t *, node_get_by_nickname,
  1252. (const char *nickname, unsigned flags));
  1253. static const char *NS(mock_nickname);
  1254. static void
  1255. NS(test_main)(void *arg)
  1256. {
  1257. smartlist_t *out = smartlist_new();
  1258. routerset_t *set = routerset_new();
  1259. int out_len;
  1260. (void)arg;
  1261. NS_MOCK(node_get_by_nickname);
  1262. NS(mock_nickname) = "foo";
  1263. smartlist_add_strdup(set->list, NS(mock_nickname));
  1264. routerset_get_all_nodes(out, set, NULL, 0);
  1265. out_len = smartlist_len(out);
  1266. smartlist_free(out);
  1267. routerset_free(set);
  1268. tt_int_op(out_len, OP_EQ, 0);
  1269. tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1);
  1270. done:
  1271. ;
  1272. }
  1273. const node_t *
  1274. NS(node_get_by_nickname)(const char *nickname, unsigned flags)
  1275. {
  1276. CALLED(node_get_by_nickname)++;
  1277. tt_str_op(nickname, OP_EQ, NS(mock_nickname));
  1278. tt_uint_op(flags, OP_EQ, 0);
  1279. done:
  1280. return NULL;
  1281. }
  1282. #undef NS_SUBMODULE
  1283. #define NS_SUBMODULE ASPECT(routerset_get_all_nodes, list_flag_not_running)
  1284. /*
  1285. * Structural test for routerset_get_all_nodes, with the running_only flag
  1286. * is set but the nodes are not running.
  1287. */
  1288. NS_DECL(const node_t *, node_get_by_nickname,
  1289. (const char *nickname, unsigned flags));
  1290. static const char *NS(mock_nickname);
  1291. static node_t NS(mock_node);
  1292. static void
  1293. NS(test_main)(void *arg)
  1294. {
  1295. smartlist_t *out = smartlist_new();
  1296. routerset_t *set = routerset_new();
  1297. int out_len;
  1298. (void)arg;
  1299. NS_MOCK(node_get_by_nickname);
  1300. NS(mock_node).is_running = 0;
  1301. NS(mock_nickname) = "foo";
  1302. smartlist_add_strdup(set->list, NS(mock_nickname));
  1303. routerset_get_all_nodes(out, set, NULL, 1);
  1304. out_len = smartlist_len(out);
  1305. smartlist_free(out);
  1306. routerset_free(set);
  1307. tt_int_op(out_len, OP_EQ, 0);
  1308. tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1);
  1309. done:
  1310. ;
  1311. }
  1312. const node_t *
  1313. NS(node_get_by_nickname)(const char *nickname, unsigned flags)
  1314. {
  1315. CALLED(node_get_by_nickname)++;
  1316. tt_str_op(nickname, OP_EQ, NS(mock_nickname));
  1317. tt_int_op(flags, OP_EQ, 0);
  1318. done:
  1319. return &NS(mock_node);
  1320. }
  1321. #undef NS_SUBMODULE
  1322. #define NS_SUBMODULE ASPECT(routerset_get_all_nodes, list)
  1323. /*
  1324. * Structural test for routerset_get_all_nodes.
  1325. */
  1326. NS_DECL(const node_t *, node_get_by_nickname,
  1327. (const char *nickname, unsigned flags));
  1328. static char *NS(mock_nickname);
  1329. static node_t NS(mock_node);
  1330. static void
  1331. NS(test_main)(void *arg)
  1332. {
  1333. smartlist_t *out = smartlist_new();
  1334. routerset_t *set = routerset_new();
  1335. int out_len;
  1336. node_t *ent;
  1337. (void)arg;
  1338. NS_MOCK(node_get_by_nickname);
  1339. NS(mock_nickname) = tor_strdup("foo");
  1340. smartlist_add(set->list, NS(mock_nickname));
  1341. routerset_get_all_nodes(out, set, NULL, 0);
  1342. out_len = smartlist_len(out);
  1343. ent = (node_t *)smartlist_get(out, 0);
  1344. smartlist_free(out);
  1345. routerset_free(set);
  1346. tt_int_op(out_len, OP_EQ, 1);
  1347. tt_ptr_op(ent, OP_EQ, &NS(mock_node));
  1348. tt_int_op(CALLED(node_get_by_nickname), OP_EQ, 1);
  1349. done:
  1350. ;
  1351. }
  1352. const node_t *
  1353. NS(node_get_by_nickname)(const char *nickname, unsigned flags)
  1354. {
  1355. CALLED(node_get_by_nickname)++;
  1356. tt_str_op(nickname, OP_EQ, NS(mock_nickname));
  1357. tt_int_op(flags, OP_EQ, 0);
  1358. done:
  1359. return &NS(mock_node);
  1360. }
  1361. #undef NS_SUBMODULE
  1362. #define NS_SUBMODULE ASPECT(routerset_get_all_nodes, nodelist_with_no_nodes)
  1363. /*
  1364. * Structural test for routerset_get_all_nodes, when the nodelist has no nodes.
  1365. */
  1366. NS_DECL(smartlist_t *, nodelist_get_list, (void));
  1367. static smartlist_t *NS(mock_smartlist);
  1368. static void
  1369. NS(test_main)(void *arg)
  1370. {
  1371. routerset_t *set = routerset_new();
  1372. smartlist_t *out = smartlist_new();
  1373. int r;
  1374. (void)arg;
  1375. NS_MOCK(nodelist_get_list);
  1376. smartlist_add_strdup(set->country_names, "{xx}");
  1377. NS(mock_smartlist) = smartlist_new();
  1378. routerset_get_all_nodes(out, set, NULL, 1);
  1379. r = smartlist_len(out);
  1380. routerset_free(set);
  1381. smartlist_free(out);
  1382. smartlist_free(NS(mock_smartlist));
  1383. tt_int_op(r, OP_EQ, 0);
  1384. tt_int_op(CALLED(nodelist_get_list), OP_EQ, 1);
  1385. done:
  1386. ;
  1387. }
  1388. smartlist_t *
  1389. NS(nodelist_get_list)(void)
  1390. {
  1391. CALLED(nodelist_get_list)++;
  1392. return NS(mock_smartlist);
  1393. }
  1394. #undef NS_SUBMODULE
  1395. #define NS_SUBMODULE ASPECT(routerset_get_all_nodes, nodelist_flag_not_running)
  1396. /*
  1397. * Structural test for routerset_get_all_nodes, with a non-list routerset
  1398. * the running_only flag is set, but the nodes are not running.
  1399. */
  1400. NS_DECL(smartlist_t *, nodelist_get_list, (void));
  1401. static smartlist_t *NS(mock_smartlist);
  1402. static node_t NS(mock_node);
  1403. static void
  1404. NS(test_main)(void *arg)
  1405. {
  1406. routerset_t *set = routerset_new();
  1407. smartlist_t *out = smartlist_new();
  1408. int r;
  1409. (void)arg;
  1410. NS_MOCK(nodelist_get_list);
  1411. smartlist_add_strdup(set->country_names, "{xx}");
  1412. NS(mock_smartlist) = smartlist_new();
  1413. NS(mock_node).is_running = 0;
  1414. smartlist_add(NS(mock_smartlist), (void *)&NS(mock_node));
  1415. routerset_get_all_nodes(out, set, NULL, 1);
  1416. r = smartlist_len(out);
  1417. routerset_free(set);
  1418. smartlist_free(out);
  1419. smartlist_free(NS(mock_smartlist));
  1420. tt_int_op(r, OP_EQ, 0);
  1421. tt_int_op(CALLED(nodelist_get_list), OP_EQ, 1);
  1422. done:
  1423. ;
  1424. }
  1425. smartlist_t *
  1426. NS(nodelist_get_list)(void)
  1427. {
  1428. CALLED(nodelist_get_list)++;
  1429. return NS(mock_smartlist);
  1430. }
  1431. #undef NS_SUBMODULE
  1432. #define NS_SUBMODULE routerset_subtract_nodes
  1433. /*
  1434. * Functional test for routerset_subtract_nodes.
  1435. */
  1436. static void
  1437. NS(test_main)(void *arg)
  1438. {
  1439. routerset_t *set = routerset_new();
  1440. smartlist_t *list = smartlist_new();
  1441. const char *nickname = "foo";
  1442. routerinfo_t ri;
  1443. node_t mock_node;
  1444. (void)arg;
  1445. strmap_set_lc(set->names, nickname, (void *)1);
  1446. ri.nickname = (char *)nickname;
  1447. mock_node.rs = NULL;
  1448. mock_node.ri = &ri;
  1449. smartlist_add(list, (void *)&mock_node);
  1450. tt_int_op(smartlist_len(list), OP_NE, 0);
  1451. routerset_subtract_nodes(list, set);
  1452. tt_int_op(smartlist_len(list), OP_EQ, 0);
  1453. done:
  1454. routerset_free(set);
  1455. smartlist_free(list);
  1456. }
  1457. #undef NS_SUBMODULE
  1458. #define NS_SUBMODULE ASPECT(routerset_subtract_nodes, null_routerset)
  1459. /*
  1460. * Functional test for routerset_subtract_nodes, with a NULL routerset.
  1461. */
  1462. static void
  1463. NS(test_main)(void *arg)
  1464. {
  1465. routerset_t *set = NULL;
  1466. smartlist_t *list = smartlist_new();
  1467. const char *nickname = "foo";
  1468. routerinfo_t ri;
  1469. node_t mock_node;
  1470. (void)arg;
  1471. ri.nickname = (char *)nickname;
  1472. mock_node.ri = &ri;
  1473. smartlist_add(list, (void *)&mock_node);
  1474. tt_int_op(smartlist_len(list), OP_NE, 0);
  1475. routerset_subtract_nodes(list, set);
  1476. tt_int_op(smartlist_len(list), OP_NE, 0);
  1477. done:
  1478. routerset_free(set);
  1479. smartlist_free(list);
  1480. }
  1481. #undef NS_SUBMODULE
  1482. #define NS_SUBMODULE routerset_to_string
  1483. /*
  1484. * Functional test for routerset_to_string.
  1485. */
  1486. static void
  1487. NS(test_main)(void *arg)
  1488. {
  1489. routerset_t *set = NULL;
  1490. char *s = NULL;
  1491. (void)arg;
  1492. set = NULL;
  1493. s = routerset_to_string(set);
  1494. tt_str_op(s, OP_EQ, "");
  1495. tor_free(s);
  1496. set = routerset_new();
  1497. s = routerset_to_string(set);
  1498. tt_str_op(s, OP_EQ, "");
  1499. tor_free(s);
  1500. routerset_free(set); set = NULL;
  1501. set = routerset_new();
  1502. smartlist_add(set->list, tor_strndup("a", 1));
  1503. s = routerset_to_string(set);
  1504. tt_str_op(s, OP_EQ, "a");
  1505. tor_free(s);
  1506. routerset_free(set); set = NULL;
  1507. set = routerset_new();
  1508. smartlist_add(set->list, tor_strndup("a", 1));
  1509. smartlist_add(set->list, tor_strndup("b", 1));
  1510. s = routerset_to_string(set);
  1511. tt_str_op(s, OP_EQ, "a,b");
  1512. tor_free(s);
  1513. routerset_free(set); set = NULL;
  1514. done:
  1515. tor_free(s);
  1516. routerset_free(set);
  1517. }
  1518. #undef NS_SUBMODULE
  1519. #define NS_SUBMODULE ASPECT(routerset_equal, empty_empty)
  1520. /*
  1521. * Functional test for routerset_equal, with both routersets empty.
  1522. */
  1523. static void
  1524. NS(test_main)(void *arg)
  1525. {
  1526. routerset_t *a = routerset_new(), *b = routerset_new();
  1527. int r;
  1528. (void)arg;
  1529. r = routerset_equal(a, b);
  1530. routerset_free(a);
  1531. routerset_free(b);
  1532. tt_int_op(r, OP_EQ, 1);
  1533. done:
  1534. ;
  1535. }
  1536. #undef NS_SUBMODULE
  1537. #define NS_SUBMODULE ASPECT(routerset_equal, empty_not_empty)
  1538. /*
  1539. * Functional test for routerset_equal, with one routersets empty.
  1540. */
  1541. static void
  1542. NS(test_main)(void *arg)
  1543. {
  1544. routerset_t *a = routerset_new(), *b = routerset_new();
  1545. int r;
  1546. (void)arg;
  1547. smartlist_add_strdup(b->list, "{xx}");
  1548. r = routerset_equal(a, b);
  1549. routerset_free(a);
  1550. routerset_free(b);
  1551. tt_int_op(r, OP_EQ, 0);
  1552. done:
  1553. ;
  1554. }
  1555. #undef NS_SUBMODULE
  1556. #define NS_SUBMODULE ASPECT(routerset_equal, differing_lengths)
  1557. /*
  1558. * Functional test for routerset_equal, with the routersets having
  1559. * differing lengths.
  1560. */
  1561. static void
  1562. NS(test_main)(void *arg)
  1563. {
  1564. routerset_t *a = routerset_new(), *b = routerset_new();
  1565. int r;
  1566. (void)arg;
  1567. smartlist_add_strdup(a->list, "{aa}");
  1568. smartlist_add_strdup(b->list, "{b1}");
  1569. smartlist_add_strdup(b->list, "{b2}");
  1570. r = routerset_equal(a, b);
  1571. routerset_free(a);
  1572. routerset_free(b);
  1573. tt_int_op(r, OP_EQ, 0);
  1574. done:
  1575. ;
  1576. }
  1577. #undef NS_SUBMODULE
  1578. #define NS_SUBMODULE ASPECT(routerset_equal, unequal)
  1579. /*
  1580. * Functional test for routerset_equal, with the routersets being
  1581. * different.
  1582. */
  1583. static void
  1584. NS(test_main)(void *arg)
  1585. {
  1586. routerset_t *a = routerset_new(), *b = routerset_new();
  1587. int r;
  1588. (void)arg;
  1589. smartlist_add_strdup(a->list, "foo");
  1590. smartlist_add_strdup(b->list, "bar");
  1591. r = routerset_equal(a, b);
  1592. routerset_free(a);
  1593. routerset_free(b);
  1594. tt_int_op(r, OP_EQ, 0);
  1595. done:
  1596. ;
  1597. }
  1598. #undef NS_SUBMODULE
  1599. #define NS_SUBMODULE ASPECT(routerset_equal, equal)
  1600. /*
  1601. * Functional test for routerset_equal, with the routersets being
  1602. * equal.
  1603. */
  1604. static void
  1605. NS(test_main)(void *arg)
  1606. {
  1607. routerset_t *a = routerset_new(), *b = routerset_new();
  1608. int r;
  1609. (void)arg;
  1610. smartlist_add_strdup(a->list, "foo");
  1611. smartlist_add_strdup(b->list, "foo");
  1612. r = routerset_equal(a, b);
  1613. routerset_free(a);
  1614. routerset_free(b);
  1615. tt_int_op(r, OP_EQ, 1);
  1616. done:
  1617. ;
  1618. }
  1619. #undef NS_SUBMODULE
  1620. #define NS_SUBMODULE ASPECT(routerset_free, null_routerset)
  1621. /*
  1622. * Structural test for routerset_free, where the routerset is NULL.
  1623. */
  1624. NS_DECL(void, smartlist_free_, (smartlist_t *sl));
  1625. static void
  1626. NS(test_main)(void *arg)
  1627. {
  1628. (void)arg;
  1629. NS_MOCK(smartlist_free_);
  1630. routerset_free_(NULL);
  1631. tt_int_op(CALLED(smartlist_free_), OP_EQ, 0);
  1632. done:
  1633. ;
  1634. }
  1635. void
  1636. NS(smartlist_free_)(smartlist_t *s)
  1637. {
  1638. (void)s;
  1639. CALLED(smartlist_free_)++;
  1640. }
  1641. #undef NS_SUBMODULE
  1642. #define NS_SUBMODULE routerset_free
  1643. /*
  1644. * Structural test for routerset_free.
  1645. */
  1646. NS_DECL(void, smartlist_free_, (smartlist_t *sl));
  1647. NS_DECL(void, strmap_free_,(strmap_t *map, void (*free_val)(void*)));
  1648. NS_DECL(void, digestmap_free_, (digestmap_t *map, void (*free_val)(void*)));
  1649. static void
  1650. NS(test_main)(void *arg)
  1651. {
  1652. routerset_t *routerset = routerset_new();
  1653. (void)arg;
  1654. NS_MOCK(smartlist_free_);
  1655. NS_MOCK(strmap_free_);
  1656. NS_MOCK(digestmap_free_);
  1657. routerset_free(routerset);
  1658. tt_int_op(CALLED(smartlist_free_), OP_NE, 0);
  1659. tt_int_op(CALLED(strmap_free_), OP_NE, 0);
  1660. tt_int_op(CALLED(digestmap_free_), OP_NE, 0);
  1661. done:
  1662. ;
  1663. }
  1664. void
  1665. NS(smartlist_free_)(smartlist_t *s)
  1666. {
  1667. CALLED(smartlist_free_)++;
  1668. smartlist_free___real(s);
  1669. }
  1670. void
  1671. NS(strmap_free_)(strmap_t *map, void (*free_val)(void*))
  1672. {
  1673. CALLED(strmap_free_)++;
  1674. strmap_free___real(map, free_val);
  1675. }
  1676. void
  1677. NS(digestmap_free_)(digestmap_t *map, void (*free_val)(void*))
  1678. {
  1679. CALLED(digestmap_free_)++;
  1680. digestmap_free___real(map, free_val);
  1681. }
  1682. #undef NS_SUBMODULE
  1683. struct testcase_t routerset_tests[] = {
  1684. TEST_CASE(routerset_new),
  1685. TEST_CASE(routerset_get_countryname),
  1686. TEST_CASE(routerset_is_list),
  1687. TEST_CASE(routerset_needs_geoip),
  1688. TEST_CASE(routerset_is_empty),
  1689. TEST_CASE_ASPECT(routerset_contains, null_set_or_null_set_list),
  1690. TEST_CASE_ASPECT(routerset_contains, set_and_nickname),
  1691. TEST_CASE_ASPECT(routerset_contains, set_and_null_nickname),
  1692. TEST_CASE_ASPECT(routerset_contains, set_and_no_nickname),
  1693. TEST_CASE_ASPECT(routerset_contains, set_and_digest),
  1694. TEST_CASE_ASPECT(routerset_contains, set_and_no_digest),
  1695. TEST_CASE_ASPECT(routerset_contains, set_and_null_digest),
  1696. TEST_CASE_ASPECT(routerset_contains, set_and_addr),
  1697. TEST_CASE_ASPECT(routerset_contains, set_and_no_addr),
  1698. TEST_CASE_ASPECT(routerset_contains, set_and_null_addr),
  1699. TEST_CASE_ASPECT(routerset_contains, countries_no_geoip),
  1700. TEST_CASE_ASPECT(routerset_contains, countries_geoip),
  1701. TEST_CASE_ASPECT(routerset_add_unknown_ccs, only_flag_and_no_ccs),
  1702. TEST_CASE_ASPECT(routerset_add_unknown_ccs, creates_set),
  1703. TEST_CASE_ASPECT(routerset_add_unknown_ccs, add_unknown),
  1704. TEST_CASE_ASPECT(routerset_add_unknown_ccs, add_a1),
  1705. TEST_CASE(routerset_contains_extendinfo),
  1706. TEST_CASE(routerset_contains_router),
  1707. TEST_CASE(routerset_contains_routerstatus),
  1708. TEST_CASE_ASPECT(routerset_contains_node, none),
  1709. TEST_CASE_ASPECT(routerset_contains_node, routerinfo),
  1710. TEST_CASE_ASPECT(routerset_contains_node, routerstatus),
  1711. TEST_CASE_ASPECT(routerset_get_all_nodes, no_routerset),
  1712. TEST_CASE_ASPECT(routerset_get_all_nodes, list_with_no_nodes),
  1713. TEST_CASE_ASPECT(routerset_get_all_nodes, list_flag_not_running),
  1714. TEST_CASE_ASPECT(routerset_get_all_nodes, list),
  1715. TEST_CASE_ASPECT(routerset_get_all_nodes, nodelist_with_no_nodes),
  1716. TEST_CASE_ASPECT(routerset_get_all_nodes, nodelist_flag_not_running),
  1717. TEST_CASE_ASPECT(routerset_refresh_counties, geoip_not_loaded),
  1718. TEST_CASE_ASPECT(routerset_refresh_counties, no_countries),
  1719. TEST_CASE_ASPECT(routerset_refresh_counties, one_valid_country),
  1720. TEST_CASE_ASPECT(routerset_refresh_counties, one_invalid_country),
  1721. TEST_CASE_ASPECT(routerset_union, source_bad),
  1722. TEST_CASE_ASPECT(routerset_union, one),
  1723. TEST_CASE_ASPECT(routerset_parse, malformed),
  1724. TEST_CASE_ASPECT(routerset_parse, valid_hexdigest),
  1725. TEST_CASE_ASPECT(routerset_parse, valid_nickname),
  1726. TEST_CASE_ASPECT(routerset_parse, get_countryname),
  1727. TEST_CASE_ASPECT(routerset_parse, policy_wildcard),
  1728. TEST_CASE_ASPECT(routerset_parse, policy_ipv4),
  1729. TEST_CASE_ASPECT(routerset_parse, policy_ipv6),
  1730. TEST_CASE(routerset_subtract_nodes),
  1731. TEST_CASE_ASPECT(routerset_subtract_nodes, null_routerset),
  1732. TEST_CASE(routerset_to_string),
  1733. TEST_CASE_ASPECT(routerset_equal, empty_empty),
  1734. TEST_CASE_ASPECT(routerset_equal, empty_not_empty),
  1735. TEST_CASE_ASPECT(routerset_equal, differing_lengths),
  1736. TEST_CASE_ASPECT(routerset_equal, unequal),
  1737. TEST_CASE_ASPECT(routerset_equal, equal),
  1738. TEST_CASE_ASPECT(routerset_free, null_routerset),
  1739. TEST_CASE(routerset_free),
  1740. END_OF_TESTCASES
  1741. };