test_routerset.c 47 KB

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