prop224: 'is_new_tp' -> 'use_second_hdsir_index' in hs_get_responsible_hsdirs()
[tor.git] / src / test / test_nodelist.c
blob256354415c169e82fee936eede595cbaa6a53590
1 /* Copyright (c) 2007-2017, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
4 /**
5 * \file test_nodelist.c
6 * \brief Unit tests for nodelist related functions.
7 **/
9 #include "or.h"
10 #include "nodelist.h"
11 #include "test.h"
13 /** Test the case when node_get_by_id() returns NULL,
14 * node_get_verbose_nickname_by_id should return the base 16 encoding
15 * of the id.
17 static void
18 test_nodelist_node_get_verbose_nickname_by_id_null_node(void *arg)
20 char vname[MAX_VERBOSE_NICKNAME_LEN+1];
21 const char ID[] = "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
22 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA";
23 (void) arg;
25 /* make sure node_get_by_id returns NULL */
26 tt_assert(!node_get_by_id(ID));
27 node_get_verbose_nickname_by_id(ID, vname);
28 tt_str_op(vname,OP_EQ, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
29 done:
30 return;
33 /** For routers without named flag, get_verbose_nickname should return
34 * "Fingerprint~Nickname"
36 static void
37 test_nodelist_node_get_verbose_nickname_not_named(void *arg)
39 node_t mock_node;
40 routerstatus_t mock_rs;
42 char vname[MAX_VERBOSE_NICKNAME_LEN+1];
44 (void) arg;
46 memset(&mock_node, 0, sizeof(node_t));
47 memset(&mock_rs, 0, sizeof(routerstatus_t));
49 /* verbose nickname should use ~ instead of = for unnamed routers */
50 strlcpy(mock_rs.nickname, "TestOR", sizeof(mock_rs.nickname));
51 mock_node.rs = &mock_rs;
52 memcpy(mock_node.identity,
53 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
54 "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA",
55 DIGEST_LEN);
56 node_get_verbose_nickname(&mock_node, vname);
57 tt_str_op(vname,OP_EQ, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR");
59 done:
60 return;
63 /** A node should be considered a directory server if it has an open dirport
64 * of it accepts tunnelled directory requests.
66 static void
67 test_nodelist_node_is_dir(void *arg)
69 (void)arg;
71 routerstatus_t rs;
72 routerinfo_t ri;
73 node_t node;
74 memset(&node, 0, sizeof(node_t));
75 memset(&rs, 0, sizeof(routerstatus_t));
76 memset(&ri, 0, sizeof(routerinfo_t));
78 tt_assert(!node_is_dir(&node));
80 node.rs = &rs;
81 tt_assert(!node_is_dir(&node));
83 rs.is_v2_dir = 1;
84 tt_assert(node_is_dir(&node));
86 rs.is_v2_dir = 0;
87 rs.dir_port = 1;
88 tt_assert(! node_is_dir(&node));
90 node.rs = NULL;
91 tt_assert(!node_is_dir(&node));
92 node.ri = &ri;
93 ri.supports_tunnelled_dir_requests = 1;
94 tt_assert(node_is_dir(&node));
95 ri.supports_tunnelled_dir_requests = 0;
96 ri.dir_port = 1;
97 tt_assert(! node_is_dir(&node));
99 done:
100 return;
103 #define NODE(name, flags) \
104 { #name, test_nodelist_##name, (flags), NULL, NULL }
106 struct testcase_t nodelist_tests[] = {
107 NODE(node_get_verbose_nickname_by_id_null_node, TT_FORK),
108 NODE(node_get_verbose_nickname_not_named, TT_FORK),
109 NODE(node_is_dir, TT_FORK),
110 END_OF_TESTCASES