Prop210: Refactor connection_get_* to produce lists and counts
[tor.git] / src / test / test_controller.c
blobb40825bb5d0dc470fa5b53455f10a8e0caafe6a0
1 /* Copyright (c) 2015, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
4 #define CONTROL_PRIVATE
5 #include "or.h"
6 #include "control.h"
7 #include "rendservice.h"
8 #include "test.h"
10 static void
11 test_add_onion_helper_keyarg(void *arg)
13 crypto_pk_t *pk = NULL;
14 crypto_pk_t *pk2 = NULL;
15 const char *key_new_alg = NULL;
16 char *key_new_blob = NULL;
17 char *err_msg = NULL;
18 char *encoded = NULL;
19 char *arg_str = NULL;
21 (void) arg;
23 /* Test explicit RSA1024 key generation. */
24 pk = add_onion_helper_keyarg("NEW:RSA1024", 0, &key_new_alg, &key_new_blob,
25 &err_msg);
26 tt_assert(pk);
27 tt_str_op(key_new_alg, OP_EQ, "RSA1024");
28 tt_assert(key_new_blob);
29 tt_assert(!err_msg);
31 /* Test "BEST" key generation (Assumes BEST = RSA1024). */
32 crypto_pk_free(pk);
33 tor_free(key_new_blob);
34 pk = add_onion_helper_keyarg("NEW:BEST", 0, &key_new_alg, &key_new_blob,
35 &err_msg);
36 tt_assert(pk);
37 tt_str_op(key_new_alg, OP_EQ, "RSA1024");
38 tt_assert(key_new_blob);
39 tt_assert(!err_msg);
41 /* Test discarding the private key. */
42 crypto_pk_free(pk);
43 tor_free(key_new_blob);
44 pk = add_onion_helper_keyarg("NEW:BEST", 1, &key_new_alg, &key_new_blob,
45 &err_msg);
46 tt_assert(pk);
47 tt_assert(!key_new_alg);
48 tt_assert(!key_new_blob);
49 tt_assert(!err_msg);
51 /* Test generating a invalid key type. */
52 crypto_pk_free(pk);
53 pk = add_onion_helper_keyarg("NEW:RSA512", 0, &key_new_alg, &key_new_blob,
54 &err_msg);
55 tt_assert(!pk);
56 tt_assert(!key_new_alg);
57 tt_assert(!key_new_blob);
58 tt_assert(err_msg);
60 /* Test loading a RSA1024 key. */
61 tor_free(err_msg);
62 pk = pk_generate(0);
63 tt_int_op(0, OP_EQ, crypto_pk_base64_encode(pk, &encoded));
64 tor_asprintf(&arg_str, "RSA1024:%s", encoded);
65 pk2 = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
66 &err_msg);
67 tt_assert(pk2);
68 tt_assert(!key_new_alg);
69 tt_assert(!key_new_blob);
70 tt_assert(!err_msg);
71 tt_assert(crypto_pk_cmp_keys(pk, pk2) == 0);
73 /* Test loading a invalid key type. */
74 tor_free(arg_str);
75 crypto_pk_free(pk); pk = NULL;
76 tor_asprintf(&arg_str, "RSA512:%s", encoded);
77 pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
78 &err_msg);
79 tt_assert(!pk);
80 tt_assert(!key_new_alg);
81 tt_assert(!key_new_blob);
82 tt_assert(err_msg);
84 /* Test loading a invalid key. */
85 tor_free(arg_str);
86 crypto_pk_free(pk); pk = NULL;
87 tor_free(err_msg);
88 encoded[strlen(encoded)/2] = '\0';
89 tor_asprintf(&arg_str, "RSA1024:%s", encoded);
90 pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
91 &err_msg);
92 tt_assert(!pk);
93 tt_assert(!key_new_alg);
94 tt_assert(!key_new_blob);
95 tt_assert(err_msg);
97 done:
98 crypto_pk_free(pk);
99 crypto_pk_free(pk2);
100 tor_free(key_new_blob);
101 tor_free(err_msg);
102 tor_free(encoded);
103 tor_free(arg_str);
106 static void
107 test_rend_service_parse_port_config(void *arg)
109 const char *sep = ",";
110 rend_service_port_config_t *cfg = NULL;
111 char *err_msg = NULL;
113 (void)arg;
115 /* Test "VIRTPORT" only. */
116 cfg = rend_service_parse_port_config("80", sep, &err_msg);
117 tt_assert(cfg);
118 tt_assert(!err_msg);
120 /* Test "VIRTPORT,TARGET" (Target is port). */
121 rend_service_port_config_free(cfg);
122 cfg = rend_service_parse_port_config("80,8080", sep, &err_msg);
123 tt_assert(cfg);
124 tt_assert(!err_msg);
126 /* Test "VIRTPORT,TARGET" (Target is IPv4:port). */
127 rend_service_port_config_free(cfg);
128 cfg = rend_service_parse_port_config("80,192.0.2.1:8080", sep, &err_msg);
129 tt_assert(cfg);
130 tt_assert(!err_msg);
132 /* Test "VIRTPORT,TARGET" (Target is IPv6:port). */
133 rend_service_port_config_free(cfg);
134 cfg = rend_service_parse_port_config("80,[2001:db8::1]:8080", sep, &err_msg);
135 tt_assert(cfg);
136 tt_assert(!err_msg);
138 /* XXX: Someone should add tests for AF_UNIX targets if supported. */
140 /* Test empty config. */
141 rend_service_port_config_free(cfg);
142 cfg = rend_service_parse_port_config("", sep, &err_msg);
143 tt_assert(!cfg);
144 tt_assert(err_msg);
146 /* Test invalid port. */
147 tor_free(err_msg);
148 cfg = rend_service_parse_port_config("90001", sep, &err_msg);
149 tt_assert(!cfg);
150 tt_assert(err_msg);
152 done:
153 rend_service_port_config_free(cfg);
154 tor_free(err_msg);
157 struct testcase_t controller_tests[] = {
158 { "add_onion_helper_keyarg", test_add_onion_helper_keyarg, 0, NULL, NULL },
159 { "rend_service_parse_port_config", test_rend_service_parse_port_config, 0,
160 NULL, NULL },
161 END_OF_TESTCASES