1 /* Copyright (c) 2015, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
4 #define CONTROL_PRIVATE
7 #include "rendservice.h"
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
;
23 /* Test explicit RSA1024 key generation. */
24 pk
= add_onion_helper_keyarg("NEW:RSA1024", 0, &key_new_alg
, &key_new_blob
,
27 tt_str_op(key_new_alg
, OP_EQ
, "RSA1024");
28 tt_assert(key_new_blob
);
31 /* Test "BEST" key generation (Assumes BEST = RSA1024). */
33 tor_free(key_new_blob
);
34 pk
= add_onion_helper_keyarg("NEW:BEST", 0, &key_new_alg
, &key_new_blob
,
37 tt_str_op(key_new_alg
, OP_EQ
, "RSA1024");
38 tt_assert(key_new_blob
);
41 /* Test discarding the private key. */
43 tor_free(key_new_blob
);
44 pk
= add_onion_helper_keyarg("NEW:BEST", 1, &key_new_alg
, &key_new_blob
,
47 tt_assert(!key_new_alg
);
48 tt_assert(!key_new_blob
);
51 /* Test generating a invalid key type. */
53 pk
= add_onion_helper_keyarg("NEW:RSA512", 0, &key_new_alg
, &key_new_blob
,
56 tt_assert(!key_new_alg
);
57 tt_assert(!key_new_blob
);
60 /* Test loading a RSA1024 key. */
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
,
68 tt_assert(!key_new_alg
);
69 tt_assert(!key_new_blob
);
71 tt_assert(crypto_pk_cmp_keys(pk
, pk2
) == 0);
73 /* Test loading a invalid key type. */
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
,
80 tt_assert(!key_new_alg
);
81 tt_assert(!key_new_blob
);
84 /* Test loading a invalid key. */
86 crypto_pk_free(pk
); pk
= NULL
;
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
,
93 tt_assert(!key_new_alg
);
94 tt_assert(!key_new_blob
);
100 tor_free(key_new_blob
);
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
;
115 /* Test "VIRTPORT" only. */
116 cfg
= rend_service_parse_port_config("80", sep
, &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
);
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
);
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
);
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
);
146 /* Test invalid port. */
148 cfg
= rend_service_parse_port_config("90001", sep
, &err_msg
);
153 rend_service_port_config_free(cfg
);
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,