test_routerset.c 47 KB

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