1 /* Copyright (c) 2001-2004, Roger Dingledine.
2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
3 * Copyright (c) 2007-2017, The Tor Project, Inc. */
4 /* See LICENSE for licensing information */
13 #define ROUTERSET_PRIVATE
14 #include "routerset.h"
16 #include "log_test_helpers.h"
21 #include "test_helpers.h"
23 #define NS_MODULE test_options
31 static smartlist_t
*messages
= NULL
;
34 log_cback(int severity
, uint32_t domain
, const char *msg
)
36 logmsg_t
*x
= tor_malloc(sizeof(*x
));
37 x
->severity
= severity
;
39 x
->msg
= tor_strdup(msg
);
41 messages
= smartlist_new();
42 smartlist_add(messages
, x
);
46 setup_log_callback(void)
48 log_severity_list_t lst
;
49 memset(&lst
, 0, sizeof(lst
));
50 lst
.masks
[LOG_ERR
- LOG_ERR
] = ~0;
51 lst
.masks
[LOG_WARN
- LOG_ERR
] = ~0;
52 lst
.masks
[LOG_NOTICE
- LOG_ERR
] = ~0;
53 add_callback_log(&lst
, log_cback
);
63 return tor_strdup("");
64 msgs
= smartlist_new();
65 SMARTLIST_FOREACH_BEGIN(messages
, logmsg_t
*, x
) {
66 smartlist_add_asprintf(msgs
, "[%s] %s",
67 log_level_to_string(x
->severity
), x
->msg
);
68 } SMARTLIST_FOREACH_END(x
);
69 out
= smartlist_join_strings(msgs
, "", 0, NULL
);
70 SMARTLIST_FOREACH(msgs
, char *, cp
, tor_free(cp
));
76 clear_log_messages(void)
80 SMARTLIST_FOREACH(messages
, logmsg_t
*, m
,
81 { tor_free(m
->msg
); tor_free(m
); });
82 smartlist_free(messages
);
86 #define setup_options(opt,dflt) \
88 opt = options_new(); \
89 opt->command = CMD_RUN_TOR; \
92 dflt = config_dup(&options_format, opt); \
93 clear_log_messages(); \
96 #define VALID_DIR_AUTH "DirAuthority dizum orport=443 v3ident=E8A9C45" \
97 "EDE6D711294FADF8E7951F4DE6CA56B58 194.109.206.212:80 7EA6 EAD6 FD83" \
98 " 083C 538F 4403 8BBF A077 587D D755\n"
99 #define VALID_ALT_BRIDGE_AUTH \
100 "AlternateBridgeAuthority dizum orport=443 v3ident=E8A9C45" \
101 "EDE6D711294FADF8E7951F4DE6CA56B58 194.109.206.212:80 7EA6 EAD6 FD83" \
102 " 083C 538F 4403 8BBF A077 587D D755\n"
103 #define VALID_ALT_DIR_AUTH \
104 "AlternateDirAuthority dizum orport=443 v3ident=E8A9C45" \
105 "EDE6D711294FADF8E7951F4DE6CA56B58 194.109.206.212:80 7EA6 EAD6 FD83" \
106 " 083C 538F 4403 8BBF A077 587D D755\n"
109 test_options_checklog(const char *configuration
, int expect_log_severity
,
110 const char *expect_log
)
112 int found
= 0, ret
= -1;
113 char *actual_log
= NULL
;
116 SMARTLIST_FOREACH_BEGIN(messages
, logmsg_t
*, m
) {
117 if (m
->severity
== expect_log_severity
&&
118 strstr(m
->msg
, expect_log
)) {
122 } SMARTLIST_FOREACH_END(m
);
125 actual_log
= dump_logs();
126 TT_DIE(("Expected log message [%s] %s from <%s>, but got <%s>.",
127 log_level_to_string(expect_log_severity
), expect_log
,
128 configuration
, actual_log
));
133 tor_free(actual_log
);
138 test_options_checkmsgs(const char *configuration
,
139 const char *expect_errmsg
,
140 int expect_log_severity
,
141 const char *expect_log
,
144 if (expect_errmsg
&& !msg
) {
145 TT_DIE(("Expected error message <%s> from <%s>, but got none.",
146 expect_errmsg
, configuration
));
147 } else if (expect_errmsg
&& !strstr(msg
, expect_errmsg
)) {
148 TT_DIE(("Expected error message <%s> from <%s>, but got <%s>.",
149 expect_errmsg
, configuration
, msg
));
150 } else if (!expect_errmsg
&& msg
) {
151 TT_DIE(("Expected no error message from <%s> but got <%s>.",
152 configuration
, msg
));
155 return test_options_checklog(configuration
, expect_log_severity
,
164 /* Which phases of config parsing/validation to check for messages/logs */
165 enum { PH_GETLINES
, PH_ASSIGN
, PH_VALIDATE
};
168 test_options_validate_impl(const char *configuration
,
169 const char *expect_errmsg
,
170 int expect_log_severity
,
171 const char *expect_log
,
174 or_options_t
*opt
=NULL
;
176 config_line_t
*cl
=NULL
;
180 setup_options(opt
, dflt
);
182 r
= config_get_lines(configuration
, &cl
, 1);
183 if (phase
== PH_GETLINES
) {
184 if (test_options_checkmsgs(configuration
, expect_errmsg
,
192 r
= config_assign(&options_format
, opt
, cl
, 0, &msg
);
193 if (phase
== PH_ASSIGN
) {
194 if (test_options_checkmsgs(configuration
, expect_errmsg
,
199 tt_int_op((r
== 0), OP_EQ
, (msg
== NULL
));
203 r
= options_validate(NULL
, opt
, dflt
, 0, &msg
);
204 if (phase
== PH_VALIDATE
) {
205 if (test_options_checkmsgs(configuration
, expect_errmsg
,
210 tt_int_op((r
== 0), OP_EQ
, (msg
== NULL
));
215 config_free_lines(cl
);
216 or_options_free(opt
);
217 or_options_free(dflt
);
219 clear_log_messages();
222 #define WANT_ERR(config, msg, ph) \
223 test_options_validate_impl((config), (msg), 0, NULL, (ph))
224 #define WANT_LOG(config, severity, msg, ph) \
225 test_options_validate_impl((config), NULL, (severity), (msg), (ph))
226 #define WANT_ERR_LOG(config, msg, severity, logmsg, ph) \
227 test_options_validate_impl((config), (msg), (severity), (logmsg), (ph))
228 #define OK(config, ph) \
229 test_options_validate_impl((config), NULL, 0, NULL, (ph))
232 test_options_validate(void *arg
)
235 setup_log_callback();
236 sandbox_disable_getaddrinfo_cache();
238 WANT_ERR("ExtORPort 500000", "Invalid ExtORPort", PH_VALIDATE
);
240 WANT_ERR_LOG("ServerTransportOptions trebuchet",
241 "ServerTransportOptions did not parse",
242 LOG_WARN
, "Too few arguments", PH_VALIDATE
);
243 OK("ServerTransportOptions trebuchet sling=snappy", PH_VALIDATE
);
244 OK("ServerTransportOptions trebuchet sling=", PH_VALIDATE
);
245 WANT_ERR_LOG("ServerTransportOptions trebuchet slingsnappy",
246 "ServerTransportOptions did not parse",
247 LOG_WARN
, "\"slingsnappy\" is not a k=v", PH_VALIDATE
);
249 WANT_ERR("DirPort 8080\nDirCache 0",
250 "DirPort configured but DirCache disabled.", PH_VALIDATE
);
251 WANT_ERR("BridgeRelay 1\nDirCache 0",
252 "We're a bridge but DirCache is disabled.", PH_VALIDATE
);
254 WANT_ERR_LOG("HeartbeatPeriod 21 snarks",
255 "Interval 'HeartbeatPeriod 21 snarks' is malformed or"
256 " out of bounds.", LOG_WARN
, "Unknown unit 'snarks'.",
258 WANT_ERR_LOG("LogTimeGranularity 21 snarks",
259 "Msec interval 'LogTimeGranularity 21 snarks' is malformed or"
260 " out of bounds.", LOG_WARN
, "Unknown unit 'snarks'.",
262 OK("HeartbeatPeriod 1 hour", PH_VALIDATE
);
263 OK("LogTimeGranularity 100 milliseconds", PH_VALIDATE
);
265 WANT_LOG("ControlSocket \"string with trailing garbage\" bogus", LOG_WARN
,
266 "Error while parsing configuration: "
267 "Excess data after quoted string", PH_GETLINES
);
268 WANT_LOG("ControlSocket \"bogus escape \\@\"", LOG_WARN
,
269 "Error while parsing configuration: "
270 "Invalid escape sequence in quoted string", PH_GETLINES
);
273 clear_log_messages();
277 #define MEGABYTEIFY(mb) (U64_LITERAL(mb) << 20)
279 test_have_enough_mem_for_dircache(void *arg
)
282 or_options_t
*opt
=NULL
;
283 or_options_t
*dflt
=NULL
;
284 config_line_t
*cl
=NULL
;
287 const char *configuration
= "ORPort 8080\nDirCache 1", *expect_errmsg
;
289 setup_options(opt
, dflt
);
290 setup_log_callback();
293 r
= config_get_lines(configuration
, &cl
, 1);
294 tt_int_op(r
, OP_EQ
, 0);
296 r
= config_assign(&options_format
, opt
, cl
, 0, &msg
);
297 tt_int_op(r
, OP_EQ
, 0);
299 /* 300 MB RAM available, DirCache enabled */
300 r
= have_enough_mem_for_dircache(opt
, MEGABYTEIFY(300), &msg
);
301 tt_int_op(r
, OP_EQ
, 0);
302 tt_ptr_op(msg
, OP_EQ
, NULL
);
304 /* 200 MB RAM available, DirCache enabled */
305 r
= have_enough_mem_for_dircache(opt
, MEGABYTEIFY(200), &msg
);
306 tt_int_op(r
, OP_EQ
, -1);
307 expect_errmsg
= "Being a directory cache (default) with less than ";
308 if (!strstr(msg
, expect_errmsg
)) {
309 TT_DIE(("Expected error message <%s> from <%s>, but got <%s>.",
310 expect_errmsg
, configuration
, msg
));
314 config_free_lines(cl
); cl
= NULL
;
315 configuration
= "ORPort 8080\nDirCache 1\nBridgeRelay 1";
316 r
= config_get_lines(configuration
, &cl
, 1);
317 tt_int_op(r
, OP_EQ
, 0);
319 r
= config_assign(&options_format
, opt
, cl
, 0, &msg
);
320 tt_int_op(r
, OP_EQ
, 0);
322 /* 300 MB RAM available, DirCache enabled, Bridge */
323 r
= have_enough_mem_for_dircache(opt
, MEGABYTEIFY(300), &msg
);
324 tt_int_op(r
, OP_EQ
, 0);
325 tt_ptr_op(msg
, OP_EQ
, NULL
);
327 /* 200 MB RAM available, DirCache enabled, Bridge */
328 r
= have_enough_mem_for_dircache(opt
, MEGABYTEIFY(200), &msg
);
329 tt_int_op(r
, OP_EQ
, -1);
330 expect_errmsg
= "Running a Bridge with less than ";
331 if (!strstr(msg
, expect_errmsg
)) {
332 TT_DIE(("Expected error message <%s> from <%s>, but got <%s>.",
333 expect_errmsg
, configuration
, msg
));
337 config_free_lines(cl
); cl
= NULL
;
338 configuration
= "ORPort 8080\nDirCache 0";
339 r
= config_get_lines(configuration
, &cl
, 1);
340 tt_int_op(r
, OP_EQ
, 0);
342 r
= config_assign(&options_format
, opt
, cl
, 0, &msg
);
343 tt_int_op(r
, OP_EQ
, 0);
345 /* 200 MB RAM available, DirCache disabled */
346 r
= have_enough_mem_for_dircache(opt
, MEGABYTEIFY(200), &msg
);
347 tt_int_op(r
, OP_EQ
, 0);
348 tt_ptr_op(msg
, OP_EQ
, NULL
);
350 /* 300 MB RAM available, DirCache disabled */
351 r
= have_enough_mem_for_dircache(opt
, MEGABYTEIFY(300), &msg
);
352 tt_int_op(r
, OP_EQ
, -1);
353 expect_errmsg
= "DirCache is disabled and we are configured as a ";
354 if (!strstr(msg
, expect_errmsg
)) {
355 TT_DIE(("Expected error message <%s> from <%s>, but got <%s>.",
356 expect_errmsg
, configuration
, msg
));
360 clear_log_messages();
365 or_options_free(dflt
);
366 or_options_free(opt
);
367 config_free_lines(cl
);
371 static const char *fixed_get_uname_result
= NULL
;
374 fixed_get_uname(void)
376 return fixed_get_uname_result
;
379 #define TEST_OPTIONS_OLD_VALUES "TestingV3AuthInitialVotingInterval 1800\n" \
380 "ClientBootstrapConsensusMaxInProgressTries 3\n" \
381 "TestingV3AuthInitialVoteDelay 300\n" \
382 "TestingV3AuthInitialDistDelay 300\n" \
383 "TestingClientMaxIntervalWithoutRequest 600\n" \
384 "TestingDirConnectionMaxStall 600\n" \
386 #define TEST_OPTIONS_DEFAULT_VALUES TEST_OPTIONS_OLD_VALUES \
387 "MaxClientCircuitsPending 1\n" \
388 "RendPostPeriod 1000\n" \
389 "KeepAlivePeriod 1\n" \
391 "V3AuthVotingInterval 300\n" \
392 "V3AuthVoteDelay 20\n" \
393 "V3AuthDistDelay 20\n" \
394 "V3AuthNIntervalsValid 3\n" \
395 "ClientUseIPv4 1\n" \
396 "VirtualAddrNetworkIPv4 127.192.0.0/10\n" \
397 "VirtualAddrNetworkIPv6 [FE80::]/10\n" \
398 "UseEntryGuards 1\n" \
399 "Schedulers Vanilla\n" \
400 "ClientDNSRejectInternalAddresses 1\n"
403 or_options_t
*old_opt
;
405 or_options_t
*def_opt
;
406 } options_test_data_t
;
408 static void free_options_test_data(options_test_data_t
*td
);
410 static options_test_data_t
*
411 get_options_test_data(const char *conf
)
415 config_line_t
*cl
=NULL
;
416 options_test_data_t
*result
= tor_malloc(sizeof(options_test_data_t
));
417 result
->opt
= options_new();
418 result
->old_opt
= options_new();
419 result
->def_opt
= options_new();
421 // XXX: Really, all of these options should be set to defaults
422 // with options_init(), but about a dozen tests break when I do that.
423 // Being kinda lame and just fixing the immedate breakage for now..
424 result
->opt
->ConnectionPadding
= -1; // default must be "auto"
426 rv
= config_get_lines(conf
, &cl
, 1);
427 tt_int_op(rv
, OP_EQ
, 0);
428 rv
= config_assign(&options_format
, result
->opt
, cl
, 0, &msg
);
430 /* Display the parse error message by comparing it with an empty string */
431 tt_str_op(msg
, OP_EQ
, "");
433 tt_int_op(rv
, OP_EQ
, 0);
434 config_free_lines(cl
);
435 result
->opt
->LogTimeGranularity
= 1;
436 result
->opt
->TokenBucketRefillInterval
= 1;
437 rv
= config_get_lines(TEST_OPTIONS_OLD_VALUES
, &cl
, 1);
438 tt_int_op(rv
, OP_EQ
, 0);
439 rv
= config_assign(&options_format
, result
->def_opt
, cl
, 0, &msg
);
441 /* Display the parse error message by comparing it with an empty string */
442 tt_str_op(msg
, OP_EQ
, "");
444 tt_int_op(rv
, OP_EQ
, 0);
447 config_free_lines(cl
);
449 free_options_test_data(result
);
451 /* Callers expect a non-NULL result, so just die if we can't provide one.
459 free_options_test_data(options_test_data_t
*td
)
462 or_options_free(td
->old_opt
);
463 or_options_free(td
->opt
);
464 or_options_free(td
->def_opt
);
469 test_options_validate__uname_for_server(void *ignored
)
473 options_test_data_t
*tdata
= get_options_test_data(
474 "ORPort 127.0.0.1:5555");
475 setup_capture_of_logs(LOG_WARN
);
477 MOCK(get_uname
, fixed_get_uname
);
478 fixed_get_uname_result
= "Windows 95";
479 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
480 expect_log_msg("Tor is running as a server, but you"
481 " are running Windows 95; this probably won't work. See https://www"
482 ".torproject.org/docs/faq.html#BestOSForRelay for details.\n");
485 fixed_get_uname_result
= "Windows 98";
486 mock_clean_saved_logs();
487 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
488 expect_log_msg("Tor is running as a server, but you"
489 " are running Windows 98; this probably won't work. See https://www"
490 ".torproject.org/docs/faq.html#BestOSForRelay for details.\n");
493 fixed_get_uname_result
= "Windows Me";
494 mock_clean_saved_logs();
495 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
496 expect_log_msg("Tor is running as a server, but you"
497 " are running Windows Me; this probably won't work. See https://www"
498 ".torproject.org/docs/faq.html#BestOSForRelay for details.\n");
501 fixed_get_uname_result
= "Windows 2000";
502 mock_clean_saved_logs();
503 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
504 expect_no_log_entry();
509 free_options_test_data(tdata
);
511 teardown_capture_of_logs();
515 test_options_validate__outbound_addresses(void *ignored
)
520 options_test_data_t
*tdata
= get_options_test_data(
521 "OutboundBindAddress xxyy!!!sdfaf");
523 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
524 tt_int_op(ret
, OP_EQ
, -1);
525 tt_str_op(msg
, OP_EQ
, "Multiple outbound bind addresses configured: "
529 free_options_test_data(tdata
);
534 test_options_validate__data_directory(void *ignored
)
539 options_test_data_t
*tdata
= get_options_test_data(
540 "DataDirectory longreallyl"
541 "ongLONGLONGlongreallylong"
542 "LONGLONGlongreallylongLON"
543 "GLONGlongreallylongLONGLO"
544 "NGlongreallylongLONGLONGl"
545 "ongreallylongLONGLONGlong"
546 "reallylongLONGLONGlongrea"
547 "llylongLONGLONGlongreally"
548 "longLONGLONGlongreallylon"
549 "gLONGLONGlongreallylongLO"
550 "NGLONGlongreallylongLONGL"
551 "ONGlongreallylongLONGLONG"
552 "longreallylongLONGLONGlon"
553 "greallylongLONGLONGlongre"
554 "allylongLONGLONGlongreall"
555 "ylongLONGLONGlongreallylo"
556 "ngLONGLONGlongreallylongL"
557 "ONGLONGlongreallylongLONG"
558 "LONG"); // 440 characters
560 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
561 tt_int_op(ret
, OP_EQ
, -1);
562 tt_str_op(msg
, OP_EQ
, "Invalid DataDirectory");
565 free_options_test_data(tdata
);
570 test_options_validate__nickname(void *ignored
)
575 options_test_data_t
*tdata
= get_options_test_data(
576 "Nickname ThisNickNameIsABitTooLong");
578 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
579 tt_int_op(ret
, OP_EQ
, -1);
580 tt_str_op(msg
, OP_EQ
,
581 "Nickname 'ThisNickNameIsABitTooLong', nicknames must be between "
582 "1 and 19 characters inclusive, and must contain only the "
583 "characters [a-zA-Z0-9].");
586 free_options_test_data(tdata
);
587 tdata
= get_options_test_data("Nickname AMoreValidNick");
588 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
589 tt_int_op(ret
, OP_EQ
, -1);
590 tt_str_op(msg
, OP_EQ
, "ConnLimit must be greater than 0, but was set to 0");
593 free_options_test_data(tdata
);
594 tdata
= get_options_test_data("DataDirectory /tmp/somewhere");
595 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
596 tt_int_op(ret
, OP_EQ
, -1);
597 tt_str_op(msg
, OP_EQ
, "ConnLimit must be greater than 0, but was set to 0");
600 free_options_test_data(tdata
);
605 test_options_validate__contactinfo(void *ignored
)
610 options_test_data_t
*tdata
= get_options_test_data(
611 "ORPort 127.0.0.1:5555");
612 setup_capture_of_logs(LOG_DEBUG
);
613 tdata
->opt
->ContactInfo
= NULL
;
615 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
616 tt_int_op(ret
, OP_EQ
, -1);
618 "Your ContactInfo config option is not"
619 " set. Please consider setting it, so we can contact you if your"
620 " server is misconfigured or something else goes wrong.\n");
623 free_options_test_data(tdata
);
624 tdata
= get_options_test_data("ORPort 127.0.0.1:5555\n"
625 "ContactInfo hella@example.org");
626 mock_clean_saved_logs();
627 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
628 tt_int_op(ret
, OP_EQ
, -1);
630 "Your ContactInfo config option is not"
631 " set. Please consider setting it, so we can contact you if your"
632 " server is misconfigured or something else goes wrong.\n");
636 teardown_capture_of_logs();
637 free_options_test_data(tdata
);
642 test_options_validate__logs(void *ignored
)
648 int orig_quiet_level
= quiet_level
;
649 options_test_data_t
*tdata
= get_options_test_data("");
650 tdata
->opt
->Logs
= NULL
;
651 tdata
->opt
->RunAsDaemon
= 0;
653 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
654 tt_str_op(tdata
->opt
->Logs
->key
, OP_EQ
, "Log");
655 tt_str_op(tdata
->opt
->Logs
->value
, OP_EQ
, "notice stdout");
657 tt_int_op(ret
, OP_EQ
, -1);
659 free_options_test_data(tdata
);
660 tdata
= get_options_test_data("");
661 tdata
->opt
->Logs
= NULL
;
662 tdata
->opt
->RunAsDaemon
= 0;
664 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
665 tt_str_op(tdata
->opt
->Logs
->key
, OP_EQ
, "Log");
666 tt_str_op(tdata
->opt
->Logs
->value
, OP_EQ
, "warn stdout");
668 tt_int_op(ret
, OP_EQ
, -1);
670 free_options_test_data(tdata
);
671 tdata
= get_options_test_data("");
672 tdata
->opt
->Logs
= NULL
;
673 tdata
->opt
->RunAsDaemon
= 0;
675 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
676 tt_assert(!tdata
->opt
->Logs
);
678 tt_int_op(ret
, OP_EQ
, -1);
680 free_options_test_data(tdata
);
681 tdata
= get_options_test_data("");
682 tdata
->opt
->Logs
= NULL
;
683 tdata
->opt
->RunAsDaemon
= 0;
684 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 1, &msg
);
685 tt_assert(!tdata
->opt
->Logs
);
687 tt_int_op(ret
, OP_EQ
, -1);
689 free_options_test_data(tdata
);
690 tdata
= get_options_test_data("");
691 tdata
->opt
->Logs
= NULL
;
692 tdata
->opt
->RunAsDaemon
= 1;
693 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
694 tt_assert(!tdata
->opt
->Logs
);
696 tt_int_op(ret
, OP_EQ
, -1);
698 free_options_test_data(tdata
);
699 tdata
= get_options_test_data("");
700 tdata
->opt
->RunAsDaemon
= 0;
701 config_line_t
*cl
=NULL
;
702 config_get_lines("Log foo", &cl
, 1);
703 tdata
->opt
->Logs
= cl
;
704 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
705 tt_int_op((intptr_t)tdata
->opt
->Logs
, OP_EQ
, (intptr_t)cl
);
706 tt_int_op(ret
, OP_EQ
, -1);
709 quiet_level
= orig_quiet_level
;
710 free_options_test_data(tdata
);
714 /* static config_line_t * */
715 /* mock_config_line(const char *key, const char *val) */
717 /* config_line_t *config_line = tor_malloc(sizeof(config_line_t)); */
718 /* memset(config_line, 0, sizeof(config_line_t)); */
719 /* config_line->key = tor_strdup(key); */
720 /* config_line->value = tor_strdup(val); */
721 /* return config_line; */
725 test_options_validate__authdir(void *ignored
)
730 setup_capture_of_logs(LOG_INFO
);
731 options_test_data_t
*tdata
= get_options_test_data(
732 "AuthoritativeDirectory 1\n"
733 "Address this.should.not!exist!.example.org");
735 sandbox_disable_getaddrinfo_cache();
737 MOCK(tor_addr_lookup
, mock_tor_addr_lookup__fail_on_bad_addrs
);
738 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
739 UNMOCK(tor_addr_lookup
);
740 tt_int_op(ret
, OP_EQ
, -1);
741 tt_str_op(msg
, OP_EQ
, "Failed to resolve/guess local address. See logs for"
743 expect_log_msg("Could not resolve local Address "
744 "'this.should.not!exist!.example.org'. Failing.\n");
747 free_options_test_data(tdata
);
748 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
749 "Address 100.200.10.1");
750 mock_clean_saved_logs();
751 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
752 tt_int_op(ret
, OP_EQ
, -1);
753 tt_str_op(msg
, OP_EQ
, "Authoritative directory servers must set "
757 free_options_test_data(tdata
);
758 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
759 "Address 100.200.10.1\n");
760 mock_clean_saved_logs();
761 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
762 tt_int_op(ret
, OP_EQ
, -1);
763 tt_str_op(msg
, OP_EQ
,
764 "Authoritative directory servers must set ContactInfo");
767 free_options_test_data(tdata
);
768 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
769 "Address 100.200.10.1\n"
770 "TestingTorNetwork 1\n");
771 mock_clean_saved_logs();
772 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
773 tt_int_op(ret
, OP_EQ
, -1);
774 tt_str_op(msg
, OP_EQ
, "AuthoritativeDir is set, but none of (Bridge/V3)"
775 "AuthoritativeDir is set.");
778 free_options_test_data(tdata
);
779 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
780 "Address 100.200.10.1\n"
781 "ContactInfo hello@hello.com\n");
782 mock_clean_saved_logs();
783 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
784 tt_int_op(ret
, OP_EQ
, -1);
785 tt_str_op(msg
, OP_EQ
, "AuthoritativeDir is set, but none of (Bridge/V3)"
786 "AuthoritativeDir is set.");
789 free_options_test_data(tdata
);
790 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
791 "Address 100.200.10.1\n"
792 "RecommendedVersions 1.2, 3.14\n"
793 "ContactInfo hello@hello.com\n");
794 mock_clean_saved_logs();
795 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
796 tt_str_op(tdata
->opt
->RecommendedClientVersions
->value
, OP_EQ
, "1.2, 3.14");
797 tt_str_op(tdata
->opt
->RecommendedServerVersions
->value
, OP_EQ
, "1.2, 3.14");
800 free_options_test_data(tdata
);
801 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
802 "Address 100.200.10.1\n"
803 "RecommendedVersions 1.2, 3.14\n"
804 "RecommendedClientVersions 25\n"
805 "RecommendedServerVersions 4.18\n"
806 "ContactInfo hello@hello.com\n");
807 mock_clean_saved_logs();
808 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
809 tt_str_op(tdata
->opt
->RecommendedClientVersions
->value
, OP_EQ
, "25");
810 tt_str_op(tdata
->opt
->RecommendedServerVersions
->value
, OP_EQ
, "4.18");
813 free_options_test_data(tdata
);
814 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
815 "Address 100.200.10.1\n"
816 "VersioningAuthoritativeDirectory 1\n"
817 "RecommendedVersions 1.2, 3.14\n"
818 "RecommendedClientVersions 25\n"
819 "RecommendedServerVersions 4.18\n"
820 "ContactInfo hello@hello.com\n");
821 mock_clean_saved_logs();
822 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
823 tt_str_op(msg
, OP_EQ
, "AuthoritativeDir is set, but none of (Bridge/V3)"
824 "AuthoritativeDir is set.");
827 free_options_test_data(tdata
);
828 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
829 "Address 100.200.10.1\n"
830 "VersioningAuthoritativeDirectory 1\n"
831 "RecommendedServerVersions 4.18\n"
832 "ContactInfo hello@hello.com\n");
833 mock_clean_saved_logs();
834 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
835 tt_str_op(msg
, OP_EQ
, "Versioning authoritative dir servers must set "
836 "Recommended*Versions.");
839 free_options_test_data(tdata
);
840 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
841 "Address 100.200.10.1\n"
842 "VersioningAuthoritativeDirectory 1\n"
843 "RecommendedClientVersions 4.18\n"
844 "ContactInfo hello@hello.com\n");
845 mock_clean_saved_logs();
846 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
847 tt_str_op(msg
, OP_EQ
, "Versioning authoritative dir servers must set "
848 "Recommended*Versions.");
851 free_options_test_data(tdata
);
852 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
853 "Address 100.200.10.1\n"
855 "ContactInfo hello@hello.com\n");
856 mock_clean_saved_logs();
857 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
858 expect_log_msg("Authoritative directory servers "
859 "can't set UseEntryGuards. Disabling.\n");
860 tt_int_op(tdata
->opt
->UseEntryGuards
, OP_EQ
, 0);
863 free_options_test_data(tdata
);
864 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
865 "Address 100.200.10.1\n"
866 "V3AuthoritativeDir 1\n"
867 "ContactInfo hello@hello.com\n");
868 mock_clean_saved_logs();
869 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
870 expect_log_msg("Authoritative directories always try"
871 " to download extra-info documents. Setting DownloadExtraInfo.\n");
872 tt_int_op(tdata
->opt
->DownloadExtraInfo
, OP_EQ
, 1);
875 free_options_test_data(tdata
);
876 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
877 "Address 100.200.10.1\n"
878 "DownloadExtraInfo 1\n"
879 "V3AuthoritativeDir 1\n"
880 "ContactInfo hello@hello.com\n");
881 mock_clean_saved_logs();
882 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
883 expect_no_log_msg("Authoritative directories always try"
884 " to download extra-info documents. Setting DownloadExtraInfo.\n");
885 tt_int_op(tdata
->opt
->DownloadExtraInfo
, OP_EQ
, 1);
888 free_options_test_data(tdata
);
889 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
890 "Address 100.200.10.1\n"
891 "ContactInfo hello@hello.com\n");
892 mock_clean_saved_logs();
893 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
894 tt_str_op(msg
, OP_EQ
, "AuthoritativeDir is set, but none of (Bridge/V3)"
895 "AuthoritativeDir is set.");
898 free_options_test_data(tdata
);
899 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
900 "Address 100.200.10.1\n"
901 "BridgeAuthoritativeDir 1\n"
902 "ContactInfo hello@hello.com\n"
903 "V3BandwidthsFile non-existent-file\n");
904 mock_clean_saved_logs();
905 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
906 tt_str_op(msg
, OP_EQ
,
907 "Running as authoritative directory, but no DirPort set.");
910 free_options_test_data(tdata
);
911 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
912 "Address 100.200.10.1\n"
913 "BridgeAuthoritativeDir 1\n"
914 "ContactInfo hello@hello.com\n"
915 "V3BandwidthsFile non-existent-file\n");
916 mock_clean_saved_logs();
917 options_validate(NULL
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
918 tt_str_op(msg
, OP_EQ
,
919 "Running as authoritative directory, but no DirPort set.");
922 free_options_test_data(tdata
);
923 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
924 "Address 100.200.10.1\n"
925 "BridgeAuthoritativeDir 1\n"
926 "ContactInfo hello@hello.com\n"
927 "GuardfractionFile non-existent-file\n");
928 mock_clean_saved_logs();
929 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
930 tt_str_op(msg
, OP_EQ
,
931 "Running as authoritative directory, but no DirPort set.");
934 free_options_test_data(tdata
);
935 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
936 "Address 100.200.10.1\n"
937 "BridgeAuthoritativeDir 1\n"
938 "ContactInfo hello@hello.com\n"
939 "GuardfractionFile non-existent-file\n");
940 mock_clean_saved_logs();
941 options_validate(NULL
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
942 tt_str_op(msg
, OP_EQ
,
943 "Running as authoritative directory, but no DirPort set.");
946 free_options_test_data(tdata
);
947 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
948 "Address 100.200.10.1\n"
949 "BridgeAuthoritativeDir 1\n"
950 "ContactInfo hello@hello.com\n");
951 mock_clean_saved_logs();
952 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
953 tt_int_op(ret
, OP_EQ
, -1);
954 tt_str_op(msg
, OP_EQ
,
955 "Running as authoritative directory, but no DirPort set.");
958 free_options_test_data(tdata
);
959 tdata
= get_options_test_data("AuthoritativeDirectory 1\n"
960 "Address 100.200.10.1\n"
962 "BridgeAuthoritativeDir 1\n"
963 "ContactInfo hello@hello.com\n");
964 mock_clean_saved_logs();
965 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
966 tt_int_op(ret
, OP_EQ
, -1);
967 tt_str_op(msg
, OP_EQ
,
968 "Running as authoritative directory, but no ORPort set.");
971 // TODO: This case can't be reached, since clientonly is used to
972 // check when parsing port lines as well.
973 /* free_options_test_data(tdata); */
974 /* tdata = get_options_test_data("AuthoritativeDirectory 1\n" */
975 /* "Address 100.200.10.1\n" */
976 /* "DirPort 999\n" */
978 /* "ClientOnly 1\n" */
979 /* "BridgeAuthoritativeDir 1\n" */
980 /* "ContactInfo hello@hello.com\n" ); */
981 /* mock_clean_saved_logs(); */
982 /* ret = options_validate(tdata->old_opt, tdata->opt, */
983 /* tdata->def_opt, 0, &msg); */
984 /* tt_int_op(ret, OP_EQ, -1); */
985 /* tt_str_op(msg, OP_EQ, "Running as authoritative directory, " */
986 /* "but ClientOnly also set."); */
989 teardown_capture_of_logs();
990 // sandbox_free_getaddrinfo_cache();
991 free_options_test_data(tdata
);
996 test_options_validate__relay_with_hidden_services(void *ignored
)
1000 setup_capture_of_logs(LOG_DEBUG
);
1001 options_test_data_t
*tdata
= get_options_test_data(
1002 "ORPort 127.0.0.1:5555\n"
1004 "/Library/Tor/var/lib/tor/hidden_service/\n"
1005 "HiddenServicePort 80 127.0.0.1:8080\n"
1008 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1010 "Tor is currently configured as a relay and a hidden service. "
1011 "That's not very secure: you should probably run your hidden servi"
1012 "ce in a separate Tor process, at least -- see "
1013 "https://trac.torproject.org/8742\n");
1016 teardown_capture_of_logs();
1017 free_options_test_data(tdata
);
1021 // TODO: it doesn't seem possible to hit the case of having no port lines at
1022 // all, since there will be a default created for SocksPort
1024 /* test_options_validate__ports(void *ignored) */
1026 /* (void)ignored; */
1029 /* setup_capture_of_logs(LOG_WARN); */
1030 /* options_test_data_t *tdata = get_options_test_data(""); */
1031 /* ret = options_validate(tdata->old_opt, tdata->opt, */
1032 /* tdata->def_opt, 0, &msg); */
1033 /* expect_log_msg("SocksPort, TransPort, NATDPort, DNSPort, and ORPort " */
1034 /* "are all undefined, and there aren't any hidden services " */
1035 /* "configured. " */
1036 /* " Tor will still run, but probably won't do anything.\n"); */
1038 /* teardown_capture_of_logs(); */
1039 /* free_options_test_data(tdata); */
1040 /* tor_free(msg); */
1044 test_options_validate__transproxy(void *ignored
)
1049 options_test_data_t
*tdata
;
1051 #ifdef USE_TRANSPARENT
1052 // Test default trans proxy
1053 tdata
= get_options_test_data("TransProxyType default\n");
1055 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1056 tt_int_op(ret
, OP_EQ
, -1);
1057 tt_int_op(tdata
->opt
->TransProxyType_parsed
, OP_EQ
, TPT_DEFAULT
);
1060 // Test pf-divert trans proxy
1061 free_options_test_data(tdata
);
1062 tdata
= get_options_test_data("TransProxyType pf-divert\n");
1063 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1064 tt_int_op(ret
, OP_EQ
, -1);
1066 #if !defined(OpenBSD) && !defined( DARWIN )
1067 tt_str_op(msg
, OP_EQ
,
1068 "pf-divert is a OpenBSD-specific and OS X/Darwin-specific feature.");
1070 tt_int_op(tdata
->opt
->TransProxyType_parsed
, OP_EQ
, TPT_PF_DIVERT
);
1071 tt_str_op(msg
, OP_EQ
, "Cannot use TransProxyType without "
1072 "any valid TransPort.");
1073 #endif /* !defined(OpenBSD) && !defined( DARWIN ) */
1076 // Test tproxy trans proxy
1077 free_options_test_data(tdata
);
1078 tdata
= get_options_test_data("TransProxyType tproxy\n");
1079 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1080 tt_int_op(ret
, OP_EQ
, -1);
1082 #if !defined(__linux__)
1083 tt_str_op(msg
, OP_EQ
, "TPROXY is a Linux-specific feature.");
1085 tt_int_op(tdata
->opt
->TransProxyType_parsed
, OP_EQ
, TPT_TPROXY
);
1086 tt_str_op(msg
, OP_EQ
, "Cannot use TransProxyType without any valid "
1088 #endif /* !defined(__linux__) */
1091 // Test ipfw trans proxy
1092 free_options_test_data(tdata
);
1093 tdata
= get_options_test_data("TransProxyType ipfw\n");
1094 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1095 tt_int_op(ret
, OP_EQ
, -1);
1097 #ifndef KERNEL_MAY_SUPPORT_IPFW
1098 tt_str_op(msg
, OP_EQ
, "ipfw is a FreeBSD-specific and OS X/Darwin-specific "
1101 tt_int_op(tdata
->opt
->TransProxyType_parsed
, OP_EQ
, TPT_IPFW
);
1102 tt_str_op(msg
, OP_EQ
, "Cannot use TransProxyType without any valid "
1104 #endif /* !defined(KERNEL_MAY_SUPPORT_IPFW) */
1107 // Test unknown trans proxy
1108 free_options_test_data(tdata
);
1109 tdata
= get_options_test_data("TransProxyType non-existent\n");
1110 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1111 tt_int_op(ret
, OP_EQ
, -1);
1112 tt_str_op(msg
, OP_EQ
, "Unrecognized value for TransProxyType");
1115 // Test trans proxy success
1116 free_options_test_data(tdata
);
1119 #if defined(__linux__)
1120 tdata
= get_options_test_data("TransProxyType tproxy\n"
1121 "TransPort 127.0.0.1:123\n");
1122 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1123 tt_int_op(ret
, OP_EQ
, -1);
1124 tt_str_op(msg
, OP_EQ
, "ConnLimit must be greater than 0, but was set to 0");
1125 #elif defined(KERNEL_MAY_SUPPORT_IPFW)
1126 tdata
= get_options_test_data("TransProxyType ipfw\n"
1127 "TransPort 127.0.0.1:123\n");
1128 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1129 tt_int_op(ret
, OP_EQ
, -1);
1130 tt_str_op(msg
, OP_EQ
, "ConnLimit must be greater than 0, but was set to 0");
1132 #elif defined(OpenBSD)
1133 tdata
= get_options_test_data("TransProxyType pf-divert\n"
1134 "TransPort 127.0.0.1:123\n");
1135 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1136 tt_int_op(ret
, OP_EQ
, -1);
1137 tt_str_op(msg
, OP_EQ
, "ConnLimit must be greater than 0, but was set to 0");
1139 #elif defined(__NetBSD__)
1140 tdata
= get_options_test_data("TransProxyType default\n"
1141 "TransPort 127.0.0.1:123\n");
1142 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1143 tt_int_op(ret
, OP_EQ
, -1);
1144 tt_str_op(msg
, OP_EQ
, "ConnLimit must be greater than 0, but was set to 0");
1146 #endif /* defined(__linux__) || ... */
1148 // Assert that a test has run for some TransProxyType
1151 #else /* !(defined(USE_TRANSPARENT)) */
1152 tdata
= get_options_test_data("TransPort 127.0.0.1:555\n");
1154 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1155 tt_int_op(ret
, OP_EQ
, -1);
1156 tt_str_op(msg
, OP_EQ
, "TransPort is disabled in this build.");
1158 #endif /* defined(USE_TRANSPARENT) */
1161 free_options_test_data(tdata
);
1165 NS_DECL(country_t
, geoip_get_country
, (const char *country
));
1168 NS(geoip_get_country
)(const char *countrycode
)
1171 CALLED(geoip_get_country
)++;
1177 test_options_validate__exclude_nodes(void *ignored
)
1181 NS_MOCK(geoip_get_country
);
1185 setup_capture_of_logs(LOG_WARN
);
1186 options_test_data_t
*tdata
= get_options_test_data(
1187 "ExcludeExitNodes {us}\n");
1189 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1190 tt_int_op(ret
, OP_EQ
, -1);
1191 tt_int_op(smartlist_len(tdata
->opt
->ExcludeExitNodesUnion_
->list
), OP_EQ
, 1);
1193 (smartlist_get(tdata
->opt
->ExcludeExitNodesUnion_
->list
, 0)),
1197 free_options_test_data(tdata
);
1198 tdata
= get_options_test_data("ExcludeNodes {cn}\n");
1199 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1200 tt_int_op(ret
, OP_EQ
, -1);
1201 tt_int_op(smartlist_len(tdata
->opt
->ExcludeExitNodesUnion_
->list
), OP_EQ
, 1);
1203 (smartlist_get(tdata
->opt
->ExcludeExitNodesUnion_
->list
, 0)),
1207 free_options_test_data(tdata
);
1208 tdata
= get_options_test_data("ExcludeNodes {cn}\n"
1209 "ExcludeExitNodes {us} {cn}\n");
1210 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1211 tt_int_op(ret
, OP_EQ
, -1);
1212 tt_int_op(smartlist_len(tdata
->opt
->ExcludeExitNodesUnion_
->list
), OP_EQ
, 2);
1214 (smartlist_get(tdata
->opt
->ExcludeExitNodesUnion_
->list
, 0)),
1215 OP_EQ
, "{us} {cn}");
1217 (smartlist_get(tdata
->opt
->ExcludeExitNodesUnion_
->list
, 1)),
1221 free_options_test_data(tdata
);
1222 tdata
= get_options_test_data("ExcludeNodes {cn}\n"
1224 mock_clean_saved_logs();
1225 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1226 tt_int_op(ret
, OP_EQ
, -1);
1228 "You have asked to exclude certain relays from all positions "
1229 "in your circuits. Expect hidden services and other Tor "
1230 "features to be broken in unpredictable ways.\n");
1233 free_options_test_data(tdata
);
1234 tdata
= get_options_test_data("ExcludeNodes {cn}\n");
1235 mock_clean_saved_logs();
1236 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1237 tt_int_op(ret
, OP_EQ
, -1);
1239 "You have asked to exclude certain relays from all positions "
1240 "in your circuits. Expect hidden services and other Tor "
1241 "features to be broken in unpredictable ways.\n");
1245 NS_UNMOCK(geoip_get_country
);
1246 teardown_capture_of_logs();
1247 free_options_test_data(tdata
);
1252 test_options_validate__node_families(void *ignored
)
1257 options_test_data_t
*tdata
= get_options_test_data(
1258 "NodeFamily flux, flax\n"
1259 "NodeFamily somewhere\n");
1261 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1262 tt_int_op(ret
, OP_EQ
, -1);
1263 tt_assert(tdata
->opt
->NodeFamilySets
);
1264 tt_int_op(smartlist_len(tdata
->opt
->NodeFamilySets
), OP_EQ
, 2);
1265 tt_str_op((char *)(smartlist_get(
1266 ((routerset_t
*)smartlist_get(tdata
->opt
->NodeFamilySets
, 0))->list
, 0)),
1268 tt_str_op((char *)(smartlist_get(
1269 ((routerset_t
*)smartlist_get(tdata
->opt
->NodeFamilySets
, 0))->list
, 1)),
1271 tt_str_op((char *)(smartlist_get(
1272 ((routerset_t
*)smartlist_get(tdata
->opt
->NodeFamilySets
, 1))->list
, 0)),
1273 OP_EQ
, "somewhere");
1276 free_options_test_data(tdata
);
1277 tdata
= get_options_test_data("");
1279 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1280 tt_int_op(ret
, OP_EQ
, -1);
1281 tt_assert(!tdata
->opt
->NodeFamilySets
);
1284 free_options_test_data(tdata
);
1285 tdata
= get_options_test_data("NodeFamily !flux\n");
1287 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1288 tt_int_op(ret
, OP_EQ
, -1);
1289 tt_assert(tdata
->opt
->NodeFamilySets
);
1290 tt_int_op(smartlist_len(tdata
->opt
->NodeFamilySets
), OP_EQ
, 0);
1294 free_options_test_data(tdata
);
1299 test_options_validate__token_bucket(void *ignored
)
1304 options_test_data_t
*tdata
= get_options_test_data("");
1306 tdata
->opt
->TokenBucketRefillInterval
= 0;
1307 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1308 tt_int_op(ret
, OP_EQ
, -1);
1309 tt_str_op(msg
, OP_EQ
,
1310 "TokenBucketRefillInterval must be between 1 and 1000 inclusive.");
1313 tdata
->opt
->TokenBucketRefillInterval
= 1001;
1314 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1315 tt_int_op(ret
, OP_EQ
, -1);
1316 tt_str_op(msg
, OP_EQ
,
1317 "TokenBucketRefillInterval must be between 1 and 1000 inclusive.");
1321 free_options_test_data(tdata
);
1326 test_options_validate__recommended_packages(void *ignored
)
1331 setup_capture_of_logs(LOG_WARN
);
1332 options_test_data_t
*tdata
= get_options_test_data(
1333 "RecommendedPackages foo 1.2 http://foo.com sha1=123123123123\n"
1334 "RecommendedPackages invalid-package-line\n");
1336 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1337 tt_int_op(ret
, OP_EQ
, -1);
1338 expect_no_log_msg("Invalid RecommendedPackage line "
1339 "invalid-package-line will be ignored\n");
1342 escaped(NULL
); // This will free the leaking memory from the previous escaped
1343 teardown_capture_of_logs();
1344 free_options_test_data(tdata
);
1349 test_options_validate__fetch_dir(void *ignored
)
1354 options_test_data_t
*tdata
= get_options_test_data(
1355 "FetchDirInfoExtraEarly 1\n"
1356 "FetchDirInfoEarly 0\n");
1358 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1359 tt_int_op(ret
, OP_EQ
, -1);
1360 tt_str_op(msg
, OP_EQ
, "FetchDirInfoExtraEarly requires that you"
1361 " also set FetchDirInfoEarly");
1364 free_options_test_data(tdata
);
1365 tdata
= get_options_test_data("FetchDirInfoExtraEarly 1\n"
1366 "FetchDirInfoEarly 1\n");
1368 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1369 tt_int_op(ret
, OP_EQ
, -1);
1370 tt_str_op(msg
, OP_NE
, "FetchDirInfoExtraEarly requires that you"
1371 " also set FetchDirInfoEarly");
1375 free_options_test_data(tdata
);
1380 test_options_validate__conn_limit(void *ignored
)
1385 options_test_data_t
*tdata
= get_options_test_data(
1388 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1389 tt_int_op(ret
, OP_EQ
, -1);
1390 tt_str_op(msg
, OP_EQ
, "ConnLimit must be greater than 0, but was set to 0");
1393 free_options_test_data(tdata
);
1394 tdata
= get_options_test_data("ConnLimit 1\n");
1396 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1397 tt_int_op(ret
, OP_EQ
, -1);
1398 tt_str_op(msg
, OP_EQ
, "MaxClientCircuitsPending must be between 1 and 1024, "
1399 "but was set to 0");
1403 free_options_test_data(tdata
);
1408 test_options_validate__paths_needed(void *ignored
)
1413 setup_capture_of_logs(LOG_WARN
);
1414 options_test_data_t
*tdata
= get_options_test_data(
1415 "PathsNeededToBuildCircuits 0.1\n"
1418 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1419 tt_int_op(ret
, OP_EQ
, -1);
1420 tt_assert(tdata
->opt
->PathsNeededToBuildCircuits
> 0.24 &&
1421 tdata
->opt
->PathsNeededToBuildCircuits
< 0.26);
1422 expect_log_msg("PathsNeededToBuildCircuits is too low. "
1423 "Increasing to 0.25\n");
1426 free_options_test_data(tdata
);
1427 mock_clean_saved_logs();
1428 tdata
= get_options_test_data("PathsNeededToBuildCircuits 0.99\n"
1431 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1432 tt_int_op(ret
, OP_EQ
, -1);
1433 tt_assert(tdata
->opt
->PathsNeededToBuildCircuits
> 0.94 &&
1434 tdata
->opt
->PathsNeededToBuildCircuits
< 0.96);
1435 expect_log_msg("PathsNeededToBuildCircuits is "
1436 "too high. Decreasing to 0.95\n");
1439 free_options_test_data(tdata
);
1440 mock_clean_saved_logs();
1441 tdata
= get_options_test_data("PathsNeededToBuildCircuits 0.91\n"
1444 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1445 tt_int_op(ret
, OP_EQ
, -1);
1446 tt_assert(tdata
->opt
->PathsNeededToBuildCircuits
> 0.90 &&
1447 tdata
->opt
->PathsNeededToBuildCircuits
< 0.92);
1448 expect_no_log_entry();
1452 teardown_capture_of_logs();
1453 free_options_test_data(tdata
);
1458 test_options_validate__max_client_circuits(void *ignored
)
1463 options_test_data_t
*tdata
= get_options_test_data(
1464 "MaxClientCircuitsPending 0\n"
1467 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1468 tt_int_op(ret
, OP_EQ
, -1);
1469 tt_str_op(msg
, OP_EQ
, "MaxClientCircuitsPending must be between 1 and 1024,"
1470 " but was set to 0");
1473 free_options_test_data(tdata
);
1474 tdata
= get_options_test_data("MaxClientCircuitsPending 1025\n"
1477 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1478 tt_int_op(ret
, OP_EQ
, -1);
1479 tt_str_op(msg
, OP_EQ
, "MaxClientCircuitsPending must be between 1 and 1024,"
1480 " but was set to 1025");
1483 free_options_test_data(tdata
);
1484 tdata
= get_options_test_data("MaxClientCircuitsPending 1\n"
1487 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1488 tt_int_op(ret
, OP_EQ
, -1);
1489 tt_str_op(msg
, OP_EQ
, "KeepalivePeriod option must be positive.");
1493 free_options_test_data(tdata
);
1498 test_options_validate__ports(void *ignored
)
1503 options_test_data_t
*tdata
= get_options_test_data(
1504 "FirewallPorts 65537\n"
1505 "MaxClientCircuitsPending 1\n"
1508 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1509 tt_int_op(ret
, OP_EQ
, -1);
1510 tt_str_op(msg
, OP_EQ
, "Port '65537' out of range in FirewallPorts");
1513 free_options_test_data(tdata
);
1514 tdata
= get_options_test_data("FirewallPorts 1\n"
1515 "LongLivedPorts 124444\n"
1516 "MaxClientCircuitsPending 1\n"
1519 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1520 tt_int_op(ret
, OP_EQ
, -1);
1521 tt_str_op(msg
, OP_EQ
, "Port '124444' out of range in LongLivedPorts");
1524 free_options_test_data(tdata
);
1525 tdata
= get_options_test_data("FirewallPorts 1\n"
1526 "LongLivedPorts 2\n"
1527 "RejectPlaintextPorts 112233\n"
1528 "MaxClientCircuitsPending 1\n"
1531 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1532 tt_int_op(ret
, OP_EQ
, -1);
1533 tt_str_op(msg
, OP_EQ
, "Port '112233' out of range in RejectPlaintextPorts");
1536 free_options_test_data(tdata
);
1537 tdata
= get_options_test_data("FirewallPorts 1\n"
1538 "LongLivedPorts 2\n"
1539 "RejectPlaintextPorts 3\n"
1540 "WarnPlaintextPorts 65536\n"
1541 "MaxClientCircuitsPending 1\n"
1544 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1545 tt_int_op(ret
, OP_EQ
, -1);
1546 tt_str_op(msg
, OP_EQ
, "Port '65536' out of range in WarnPlaintextPorts");
1549 free_options_test_data(tdata
);
1550 tdata
= get_options_test_data("FirewallPorts 1\n"
1551 "LongLivedPorts 2\n"
1552 "RejectPlaintextPorts 3\n"
1553 "WarnPlaintextPorts 4\n"
1554 "MaxClientCircuitsPending 1\n"
1557 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1558 tt_int_op(ret
, OP_EQ
, -1);
1559 tt_str_op(msg
, OP_EQ
, "KeepalivePeriod option must be positive.");
1563 free_options_test_data(tdata
);
1568 test_options_validate__reachable_addresses(void *ignored
)
1573 setup_capture_of_logs(LOG_NOTICE
);
1574 options_test_data_t
*tdata
= get_options_test_data(
1575 "FascistFirewall 1\n"
1576 "MaxClientCircuitsPending 1\n"
1579 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1580 tt_int_op(ret
, OP_EQ
, -1);
1581 expect_log_msg("Converting FascistFirewall config "
1582 "option to new format: \"ReachableDirAddresses *:80\"\n");
1583 tt_str_op(tdata
->opt
->ReachableDirAddresses
->value
, OP_EQ
, "*:80");
1584 expect_log_msg("Converting FascistFirewall config "
1585 "option to new format: \"ReachableORAddresses *:443\"\n");
1586 tt_str_op(tdata
->opt
->ReachableORAddresses
->value
, OP_EQ
, "*:443");
1589 free_options_test_data(tdata
);
1590 mock_clean_saved_logs();
1591 tdata
= get_options_test_data("FascistFirewall 1\n"
1592 "ReachableDirAddresses *:81\n"
1593 "ReachableORAddresses *:444\n"
1594 "MaxClientCircuitsPending 1\n"
1596 tdata
->opt
->FirewallPorts
= smartlist_new();
1597 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1598 tt_int_op(ret
, OP_EQ
, -1);
1600 tt_str_op(tdata
->opt
->ReachableDirAddresses
->value
, OP_EQ
, "*:81");
1601 tt_str_op(tdata
->opt
->ReachableORAddresses
->value
, OP_EQ
, "*:444");
1604 free_options_test_data(tdata
);
1605 mock_clean_saved_logs();
1606 tdata
= get_options_test_data("FascistFirewall 1\n"
1607 "FirewallPort 123\n"
1608 "MaxClientCircuitsPending 1\n"
1611 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1612 tt_int_op(ret
, OP_EQ
, -1);
1613 expect_log_msg("Converting FascistFirewall and "
1614 "FirewallPorts config options to new format: "
1615 "\"ReachableAddresses *:123\"\n");
1616 tt_str_op(tdata
->opt
->ReachableAddresses
->value
, OP_EQ
, "*:123");
1619 free_options_test_data(tdata
);
1620 mock_clean_saved_logs();
1621 tdata
= get_options_test_data("FascistFirewall 1\n"
1622 "ReachableAddresses *:82\n"
1623 "ReachableAddresses *:83\n"
1624 "ReachableAddresses reject *:*\n"
1625 "MaxClientCircuitsPending 1\n"
1628 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1629 tt_int_op(ret
, OP_EQ
, -1);
1631 tt_str_op(tdata
->opt
->ReachableAddresses
->value
, OP_EQ
, "*:82");
1634 #define SERVERS_REACHABLE_MSG "Servers must be able to freely connect to" \
1635 " the rest of the Internet, so they must not set Reachable*Addresses or" \
1636 " FascistFirewall or FirewallPorts or ClientUseIPv4 0."
1638 free_options_test_data(tdata
);
1639 tdata
= get_options_test_data("ReachableAddresses *:82\n"
1640 "ORPort 127.0.0.1:5555\n"
1641 "MaxClientCircuitsPending 1\n"
1644 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1645 tt_int_op(ret
, OP_EQ
, -1);
1646 tt_str_op(msg
, OP_EQ
, SERVERS_REACHABLE_MSG
);
1649 free_options_test_data(tdata
);
1650 tdata
= get_options_test_data("ReachableORAddresses *:82\n"
1651 "ORPort 127.0.0.1:5555\n"
1652 "MaxClientCircuitsPending 1\n"
1655 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1656 tt_int_op(ret
, OP_EQ
, -1);
1657 tt_str_op(msg
, OP_EQ
, SERVERS_REACHABLE_MSG
);
1660 free_options_test_data(tdata
);
1661 tdata
= get_options_test_data("ReachableDirAddresses *:82\n"
1662 "ORPort 127.0.0.1:5555\n"
1663 "MaxClientCircuitsPending 1\n"
1666 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1667 tt_int_op(ret
, OP_EQ
, -1);
1668 tt_str_op(msg
, OP_EQ
, SERVERS_REACHABLE_MSG
);
1671 free_options_test_data(tdata
);
1672 tdata
= get_options_test_data("ClientUseIPv4 0\n"
1673 "ORPort 127.0.0.1:5555\n"
1674 "MaxClientCircuitsPending 1\n"
1677 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1678 tt_int_op(ret
, OP_EQ
, -1);
1679 tt_str_op(msg
, OP_EQ
, SERVERS_REACHABLE_MSG
);
1682 /* Test IPv4-only clients setting IPv6 preferences */
1684 free_options_test_data(tdata
);
1685 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1689 "ClientPreferIPv6ORPort 1\n");
1691 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1692 tt_int_op(ret
, OP_EQ
, 0);
1695 free_options_test_data(tdata
);
1696 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1700 "ClientPreferIPv6DirPort 1\n");
1702 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1703 tt_int_op(ret
, OP_EQ
, 0);
1706 /* Now test an IPv4/IPv6 client setting IPv6 preferences */
1708 free_options_test_data(tdata
);
1709 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1712 "ClientPreferIPv6ORPort 1\n"
1713 "ClientPreferIPv6DirPort 1\n");
1715 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1716 tt_int_op(ret
, OP_EQ
, 0);
1717 tt_ptr_op(msg
, OP_EQ
, NULL
);
1719 /* Now test an IPv6 client setting IPv6 preferences */
1721 free_options_test_data(tdata
);
1722 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1724 "ClientPreferIPv6ORPort 1\n"
1725 "ClientPreferIPv6DirPort 1\n");
1727 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1728 tt_int_op(ret
, OP_EQ
, 0);
1729 tt_ptr_op(msg
, OP_EQ
, NULL
);
1731 /* And an implicit (IPv4 disabled) IPv6 client setting IPv6 preferences */
1733 free_options_test_data(tdata
);
1734 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1736 "ClientPreferIPv6ORPort 1\n"
1737 "ClientPreferIPv6DirPort 1\n");
1739 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1740 tt_int_op(ret
, OP_EQ
, 0);
1741 tt_ptr_op(msg
, OP_EQ
, NULL
);
1743 /* And an implicit (bridge) client setting IPv6 preferences */
1745 free_options_test_data(tdata
);
1746 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1748 "Bridge 127.0.0.1:12345\n"
1749 "ClientPreferIPv6ORPort 1\n"
1750 "ClientPreferIPv6DirPort 1\n");
1752 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1753 tt_int_op(ret
, OP_EQ
, 0);
1754 tt_ptr_op(msg
, OP_EQ
, NULL
);
1757 teardown_capture_of_logs();
1758 free_options_test_data(tdata
);
1763 test_options_validate__use_bridges(void *ignored
)
1768 options_test_data_t
*tdata
= get_options_test_data(
1771 "ORPort 127.0.0.1:5555\n"
1772 "MaxClientCircuitsPending 1\n"
1775 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1776 tt_int_op(ret
, OP_EQ
, -1);
1777 tt_str_op(msg
, OP_EQ
, "Servers must be able to freely connect to the rest of"
1778 " the Internet, so they must not set UseBridges.");
1781 free_options_test_data(tdata
);
1782 tdata
= get_options_test_data("UseBridges 1\n"
1783 "MaxClientCircuitsPending 1\n"
1786 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1787 tt_int_op(ret
, OP_EQ
, -1);
1788 tt_str_op(msg
, OP_NE
, "Servers must be able to freely connect to the rest of"
1789 " the Internet, so they must not set UseBridges.");
1792 NS_MOCK(geoip_get_country
);
1793 free_options_test_data(tdata
);
1794 tdata
= get_options_test_data("UseBridges 1\n"
1796 "MaxClientCircuitsPending 1\n"
1799 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1800 tt_int_op(ret
, OP_EQ
, -1);
1801 tt_str_op(msg
, OP_EQ
, "You cannot set both UseBridges and EntryNodes.");
1804 free_options_test_data(tdata
);
1805 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1808 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1809 tt_int_op(ret
, OP_EQ
, -1);
1810 tt_str_op(msg
, OP_EQ
,
1811 "If you set UseBridges, you must specify at least one bridge.");
1814 free_options_test_data(tdata
);
1815 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1818 "UseEntryGuards 0\n"
1821 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1822 tt_int_op(ret
, OP_EQ
, -1);
1823 tt_str_op(msg
, OP_EQ
,
1824 "Setting UseBridges requires also setting UseEntryGuards.");
1827 free_options_test_data(tdata
);
1828 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
1834 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1835 tt_int_op(ret
, OP_EQ
, -1);
1836 tt_str_op(msg
, OP_EQ
, "Bridge line did not parse. See logs for details.");
1840 NS_UNMOCK(geoip_get_country
);
1841 policies_free_all();
1842 free_options_test_data(tdata
);
1847 test_options_validate__entry_nodes(void *ignored
)
1852 NS_MOCK(geoip_get_country
);
1853 options_test_data_t
*tdata
= get_options_test_data(
1855 "UseEntryGuards 0\n"
1856 "MaxClientCircuitsPending 1\n"
1859 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1860 tt_int_op(ret
, OP_EQ
, -1);
1861 tt_str_op(msg
, OP_EQ
,
1862 "If EntryNodes is set, UseEntryGuards must be enabled.");
1865 free_options_test_data(tdata
);
1866 tdata
= get_options_test_data("EntryNodes {cn}\n"
1867 "UseEntryGuards 1\n"
1868 "MaxClientCircuitsPending 1\n"
1871 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1872 tt_int_op(ret
, OP_EQ
, -1);
1873 tt_str_op(msg
, OP_EQ
, "KeepalivePeriod option must be positive.");
1877 NS_UNMOCK(geoip_get_country
);
1878 free_options_test_data(tdata
);
1883 test_options_validate__safe_logging(void *ignored
)
1888 options_test_data_t
*tdata
= get_options_test_data(
1889 "MaxClientCircuitsPending 1\n"
1892 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1893 tt_int_op(ret
, OP_EQ
, -1);
1894 tt_int_op(tdata
->opt
->SafeLogging_
, OP_EQ
, SAFELOG_SCRUB_NONE
);
1897 free_options_test_data(tdata
);
1898 tdata
= get_options_test_data("SafeLogging 0\n"
1899 "MaxClientCircuitsPending 1\n"
1902 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1903 tt_int_op(ret
, OP_EQ
, -1);
1904 tt_int_op(tdata
->opt
->SafeLogging_
, OP_EQ
, SAFELOG_SCRUB_NONE
);
1907 free_options_test_data(tdata
);
1908 tdata
= get_options_test_data("SafeLogging Relay\n"
1909 "MaxClientCircuitsPending 1\n"
1912 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1913 tt_int_op(ret
, OP_EQ
, -1);
1914 tt_int_op(tdata
->opt
->SafeLogging_
, OP_EQ
, SAFELOG_SCRUB_RELAY
);
1917 free_options_test_data(tdata
);
1918 tdata
= get_options_test_data("SafeLogging 1\n"
1919 "MaxClientCircuitsPending 1\n"
1922 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1923 tt_int_op(ret
, OP_EQ
, -1);
1924 tt_int_op(tdata
->opt
->SafeLogging_
, OP_EQ
, SAFELOG_SCRUB_ALL
);
1927 free_options_test_data(tdata
);
1928 tdata
= get_options_test_data("SafeLogging stuffy\n"
1929 "MaxClientCircuitsPending 1\n"
1932 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1933 tt_int_op(ret
, OP_EQ
, -1);
1934 tt_str_op(msg
, OP_EQ
, "Unrecognized value '\"stuffy\"' in SafeLogging");
1938 escaped(NULL
); // This will free the leaking memory from the previous escaped
1939 free_options_test_data(tdata
);
1944 test_options_validate__publish_server_descriptor(void *ignored
)
1949 setup_capture_of_logs(LOG_WARN
);
1950 options_test_data_t
*tdata
= get_options_test_data(
1951 "PublishServerDescriptor bridge\n" TEST_OPTIONS_DEFAULT_VALUES
1954 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1955 tt_int_op(ret
, OP_EQ
, 0);
1958 free_options_test_data(tdata
);
1959 tdata
= get_options_test_data("PublishServerDescriptor humma\n"
1960 TEST_OPTIONS_DEFAULT_VALUES
);
1962 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1963 tt_int_op(ret
, OP_EQ
, -1);
1964 tt_str_op(msg
, OP_EQ
, "Unrecognized value in PublishServerDescriptor");
1967 free_options_test_data(tdata
);
1968 tdata
= get_options_test_data("PublishServerDescriptor bridge, v3\n"
1969 TEST_OPTIONS_DEFAULT_VALUES
);
1971 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1972 tt_int_op(ret
, OP_EQ
, -1);
1973 tt_str_op(msg
, OP_EQ
, "Bridges are not supposed to publish router "
1974 "descriptors to the directory authorities. Please correct your "
1975 "PublishServerDescriptor line.");
1978 free_options_test_data(tdata
);
1979 tdata
= get_options_test_data("BridgeRelay 1\n"
1980 "PublishServerDescriptor v3\n"
1981 TEST_OPTIONS_DEFAULT_VALUES
);
1983 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1984 tt_int_op(ret
, OP_EQ
, -1);
1985 tt_str_op(msg
, OP_EQ
, "Bridges are not supposed to publish router "
1986 "descriptors to the directory authorities. Please correct your "
1987 "PublishServerDescriptor line.");
1990 free_options_test_data(tdata
);
1991 tdata
= get_options_test_data("BridgeRelay 1\n" TEST_OPTIONS_DEFAULT_VALUES
);
1993 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
1994 tt_int_op(ret
, OP_EQ
, -1);
1995 tt_str_op(msg
, OP_NE
, "Bridges are not supposed to publish router "
1996 "descriptors to the directory authorities. Please correct your "
1997 "PublishServerDescriptor line.");
2000 free_options_test_data(tdata
);
2001 tdata
= get_options_test_data("BridgeRelay 1\n"
2002 "DirPort 999\n" TEST_OPTIONS_DEFAULT_VALUES
);
2004 mock_clean_saved_logs();
2005 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2006 tt_int_op(ret
, OP_EQ
, -1);
2007 expect_log_msg("Can't set a DirPort on a bridge "
2008 "relay; disabling DirPort\n");
2009 tt_assert(!tdata
->opt
->DirPort_lines
);
2010 tt_assert(!tdata
->opt
->DirPort_set
);
2013 teardown_capture_of_logs();
2014 policies_free_all();
2015 free_options_test_data(tdata
);
2020 test_options_validate__testing(void *ignored
)
2025 options_test_data_t
*tdata
= NULL
;
2027 #define ENSURE_DEFAULT(varname, varval) \
2029 free_options_test_data(tdata); \
2030 tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES \
2031 #varname " " #varval "\n"); \
2032 ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);\
2033 tt_str_op(msg, OP_EQ, \
2034 #varname " may only be changed in testing Tor networks!"); \
2035 tt_int_op(ret, OP_EQ, -1); \
2038 free_options_test_data(tdata); \
2039 tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES \
2040 #varname " " #varval "\n" \
2042 "TestingTorNetwork 1\n"); \
2044 ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);\
2046 tt_str_op(msg, OP_NE, \
2047 #varname " may only be changed in testing Tor networks!"); \
2051 free_options_test_data(tdata); \
2052 tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES \
2053 #varname " " #varval "\n" \
2054 "___UsingTestNetworkDefaults 1\n"); \
2056 ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);\
2058 tt_str_op(msg, OP_NE, \
2059 #varname " may only be changed in testing Tor networks!"); \
2064 ENSURE_DEFAULT(TestingV3AuthInitialVotingInterval
, 3600);
2065 ENSURE_DEFAULT(TestingV3AuthInitialVoteDelay
, 3000);
2066 ENSURE_DEFAULT(TestingV3AuthInitialDistDelay
, 3000);
2067 ENSURE_DEFAULT(TestingV3AuthVotingStartOffset
, 3000);
2068 ENSURE_DEFAULT(TestingAuthDirTimeToLearnReachability
, 3000);
2069 ENSURE_DEFAULT(TestingEstimatedDescriptorPropagationTime
, 3000);
2070 ENSURE_DEFAULT(TestingServerDownloadSchedule
, 3000);
2071 ENSURE_DEFAULT(TestingClientDownloadSchedule
, 3000);
2072 ENSURE_DEFAULT(TestingServerConsensusDownloadSchedule
, 3000);
2073 ENSURE_DEFAULT(TestingClientConsensusDownloadSchedule
, 3000);
2074 ENSURE_DEFAULT(TestingBridgeDownloadSchedule
, 3000);
2075 ENSURE_DEFAULT(TestingBridgeBootstrapDownloadSchedule
, 3000);
2076 ENSURE_DEFAULT(TestingClientMaxIntervalWithoutRequest
, 3000);
2077 ENSURE_DEFAULT(TestingDirConnectionMaxStall
, 3000);
2078 ENSURE_DEFAULT(TestingAuthKeyLifetime
, 3000);
2079 ENSURE_DEFAULT(TestingLinkCertLifetime
, 3000);
2080 ENSURE_DEFAULT(TestingSigningKeySlop
, 3000);
2081 ENSURE_DEFAULT(TestingAuthKeySlop
, 3000);
2082 ENSURE_DEFAULT(TestingLinkKeySlop
, 3000);
2085 escaped(NULL
); // This will free the leaking memory from the previous escaped
2086 policies_free_all();
2087 free_options_test_data(tdata
);
2092 test_options_validate__hidserv(void *ignored
)
2097 setup_capture_of_logs(LOG_WARN
);
2099 options_test_data_t
*tdata
= get_options_test_data(
2100 TEST_OPTIONS_DEFAULT_VALUES
);
2101 tdata
->opt
->MinUptimeHidServDirectoryV2
= -1;
2102 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2103 tt_int_op(ret
, OP_EQ
, 0);
2104 expect_log_msg("MinUptimeHidServDirectoryV2 "
2105 "option must be at least 0 seconds. Changing to 0.\n");
2106 tt_int_op(tdata
->opt
->MinUptimeHidServDirectoryV2
, OP_EQ
, 0);
2109 free_options_test_data(tdata
);
2110 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2111 "RendPostPeriod 1\n" );
2112 mock_clean_saved_logs();
2113 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2114 tt_int_op(ret
, OP_EQ
, 0);
2115 expect_log_msg("RendPostPeriod option is too short;"
2116 " raising to 600 seconds.\n");
2117 tt_int_op(tdata
->opt
->RendPostPeriod
, OP_EQ
, 600);
2120 free_options_test_data(tdata
);
2121 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2122 "RendPostPeriod 302401\n" );
2123 mock_clean_saved_logs();
2124 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2125 tt_int_op(ret
, OP_EQ
, 0);
2126 expect_log_msg("RendPostPeriod is too large; "
2127 "clipping to 302400s.\n");
2128 tt_int_op(tdata
->opt
->RendPostPeriod
, OP_EQ
, 302400);
2132 teardown_capture_of_logs();
2133 policies_free_all();
2134 free_options_test_data(tdata
);
2139 test_options_validate__path_bias(void *ignored
)
2145 options_test_data_t
*tdata
= get_options_test_data(
2146 TEST_OPTIONS_DEFAULT_VALUES
2147 "PathBiasNoticeRate 1.1\n");
2148 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2149 tt_int_op(ret
, OP_EQ
, -1);
2150 tt_str_op(msg
, OP_EQ
,
2151 "PathBiasNoticeRate is too high. It must be between 0 and 1.0");
2154 free_options_test_data(tdata
);
2155 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2156 "PathBiasWarnRate 1.1\n");
2157 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2158 tt_int_op(ret
, OP_EQ
, -1);
2159 tt_str_op(msg
, OP_EQ
,
2160 "PathBiasWarnRate is too high. It must be between 0 and 1.0");
2163 free_options_test_data(tdata
);
2164 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2165 "PathBiasExtremeRate 1.1\n");
2166 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2167 tt_int_op(ret
, OP_EQ
, -1);
2168 tt_str_op(msg
, OP_EQ
,
2169 "PathBiasExtremeRate is too high. It must be between 0 and 1.0");
2172 free_options_test_data(tdata
);
2173 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2174 "PathBiasNoticeUseRate 1.1\n");
2175 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2176 tt_int_op(ret
, OP_EQ
, -1);
2177 tt_str_op(msg
, OP_EQ
,
2178 "PathBiasNoticeUseRate is too high. It must be between 0 and 1.0");
2181 free_options_test_data(tdata
);
2182 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2183 "PathBiasExtremeUseRate 1.1\n");
2184 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2185 tt_int_op(ret
, OP_EQ
, -1);
2186 tt_str_op(msg
, OP_EQ
,
2187 "PathBiasExtremeUseRate is too high. It must be between 0 and 1.0");
2191 free_options_test_data(tdata
);
2196 test_options_validate__bandwidth(void *ignored
)
2201 options_test_data_t
*tdata
= NULL
;
2203 #define ENSURE_BANDWIDTH_PARAM(p) \
2205 free_options_test_data(tdata); \
2206 tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES #p " 3Gb\n"); \
2207 ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);\
2208 tt_int_op(ret, OP_EQ, -1); \
2209 tt_mem_op(msg, OP_EQ, #p " (3221225471) must be at most 2147483647", 40); \
2213 ENSURE_BANDWIDTH_PARAM(BandwidthRate
);
2214 ENSURE_BANDWIDTH_PARAM(BandwidthBurst
);
2215 ENSURE_BANDWIDTH_PARAM(MaxAdvertisedBandwidth
);
2216 ENSURE_BANDWIDTH_PARAM(RelayBandwidthRate
);
2217 ENSURE_BANDWIDTH_PARAM(RelayBandwidthBurst
);
2218 ENSURE_BANDWIDTH_PARAM(PerConnBWRate
);
2219 ENSURE_BANDWIDTH_PARAM(PerConnBWBurst
);
2220 ENSURE_BANDWIDTH_PARAM(AuthDirFastGuarantee
);
2221 ENSURE_BANDWIDTH_PARAM(AuthDirGuardBWGuarantee
);
2223 free_options_test_data(tdata
);
2224 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2225 "RelayBandwidthRate 1000\n");
2226 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2227 tt_int_op(ret
, OP_EQ
, 0);
2228 tt_u64_op(tdata
->opt
->RelayBandwidthBurst
, OP_EQ
, 1000);
2231 free_options_test_data(tdata
);
2232 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2233 "RelayBandwidthBurst 1001\n");
2234 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2235 tt_int_op(ret
, OP_EQ
, 0);
2236 tt_u64_op(tdata
->opt
->RelayBandwidthRate
, OP_EQ
, 1001);
2239 free_options_test_data(tdata
);
2240 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2241 "RelayBandwidthRate 1001\n"
2242 "RelayBandwidthBurst 1000\n");
2243 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2244 tt_int_op(ret
, OP_EQ
, -1);
2245 tt_str_op(msg
, OP_EQ
, "RelayBandwidthBurst must be at least equal to "
2246 "RelayBandwidthRate.");
2249 free_options_test_data(tdata
);
2250 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2251 "BandwidthRate 1001\n"
2252 "BandwidthBurst 1000\n");
2253 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2254 tt_int_op(ret
, OP_EQ
, -1);
2255 tt_str_op(msg
, OP_EQ
,
2256 "BandwidthBurst must be at least equal to BandwidthRate.");
2259 free_options_test_data(tdata
);
2260 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2261 "RelayBandwidthRate 1001\n"
2262 "BandwidthRate 1000\n"
2263 "BandwidthBurst 1000\n"
2265 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2266 tt_int_op(ret
, OP_EQ
, 0);
2267 tt_u64_op(tdata
->opt
->BandwidthRate
, OP_EQ
, 1001);
2270 free_options_test_data(tdata
);
2271 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2272 "RelayBandwidthRate 1001\n"
2273 "BandwidthRate 1000\n"
2274 "RelayBandwidthBurst 1001\n"
2275 "BandwidthBurst 1000\n"
2277 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2278 tt_int_op(ret
, OP_EQ
, 0);
2279 tt_u64_op(tdata
->opt
->BandwidthBurst
, OP_EQ
, 1001);
2282 free_options_test_data(tdata
);
2283 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2284 "ORPort 127.0.0.1:5555\n"
2287 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2288 tt_int_op(ret
, OP_EQ
, -1);
2289 tt_str_op(msg
, OP_EQ
, "BandwidthRate is set to 1 bytes/second. For servers,"
2290 " it must be at least 76800.");
2293 free_options_test_data(tdata
);
2294 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2295 "ORPort 127.0.0.1:5555\n"
2296 "BandwidthRate 76800\n"
2297 "MaxAdvertisedBandwidth 30000\n"
2299 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2300 tt_int_op(ret
, OP_EQ
, -1);
2301 tt_str_op(msg
, OP_EQ
, "MaxAdvertisedBandwidth is set to 30000 bytes/second."
2302 " For servers, it must be at least 38400.");
2305 free_options_test_data(tdata
);
2306 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2307 "ORPort 127.0.0.1:5555\n"
2308 "BandwidthRate 76800\n"
2309 "RelayBandwidthRate 1\n"
2310 "MaxAdvertisedBandwidth 38400\n"
2312 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2313 tt_int_op(ret
, OP_EQ
, -1);
2314 tt_str_op(msg
, OP_EQ
, "RelayBandwidthRate is set to 1 bytes/second. For "
2315 "servers, it must be at least 76800.");
2318 free_options_test_data(tdata
);
2319 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2320 "ORPort 127.0.0.1:5555\n"
2321 "BandwidthRate 76800\n"
2322 "BandwidthBurst 76800\n"
2323 "RelayBandwidthRate 76800\n"
2324 "MaxAdvertisedBandwidth 38400\n"
2326 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2327 tt_int_op(ret
, OP_EQ
, 0);
2331 policies_free_all();
2332 free_options_test_data(tdata
);
2337 test_options_validate__circuits(void *ignored
)
2341 options_test_data_t
*tdata
= NULL
;
2342 setup_capture_of_logs(LOG_WARN
);
2344 free_options_test_data(tdata
);
2345 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2346 "MaxCircuitDirtiness 2592001\n");
2347 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2348 expect_log_msg("MaxCircuitDirtiness option is too "
2349 "high; setting to 30 days.\n");
2350 tt_int_op(tdata
->opt
->MaxCircuitDirtiness
, OP_EQ
, 2592000);
2353 free_options_test_data(tdata
);
2354 mock_clean_saved_logs();
2355 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2356 "CircuitStreamTimeout 1\n");
2357 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2358 expect_log_msg("CircuitStreamTimeout option is too"
2359 " short; raising to 10 seconds.\n");
2360 tt_int_op(tdata
->opt
->CircuitStreamTimeout
, OP_EQ
, 10);
2363 free_options_test_data(tdata
);
2364 mock_clean_saved_logs();
2365 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2366 "CircuitStreamTimeout 111\n");
2367 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2368 expect_no_log_msg("CircuitStreamTimeout option is too"
2369 " short; raising to 10 seconds.\n");
2370 tt_int_op(tdata
->opt
->CircuitStreamTimeout
, OP_EQ
, 111);
2373 free_options_test_data(tdata
);
2374 mock_clean_saved_logs();
2375 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2376 "HeartbeatPeriod 1\n");
2377 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2378 expect_log_msg("HeartbeatPeriod option is too short;"
2379 " raising to 1800 seconds.\n");
2380 tt_int_op(tdata
->opt
->HeartbeatPeriod
, OP_EQ
, 1800);
2383 free_options_test_data(tdata
);
2384 mock_clean_saved_logs();
2385 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2386 "HeartbeatPeriod 1982\n");
2387 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2388 expect_no_log_msg("HeartbeatPeriod option is too short;"
2389 " raising to 1800 seconds.\n");
2390 tt_int_op(tdata
->opt
->HeartbeatPeriod
, OP_EQ
, 1982);
2393 free_options_test_data(tdata
);
2394 mock_clean_saved_logs();
2395 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2396 "CircuitBuildTimeout 1\n"
2398 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2399 expect_log_msg("CircuitBuildTimeout is shorter (1"
2400 " seconds) than the recommended minimum (10 seconds), and "
2401 "LearnCircuitBuildTimeout is disabled. If tor isn't working, "
2402 "raise this value or enable LearnCircuitBuildTimeout.\n");
2405 free_options_test_data(tdata
);
2406 mock_clean_saved_logs();
2407 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2408 "CircuitBuildTimeout 11\n"
2410 options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2411 expect_no_log_msg("CircuitBuildTimeout is shorter (1 "
2412 "seconds) than the recommended minimum (10 seconds), and "
2413 "LearnCircuitBuildTimeout is disabled. If tor isn't working, "
2414 "raise this value or enable LearnCircuitBuildTimeout.\n");
2418 policies_free_all();
2419 teardown_capture_of_logs();
2420 free_options_test_data(tdata
);
2425 test_options_validate__tor2web(void *ignored
)
2430 options_test_data_t
*tdata
= NULL
;
2432 free_options_test_data(tdata
);
2433 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2434 "Tor2webRendezvousPoints 1\n");
2435 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2436 tt_int_op(ret
, OP_EQ
, -1);
2437 tt_str_op(msg
, OP_EQ
,
2438 "Tor2webRendezvousPoints cannot be set without Tor2webMode.");
2441 free_options_test_data(tdata
);
2442 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2443 "Tor2webRendezvousPoints 1\nTor2webMode 1\n");
2444 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2445 tt_int_op(ret
, OP_EQ
, 0);
2449 policies_free_all();
2450 free_options_test_data(tdata
);
2455 test_options_validate__rend(void *ignored
)
2460 options_test_data_t
*tdata
= NULL
;
2461 setup_capture_of_logs(LOG_WARN
);
2463 free_options_test_data(tdata
);
2464 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2465 "UseEntryGuards 0\n"
2466 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2467 "HiddenServicePort 80 127.0.0.1:8080\n"
2469 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2470 tt_int_op(ret
, OP_EQ
, 0);
2471 expect_log_msg("UseEntryGuards is disabled, but you"
2472 " have configured one or more hidden services on this Tor "
2473 "instance. Your hidden services will be very easy to locate using"
2474 " a well-known attack -- see http://freehaven.net/anonbib/#hs-"
2475 "attack06 for details.\n");
2478 free_options_test_data(tdata
);
2479 tdata
= get_options_test_data(
2480 TEST_OPTIONS_DEFAULT_VALUES
2481 "UseEntryGuards 1\n"
2482 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2483 "HiddenServicePort 80 127.0.0.1:8080\n"
2485 mock_clean_saved_logs();
2486 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2487 tt_int_op(ret
, OP_EQ
, 0);
2488 expect_no_log_msg("UseEntryGuards is disabled, but you"
2489 " have configured one or more hidden services on this Tor "
2490 "instance. Your hidden services will be very easy to locate using"
2491 " a well-known attack -- see http://freehaven.net/anonbib/#hs-"
2492 "attack06 for details.\n");
2494 free_options_test_data(tdata
);
2495 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2496 "HiddenServicePort 80 127.0.0.1:8080\n"
2498 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2499 tt_int_op(ret
, OP_EQ
, -1);
2500 tt_str_op(msg
, OP_EQ
,
2501 "Failed to configure rendezvous options. See logs for details.");
2504 free_options_test_data(tdata
);
2505 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2506 "HidServAuth failed\n"
2508 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2509 tt_int_op(ret
, OP_EQ
, -1);
2510 tt_str_op(msg
, OP_EQ
, "Failed to configure client authorization for hidden "
2511 "services. See logs for details.");
2515 policies_free_all();
2516 teardown_capture_of_logs();
2517 free_options_test_data(tdata
);
2522 test_options_validate__single_onion(void *ignored
)
2527 options_test_data_t
*tdata
= NULL
;
2528 setup_capture_of_logs(LOG_WARN
);
2530 /* Test that HiddenServiceSingleHopMode must come with
2531 * HiddenServiceNonAnonymousMode */
2532 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2534 "HiddenServiceSingleHopMode 1\n"
2536 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2537 tt_int_op(ret
, OP_EQ
, -1);
2538 tt_str_op(msg
, OP_EQ
, "HiddenServiceSingleHopMode does not provide any "
2539 "server anonymity. It must be used with "
2540 "HiddenServiceNonAnonymousMode set to 1.");
2542 free_options_test_data(tdata
);
2544 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2546 "HiddenServiceSingleHopMode 1\n"
2547 "HiddenServiceNonAnonymousMode 0\n"
2549 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2550 tt_int_op(ret
, OP_EQ
, -1);
2551 tt_str_op(msg
, OP_EQ
, "HiddenServiceSingleHopMode does not provide any "
2552 "server anonymity. It must be used with "
2553 "HiddenServiceNonAnonymousMode set to 1.");
2555 free_options_test_data(tdata
);
2557 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2559 "HiddenServiceSingleHopMode 1\n"
2560 "HiddenServiceNonAnonymousMode 1\n"
2562 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2563 tt_int_op(ret
, OP_EQ
, 0);
2564 tt_ptr_op(msg
, OP_EQ
, NULL
);
2565 free_options_test_data(tdata
);
2567 /* Test that SOCKSPort must come with Tor2webMode if
2568 * HiddenServiceSingleHopMode is 1 */
2569 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2571 "HiddenServiceSingleHopMode 1\n"
2572 "HiddenServiceNonAnonymousMode 1\n"
2575 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2576 tt_int_op(ret
, OP_EQ
, -1);
2577 tt_str_op(msg
, OP_EQ
, "HiddenServiceNonAnonymousMode is incompatible with "
2578 "using Tor as an anonymous client. Please set "
2579 "Socks/Trans/NATD/DNSPort to 0, or revert "
2580 "HiddenServiceNonAnonymousMode to 0.");
2582 free_options_test_data(tdata
);
2584 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2586 "HiddenServiceSingleHopMode 1\n"
2587 "HiddenServiceNonAnonymousMode 1\n"
2590 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2591 tt_int_op(ret
, OP_EQ
, 0);
2592 tt_ptr_op(msg
, OP_EQ
, NULL
);
2593 free_options_test_data(tdata
);
2595 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2597 "HiddenServiceSingleHopMode 0\n"
2600 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2601 tt_int_op(ret
, OP_EQ
, 0);
2602 tt_ptr_op(msg
, OP_EQ
, NULL
);
2603 free_options_test_data(tdata
);
2605 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2607 "HiddenServiceSingleHopMode 1\n"
2608 "HiddenServiceNonAnonymousMode 1\n"
2611 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2612 tt_int_op(ret
, OP_EQ
, 0);
2613 tt_ptr_op(msg
, OP_EQ
, NULL
);
2614 free_options_test_data(tdata
);
2616 /* Test that a hidden service can't be run with Tor2web
2617 * Use HiddenServiceNonAnonymousMode instead of Tor2webMode, because
2618 * Tor2webMode requires a compilation #define */
2619 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2620 "HiddenServiceNonAnonymousMode 1\n"
2621 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2622 "HiddenServicePort 80 127.0.0.1:8080\n"
2624 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2625 tt_int_op(ret
, OP_EQ
, -1);
2626 tt_str_op(msg
, OP_EQ
, "HiddenServiceNonAnonymousMode does not provide any "
2627 "server anonymity. It must be used with "
2628 "HiddenServiceSingleHopMode set to 1.");
2630 free_options_test_data(tdata
);
2632 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2633 "HiddenServiceNonAnonymousMode 1\n"
2635 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2636 tt_int_op(ret
, OP_EQ
, -1);
2637 tt_str_op(msg
, OP_EQ
, "HiddenServiceNonAnonymousMode does not provide any "
2638 "server anonymity. It must be used with "
2639 "HiddenServiceSingleHopMode set to 1.");
2641 free_options_test_data(tdata
);
2643 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2644 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2645 "HiddenServicePort 80 127.0.0.1:8080\n"
2647 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2648 tt_int_op(ret
, OP_EQ
, 0);
2649 tt_ptr_op(msg
, OP_EQ
, NULL
);
2650 free_options_test_data(tdata
);
2652 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2653 "HiddenServiceNonAnonymousMode 1\n"
2654 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2655 "HiddenServicePort 80 127.0.0.1:8080\n"
2656 "HiddenServiceSingleHopMode 1\n"
2659 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2660 tt_int_op(ret
, OP_EQ
, 0);
2661 tt_ptr_op(msg
, OP_EQ
, NULL
);
2664 policies_free_all();
2665 teardown_capture_of_logs();
2666 free_options_test_data(tdata
);
2671 test_options_validate__accounting(void *ignored
)
2676 options_test_data_t
*tdata
= NULL
;
2677 setup_capture_of_logs(LOG_WARN
);
2679 free_options_test_data(tdata
);
2680 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2681 "AccountingRule something_bad\n"
2683 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2684 tt_int_op(ret
, OP_EQ
, -1);
2685 tt_str_op(msg
, OP_EQ
, "AccountingRule must be 'sum', 'max', 'in', or 'out'");
2688 free_options_test_data(tdata
);
2689 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2690 "AccountingRule sum\n"
2692 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2693 tt_int_op(ret
, OP_EQ
, 0);
2694 tt_int_op(tdata
->opt
->AccountingRule
, OP_EQ
, ACCT_SUM
);
2697 free_options_test_data(tdata
);
2698 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2699 "AccountingRule max\n"
2701 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2702 tt_int_op(ret
, OP_EQ
, 0);
2703 tt_int_op(tdata
->opt
->AccountingRule
, OP_EQ
, ACCT_MAX
);
2706 free_options_test_data(tdata
);
2707 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2708 "AccountingStart fail\n"
2710 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2711 tt_int_op(ret
, OP_EQ
, -1);
2712 tt_str_op(msg
, OP_EQ
,
2713 "Failed to parse accounting options. See logs for details.");
2716 free_options_test_data(tdata
);
2717 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2718 "AccountingMax 10\n"
2720 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2721 tt_int_op(ret
, OP_EQ
, 0);
2724 free_options_test_data(tdata
);
2725 tdata
= get_options_test_data(
2726 TEST_OPTIONS_DEFAULT_VALUES
2727 "ORPort 127.0.0.1:5555\n"
2728 "BandwidthRate 76800\n"
2729 "BandwidthBurst 76800\n"
2730 "MaxAdvertisedBandwidth 38400\n"
2731 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2732 "HiddenServicePort 80 127.0.0.1:8080\n"
2733 "AccountingMax 10\n"
2735 mock_clean_saved_logs();
2736 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2737 tt_int_op(ret
, OP_EQ
, 0);
2738 expect_log_msg("Using accounting with a hidden "
2739 "service and an ORPort is risky: your hidden service(s) and "
2740 "your public address will all turn off at the same time, "
2741 "which may alert observers that they are being run by the "
2745 free_options_test_data(tdata
);
2746 tdata
= get_options_test_data(
2747 TEST_OPTIONS_DEFAULT_VALUES
2748 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2749 "HiddenServicePort 80 127.0.0.1:8080\n"
2750 "AccountingMax 10\n"
2752 mock_clean_saved_logs();
2753 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2754 tt_int_op(ret
, OP_EQ
, 0);
2755 expect_no_log_msg("Using accounting with a hidden "
2756 "service and an ORPort is risky: your hidden service(s) and "
2757 "your public address will all turn off at the same time, "
2758 "which may alert observers that they are being run by the "
2762 free_options_test_data(tdata
);
2763 tdata
= get_options_test_data(
2764 TEST_OPTIONS_DEFAULT_VALUES
2765 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service/\n"
2766 "HiddenServicePort 80 127.0.0.1:8080\n"
2767 "HiddenServiceDir /Library/Tor/var/lib/tor/hidden_service2/\n"
2768 "HiddenServicePort 81 127.0.0.1:8081\n"
2769 "AccountingMax 10\n"
2771 mock_clean_saved_logs();
2772 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2773 tt_int_op(ret
, OP_EQ
, 0);
2774 expect_log_msg("Using accounting with multiple "
2775 "hidden services is risky: they will all turn off at the same"
2776 " time, which may alert observers that they are being run by "
2777 "the same party.\n");
2781 teardown_capture_of_logs();
2782 policies_free_all();
2783 free_options_test_data(tdata
);
2788 test_options_validate__proxy(void *ignored
)
2793 options_test_data_t
*tdata
= NULL
;
2794 sandbox_disable_getaddrinfo_cache();
2795 setup_capture_of_logs(LOG_WARN
);
2796 MOCK(tor_addr_lookup
, mock_tor_addr_lookup__fail_on_bad_addrs
);
2798 free_options_test_data(tdata
);
2799 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2800 "HttpProxy 127.0.42.1\n"
2802 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2803 tt_int_op(ret
, OP_EQ
, 0);
2804 tt_int_op(tdata
->opt
->HTTPProxyPort
, OP_EQ
, 80);
2807 free_options_test_data(tdata
);
2808 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2809 "HttpProxy 127.0.42.1:444\n"
2811 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2812 tt_int_op(ret
, OP_EQ
, 0);
2813 tt_int_op(tdata
->opt
->HTTPProxyPort
, OP_EQ
, 444);
2816 free_options_test_data(tdata
);
2818 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2819 "HttpProxy not_so_valid!\n"
2821 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2822 tt_int_op(ret
, OP_EQ
, -1);
2823 tt_str_op(msg
, OP_EQ
, "HTTPProxy failed to parse or resolve. Please fix.");
2826 free_options_test_data(tdata
);
2827 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2828 "HttpProxyAuthenticator "
2829 "onetwothreonetwothreonetwothreonetwothreonetw"
2830 "othreonetwothreonetwothreonetwothreonetwothre"
2831 "onetwothreonetwothreonetwothreonetwothreonetw"
2832 "othreonetwothreonetwothreonetwothreonetwothre"
2833 "onetwothreonetwothreonetwothreonetwothreonetw"
2834 "othreonetwothreonetwothreonetwothreonetwothre"
2835 "onetwothreonetwothreonetwothreonetwothreonetw"
2836 "othreonetwothreonetwothreonetwothreonetwothre"
2837 "onetwothreonetwothreonetwothreonetwothreonetw"
2838 "othreonetwothreonetwothreonetwothreonetwothre"
2839 "onetwothreonetwothreonetwothreonetwothreonetw"
2840 "othreonetwothreeonetwothreeonetwothree"
2843 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2844 tt_int_op(ret
, OP_EQ
, -1);
2845 tt_str_op(msg
, OP_EQ
, "HTTPProxyAuthenticator is too long (>= 512 chars).");
2848 free_options_test_data(tdata
);
2849 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2850 "HttpProxyAuthenticator validauth\n"
2853 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2854 tt_int_op(ret
, OP_EQ
, 0);
2857 free_options_test_data(tdata
);
2858 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2859 "HttpsProxy 127.0.42.1\n"
2861 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2862 tt_int_op(ret
, OP_EQ
, 0);
2863 tt_int_op(tdata
->opt
->HTTPSProxyPort
, OP_EQ
, 443);
2866 free_options_test_data(tdata
);
2867 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2868 "HttpsProxy 127.0.42.1:444\n"
2870 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2871 tt_int_op(ret
, OP_EQ
, 0);
2872 tt_int_op(tdata
->opt
->HTTPSProxyPort
, OP_EQ
, 444);
2875 free_options_test_data(tdata
);
2876 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2877 "HttpsProxy not_so_valid!\n"
2879 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2880 tt_int_op(ret
, OP_EQ
, -1);
2881 tt_str_op(msg
, OP_EQ
, "HTTPSProxy failed to parse or resolve. Please fix.");
2884 free_options_test_data(tdata
);
2885 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2886 "HttpsProxyAuthenticator "
2887 "onetwothreonetwothreonetwothreonetwothreonetw"
2888 "othreonetwothreonetwothreonetwothreonetwothre"
2889 "onetwothreonetwothreonetwothreonetwothreonetw"
2890 "othreonetwothreonetwothreonetwothreonetwothre"
2891 "onetwothreonetwothreonetwothreonetwothreonetw"
2892 "othreonetwothreonetwothreonetwothreonetwothre"
2893 "onetwothreonetwothreonetwothreonetwothreonetw"
2894 "othreonetwothreonetwothreonetwothreonetwothre"
2895 "onetwothreonetwothreonetwothreonetwothreonetw"
2896 "othreonetwothreonetwothreonetwothreonetwothre"
2897 "onetwothreonetwothreonetwothreonetwothreonetw"
2898 "othreonetwothreeonetwothreeonetwothree"
2901 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2902 tt_int_op(ret
, OP_EQ
, -1);
2903 tt_str_op(msg
, OP_EQ
, "HTTPSProxyAuthenticator is too long (>= 512 chars).");
2906 free_options_test_data(tdata
);
2907 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2908 "HttpsProxyAuthenticator validauth\n"
2910 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2911 tt_int_op(ret
, OP_EQ
, 0);
2914 free_options_test_data(tdata
);
2915 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2916 "Socks4Proxy 127.0.42.1\n"
2918 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2919 tt_int_op(ret
, OP_EQ
, 0);
2920 tt_int_op(tdata
->opt
->Socks4ProxyPort
, OP_EQ
, 1080);
2923 free_options_test_data(tdata
);
2924 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2925 "Socks4Proxy 127.0.42.1:444\n"
2927 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2928 tt_int_op(ret
, OP_EQ
, 0);
2929 tt_int_op(tdata
->opt
->Socks4ProxyPort
, OP_EQ
, 444);
2932 free_options_test_data(tdata
);
2933 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2934 "Socks4Proxy not_so_valid!\n"
2936 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2937 tt_int_op(ret
, OP_EQ
, -1);
2938 tt_str_op(msg
, OP_EQ
, "Socks4Proxy failed to parse or resolve. Please fix.");
2941 free_options_test_data(tdata
);
2942 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2943 "Socks5Proxy 127.0.42.1\n"
2945 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2946 tt_int_op(ret
, OP_EQ
, 0);
2947 tt_int_op(tdata
->opt
->Socks5ProxyPort
, OP_EQ
, 1080);
2950 free_options_test_data(tdata
);
2951 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2952 "Socks5Proxy 127.0.42.1:444\n"
2954 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2955 tt_int_op(ret
, OP_EQ
, 0);
2956 tt_int_op(tdata
->opt
->Socks5ProxyPort
, OP_EQ
, 444);
2959 free_options_test_data(tdata
);
2960 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2961 "Socks5Proxy not_so_valid!\n"
2963 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2964 tt_int_op(ret
, OP_EQ
, -1);
2965 tt_str_op(msg
, OP_EQ
, "Socks5Proxy failed to parse or resolve. Please fix.");
2968 free_options_test_data(tdata
);
2969 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2970 "Socks4Proxy 215.1.1.1\n"
2971 "Socks5Proxy 215.1.1.2\n"
2973 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2974 tt_int_op(ret
, OP_EQ
, -1);
2975 tt_str_op(msg
, OP_EQ
, "You have configured more than one proxy type. "
2976 "(Socks4Proxy|Socks5Proxy|HTTPSProxy)");
2979 free_options_test_data(tdata
);
2980 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2981 "HttpProxy 215.1.1.1\n"
2983 mock_clean_saved_logs();
2984 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2985 tt_int_op(ret
, OP_EQ
, 0);
2986 expect_log_msg("HTTPProxy configured, but no SOCKS "
2987 "proxy or HTTPS proxy configured. Watch out: this configuration "
2988 "will proxy unencrypted directory connections only.\n");
2991 free_options_test_data(tdata
);
2992 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
2993 "HttpProxy 215.1.1.1\n"
2994 "Socks4Proxy 215.1.1.1\n"
2996 mock_clean_saved_logs();
2997 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
2998 tt_int_op(ret
, OP_EQ
, 0);
2999 expect_no_log_msg("HTTPProxy configured, but no SOCKS "
3000 "proxy or HTTPS proxy configured. Watch out: this configuration "
3001 "will proxy unencrypted directory connections only.\n");
3004 free_options_test_data(tdata
);
3005 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3006 "HttpProxy 215.1.1.1\n"
3007 "Socks5Proxy 215.1.1.1\n"
3009 mock_clean_saved_logs();
3010 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3011 tt_int_op(ret
, OP_EQ
, 0);
3012 expect_no_log_msg("HTTPProxy configured, but no SOCKS "
3013 "proxy or HTTPS proxy configured. Watch out: this configuration "
3014 "will proxy unencrypted directory connections only.\n");
3017 free_options_test_data(tdata
);
3018 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3019 "HttpProxy 215.1.1.1\n"
3020 "HttpsProxy 215.1.1.1\n"
3022 mock_clean_saved_logs();
3023 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3024 tt_int_op(ret
, OP_EQ
, 0);
3026 "HTTPProxy configured, but no SOCKS proxy or HTTPS proxy "
3027 "configured. Watch out: this configuration will proxy "
3028 "unencrypted directory connections only.\n");
3031 free_options_test_data(tdata
);
3032 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3034 tdata
->opt
->Socks5ProxyUsername
= tor_strdup("");
3035 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3036 tt_int_op(ret
, OP_EQ
, -1);
3037 tt_str_op(msg
, OP_EQ
,
3038 "Socks5ProxyUsername must be between 1 and 255 characters.");
3041 free_options_test_data(tdata
);
3042 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3044 tdata
->opt
->Socks5ProxyUsername
=
3045 tor_strdup("ABCDEABCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789AB"
3046 "CDEABCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789ABCD"
3047 "EABCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789ABCDEA"
3048 "BCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789ABCDEABC"
3049 "DE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789");
3050 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3051 tt_int_op(ret
, OP_EQ
, -1);
3052 tt_str_op(msg
, OP_EQ
,
3053 "Socks5ProxyUsername must be between 1 and 255 characters.");
3056 free_options_test_data(tdata
);
3057 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3058 "Socks5ProxyUsername hello_world\n"
3060 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3061 tt_int_op(ret
, OP_EQ
, -1);
3062 tt_str_op(msg
, OP_EQ
, "Socks5ProxyPassword must be included with "
3063 "Socks5ProxyUsername.");
3066 free_options_test_data(tdata
);
3067 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3068 "Socks5ProxyUsername hello_world\n"
3070 tdata
->opt
->Socks5ProxyPassword
= tor_strdup("");
3071 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3072 tt_int_op(ret
, OP_EQ
, -1);
3073 tt_str_op(msg
, OP_EQ
,
3074 "Socks5ProxyPassword must be between 1 and 255 characters.");
3077 free_options_test_data(tdata
);
3078 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3079 "Socks5ProxyUsername hello_world\n"
3081 tdata
->opt
->Socks5ProxyPassword
=
3082 tor_strdup("ABCDEABCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789AB"
3083 "CDEABCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789ABCD"
3084 "EABCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789ABCDEA"
3085 "BCDE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789ABCDEABC"
3086 "DE0123456789ABCDEABCDE0123456789ABCDEABCDE0123456789");
3087 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3088 tt_int_op(ret
, OP_EQ
, -1);
3089 tt_str_op(msg
, OP_EQ
,
3090 "Socks5ProxyPassword must be between 1 and 255 characters.");
3093 free_options_test_data(tdata
);
3094 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3095 "Socks5ProxyUsername hello_world\n"
3096 "Socks5ProxyPassword world_hello\n"
3098 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3099 tt_int_op(ret
, OP_EQ
, 0);
3102 free_options_test_data(tdata
);
3103 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3104 "Socks5ProxyPassword hello_world\n"
3106 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3107 tt_int_op(ret
, OP_EQ
, -1);
3108 tt_str_op(msg
, OP_EQ
, "Socks5ProxyPassword must be included with "
3109 "Socks5ProxyUsername.");
3113 teardown_capture_of_logs();
3114 free_options_test_data(tdata
);
3115 policies_free_all();
3116 // sandbox_free_getaddrinfo_cache();
3118 UNMOCK(tor_addr_lookup
);
3122 test_options_validate__control(void *ignored
)
3127 options_test_data_t
*tdata
= NULL
;
3128 setup_capture_of_logs(LOG_WARN
);
3130 free_options_test_data(tdata
);
3131 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3132 "HashedControlPassword something_incorrect\n"
3134 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3135 tt_int_op(ret
, OP_EQ
, -1);
3136 tt_str_op(msg
, OP_EQ
,
3137 "Bad HashedControlPassword: wrong length or bad encoding");
3140 free_options_test_data(tdata
);
3141 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3142 "HashedControlPassword 16:872860B76453A77D60CA"
3143 "2BB8C1A7042072093276A3D701AD684053EC4C\n"
3145 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3146 tt_int_op(ret
, OP_EQ
, 0);
3149 free_options_test_data(tdata
);
3150 tdata
= get_options_test_data(
3151 TEST_OPTIONS_DEFAULT_VALUES
3152 "__HashedControlSessionPassword something_incorrect\n"
3154 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3155 tt_int_op(ret
, OP_EQ
, -1);
3156 tt_str_op(msg
, OP_EQ
, "Bad HashedControlSessionPassword: wrong length or "
3160 free_options_test_data(tdata
);
3161 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3162 "__HashedControlSessionPassword 16:872860B7645"
3163 "3A77D60CA2BB8C1A7042072093276A3D701AD684053EC"
3166 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3167 tt_int_op(ret
, OP_EQ
, 0);
3170 free_options_test_data(tdata
);
3171 tdata
= get_options_test_data(
3172 TEST_OPTIONS_DEFAULT_VALUES
3173 "__OwningControllerProcess something_incorrect\n"
3175 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3176 tt_int_op(ret
, OP_EQ
, -1);
3177 tt_str_op(msg
, OP_EQ
, "Bad OwningControllerProcess: invalid PID");
3180 free_options_test_data(tdata
);
3181 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3182 "__OwningControllerProcess 123\n"
3184 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3185 tt_int_op(ret
, OP_EQ
, 0);
3188 free_options_test_data(tdata
);
3189 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3190 "ControlPort 127.0.0.1:1234\n"
3192 mock_clean_saved_logs();
3193 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3194 tt_int_op(ret
, OP_EQ
, 0);
3196 "ControlPort is open, but no authentication method has been "
3197 "configured. This means that any program on your computer can "
3198 "reconfigure your Tor. That's bad! You should upgrade your Tor"
3199 " controller as soon as possible.\n");
3202 free_options_test_data(tdata
);
3203 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3204 "ControlPort 127.0.0.1:1234\n"
3205 "HashedControlPassword 16:872860B76453A77D60CA"
3206 "2BB8C1A7042072093276A3D701AD684053EC4C\n"
3208 mock_clean_saved_logs();
3209 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3210 tt_int_op(ret
, OP_EQ
, 0);
3212 "ControlPort is open, but no authentication method has been "
3213 "configured. This means that any program on your computer can "
3214 "reconfigure your Tor. That's bad! You should upgrade your Tor "
3215 "controller as soon as possible.\n");
3218 free_options_test_data(tdata
);
3219 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3220 "ControlPort 127.0.0.1:1234\n"
3221 "__HashedControlSessionPassword 16:872860B7645"
3222 "3A77D60CA2BB8C1A7042072093276A3D701AD684053EC"
3225 mock_clean_saved_logs();
3226 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3227 tt_int_op(ret
, OP_EQ
, 0);
3229 "ControlPort is open, but no authentication method has been "
3230 "configured. This means that any program on your computer can "
3231 "reconfigure your Tor. That's bad! You should upgrade your Tor "
3232 "controller as soon as possible.\n");
3235 free_options_test_data(tdata
);
3236 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3237 "ControlPort 127.0.0.1:1234\n"
3238 "CookieAuthentication 1\n"
3240 mock_clean_saved_logs();
3241 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3242 tt_int_op(ret
, OP_EQ
, 0);
3244 "ControlPort is open, but no authentication method has been "
3245 "configured. This means that any program on your computer can "
3246 "reconfigure your Tor. That's bad! You should upgrade your Tor "
3247 "controller as soon as possible.\n");
3250 #ifdef HAVE_SYS_UN_H
3251 free_options_test_data(tdata
);
3252 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3253 "ControlSocket unix:/tmp WorldWritable\n"
3255 mock_clean_saved_logs();
3256 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3257 tt_int_op(ret
, OP_EQ
, 0);
3259 "ControlSocket is world writable, but no authentication method has"
3260 " been configured. This means that any program on your computer "
3261 "can reconfigure your Tor. That's bad! You should upgrade your "
3262 "Tor controller as soon as possible.\n");
3265 free_options_test_data(tdata
);
3266 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3267 "ControlSocket unix:/tmp WorldWritable\n"
3268 "HashedControlPassword 16:872860B76453A77D60CA"
3269 "2BB8C1A7042072093276A3D701AD684053EC4C\n"
3271 mock_clean_saved_logs();
3272 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3273 tt_int_op(ret
, OP_EQ
, 0);
3275 "ControlSocket is world writable, but no authentication method has"
3276 " been configured. This means that any program on your computer "
3277 "can reconfigure your Tor. That's bad! You should upgrade your "
3278 "Tor controller as soon as possible.\n");
3281 free_options_test_data(tdata
);
3282 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3283 "ControlSocket unix:/tmp WorldWritable\n"
3284 "__HashedControlSessionPassword 16:872860B7645"
3285 "3A77D60CA2BB8C1A7042072093276A3D701AD684053EC"
3288 mock_clean_saved_logs();
3289 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3290 tt_int_op(ret
, OP_EQ
, 0);
3292 "ControlSocket is world writable, but no authentication method has"
3293 " been configured. This means that any program on your computer "
3294 "can reconfigure your Tor. That's bad! You should upgrade your "
3295 "Tor controller as soon as possible.\n");
3298 free_options_test_data(tdata
);
3299 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3300 "ControlSocket unix:/tmp WorldWritable\n"
3301 "CookieAuthentication 1\n"
3303 mock_clean_saved_logs();
3304 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3305 tt_int_op(ret
, OP_EQ
, 0);
3307 "ControlSocket is world writable, but no authentication method has"
3308 " been configured. This means that any program on your computer "
3309 "can reconfigure your Tor. That's bad! You should upgrade your "
3310 "Tor controller as soon as possible.\n");
3312 #endif /* defined(HAVE_SYS_UN_H) */
3314 free_options_test_data(tdata
);
3315 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3316 "CookieAuthFileGroupReadable 1\n"
3318 mock_clean_saved_logs();
3319 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3320 tt_int_op(ret
, OP_EQ
, 0);
3322 "CookieAuthFileGroupReadable is set, but will have no effect: you "
3323 "must specify an explicit CookieAuthFile to have it "
3324 "group-readable.\n");
3327 free_options_test_data(tdata
);
3328 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3329 "CookieAuthFileGroupReadable 1\n"
3330 "CookieAuthFile /tmp/somewhere\n"
3332 mock_clean_saved_logs();
3333 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3334 tt_int_op(ret
, OP_EQ
, 0);
3336 "CookieAuthFileGroupReadable is set, but will have no effect: you "
3337 "must specify an explicit CookieAuthFile to have it "
3338 "group-readable.\n");
3342 teardown_capture_of_logs();
3343 policies_free_all();
3344 free_options_test_data(tdata
);
3349 test_options_validate__families(void *ignored
)
3354 options_test_data_t
*tdata
= NULL
;
3355 setup_capture_of_logs(LOG_WARN
);
3357 free_options_test_data(tdata
);
3358 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3361 "ORPort 127.0.0.1:5555\n"
3362 "BandwidthRate 51300\n"
3363 "BandwidthBurst 51300\n"
3364 "MaxAdvertisedBandwidth 25700\n"
3367 mock_clean_saved_logs();
3368 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3369 tt_int_op(ret
, OP_EQ
, 0);
3371 "Listing a family for a bridge relay is not supported: it can "
3372 "reveal bridge fingerprints to censors. You should also make sure "
3373 "you aren't listing this bridge's fingerprint in any other "
3377 free_options_test_data(tdata
);
3378 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3381 mock_clean_saved_logs();
3382 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3383 tt_int_op(ret
, OP_EQ
, 0);
3385 "Listing a family for a bridge relay is not supported: it can "
3386 "reveal bridge fingerprints to censors. You should also make sure "
3387 "you aren't listing this bridge's fingerprint in any other "
3391 free_options_test_data(tdata
);
3392 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3395 mock_clean_saved_logs();
3396 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3397 tt_int_op(ret
, OP_EQ
, -1);
3398 tt_str_op(msg
, OP_EQ
, "Invalid nickname '!' in MyFamily line");
3401 free_options_test_data(tdata
);
3402 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3406 mock_clean_saved_logs();
3407 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3408 tt_int_op(ret
, OP_EQ
, -1);
3413 teardown_capture_of_logs();
3414 policies_free_all();
3415 free_options_test_data(tdata
);
3420 test_options_validate__addr_policies(void *ignored
)
3425 options_test_data_t
*tdata
= NULL
;
3427 free_options_test_data(tdata
);
3428 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3432 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3433 tt_int_op(ret
, OP_EQ
, -1);
3434 tt_str_op(msg
, OP_EQ
, "Error in ExitPolicy entry.");
3438 policies_free_all();
3439 free_options_test_data(tdata
);
3444 test_options_validate__dir_auth(void *ignored
)
3449 options_test_data_t
*tdata
= NULL
;
3450 setup_capture_of_logs(LOG_WARN
);
3452 free_options_test_data(tdata
);
3453 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3457 mock_clean_saved_logs();
3458 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3459 tt_int_op(ret
, OP_EQ
, -1);
3460 tt_str_op(msg
, OP_EQ
,
3461 "Directory authority/fallback line did not parse. See logs for "
3464 "You cannot set both DirAuthority and Alternate*Authority.\n");
3467 free_options_test_data(tdata
);
3468 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3469 "TestingTorNetwork 1\n"
3471 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3472 tt_int_op(ret
, OP_EQ
, -1);
3473 tt_str_op(msg
, OP_EQ
,
3474 "TestingTorNetwork may only be configured in combination with a "
3475 "non-default set of DirAuthority or both of AlternateDirAuthority "
3476 "and AlternateBridgeAuthority configured.");
3479 free_options_test_data(tdata
);
3480 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3482 "TestingTorNetwork 1\n"
3484 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3485 tt_int_op(ret
, OP_EQ
, 0);
3488 free_options_test_data(tdata
);
3489 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3490 "TestingTorNetwork 1\n"
3493 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3494 tt_int_op(ret
, OP_EQ
, -1);
3495 tt_str_op(msg
, OP_EQ
,
3496 "TestingTorNetwork may only be configured in combination with a "
3497 "non-default set of DirAuthority or both of AlternateDirAuthority "
3498 "and AlternateBridgeAuthority configured.");
3501 free_options_test_data(tdata
);
3502 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3503 "TestingTorNetwork 1\n"
3504 VALID_ALT_BRIDGE_AUTH
3506 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3507 tt_int_op(ret
, OP_EQ
, -1);
3508 tt_str_op(msg
, OP_EQ
, "TestingTorNetwork may only be configured in "
3509 "combination with a non-default set of DirAuthority or both of "
3510 "AlternateDirAuthority and AlternateBridgeAuthority configured.");
3513 free_options_test_data(tdata
);
3514 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3516 VALID_ALT_BRIDGE_AUTH
3517 "TestingTorNetwork 1\n"
3519 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3520 tt_int_op(ret
, OP_EQ
, 0);
3524 policies_free_all();
3525 teardown_capture_of_logs();
3526 free_options_test_data(tdata
);
3531 test_options_validate__transport(void *ignored
)
3536 options_test_data_t
*tdata
= NULL
;
3537 setup_capture_of_logs(LOG_NOTICE
);
3539 free_options_test_data(tdata
);
3540 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3541 "ClientTransportPlugin !!\n"
3543 mock_clean_saved_logs();
3544 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3545 tt_int_op(ret
, OP_EQ
, -1);
3546 tt_str_op(msg
, OP_EQ
,
3547 "Invalid client transport line. See logs for details.");
3549 "Too few arguments on ClientTransportPlugin line.\n");
3552 free_options_test_data(tdata
);
3553 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3554 "ClientTransportPlugin foo exec bar\n"
3556 mock_clean_saved_logs();
3557 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3558 tt_int_op(ret
, OP_EQ
, 0);
3561 free_options_test_data(tdata
);
3562 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3563 "ServerTransportPlugin !!\n"
3565 mock_clean_saved_logs();
3566 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3567 tt_int_op(ret
, OP_EQ
, -1);
3568 tt_str_op(msg
, OP_EQ
,
3569 "Invalid server transport line. See logs for details.");
3571 "Too few arguments on ServerTransportPlugin line.\n");
3574 free_options_test_data(tdata
);
3575 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3576 "ServerTransportPlugin foo exec bar\n"
3578 mock_clean_saved_logs();
3579 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3580 tt_int_op(ret
, OP_EQ
, 0);
3582 "Tor is not configured as a relay but you specified a "
3583 "ServerTransportPlugin line (\"foo exec bar\"). The "
3584 "ServerTransportPlugin line will be ignored.\n");
3587 free_options_test_data(tdata
);
3588 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3589 "ServerTransportPlugin foo exec bar\n"
3590 "ORPort 127.0.0.1:5555\n"
3591 "BandwidthRate 76900\n"
3592 "BandwidthBurst 76900\n"
3593 "MaxAdvertisedBandwidth 38500\n"
3595 mock_clean_saved_logs();
3596 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3597 tt_int_op(ret
, OP_EQ
, 0);
3599 "Tor is not configured as a relay but you specified a "
3600 "ServerTransportPlugin line (\"foo exec bar\"). The "
3601 "ServerTransportPlugin line will be ignored.\n");
3604 free_options_test_data(tdata
);
3605 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3606 "ServerTransportListenAddr foo 127.0.0.42:55\n"
3607 "ServerTransportListenAddr !\n"
3609 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3610 tt_int_op(ret
, OP_EQ
, -1);
3611 tt_str_op(msg
, OP_EQ
,
3612 "ServerTransportListenAddr did not parse. See logs for details.");
3615 free_options_test_data(tdata
);
3616 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3617 "ServerTransportListenAddr foo 127.0.0.42:55\n"
3619 mock_clean_saved_logs();
3620 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3621 tt_int_op(ret
, OP_EQ
, 0);
3623 "You need at least a single managed-proxy to specify a transport "
3624 "listen address. The ServerTransportListenAddr line will be "
3628 free_options_test_data(tdata
);
3629 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3630 "ServerTransportListenAddr foo 127.0.0.42:55\n"
3631 "ServerTransportPlugin foo exec bar\n"
3632 "ORPort 127.0.0.1:5555\n"
3633 "BandwidthRate 76900\n"
3634 "BandwidthBurst 76900\n"
3635 "MaxAdvertisedBandwidth 38500\n"
3637 mock_clean_saved_logs();
3638 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3639 tt_int_op(ret
, OP_EQ
, 0);
3641 "You need at least a single managed-proxy to specify a transport "
3642 "listen address. The ServerTransportListenAddr line will be "
3646 escaped(NULL
); // This will free the leaking memory from the previous escaped
3647 policies_free_all();
3648 teardown_capture_of_logs();
3649 free_options_test_data(tdata
);
3654 test_options_validate__constrained_sockets(void *ignored
)
3659 options_test_data_t
*tdata
= NULL
;
3660 setup_capture_of_logs(LOG_WARN
);
3662 free_options_test_data(tdata
);
3663 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3664 "ConstrainedSockets 1\n"
3665 "ConstrainedSockSize 0\n"
3667 mock_clean_saved_logs();
3668 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3669 tt_int_op(ret
, OP_EQ
, -1);
3670 tt_str_op(msg
, OP_EQ
, "ConstrainedSockSize is invalid. Must be a value "
3671 "between 2048 and 262144 in 1024 byte increments.");
3674 free_options_test_data(tdata
);
3675 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3676 "ConstrainedSockets 1\n"
3677 "ConstrainedSockSize 263168\n"
3679 mock_clean_saved_logs();
3680 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3681 tt_int_op(ret
, OP_EQ
, -1);
3682 tt_str_op(msg
, OP_EQ
, "ConstrainedSockSize is invalid. Must be a value "
3683 "between 2048 and 262144 in 1024 byte increments.");
3686 free_options_test_data(tdata
);
3687 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3688 "ConstrainedSockets 1\n"
3689 "ConstrainedSockSize 2047\n"
3691 mock_clean_saved_logs();
3692 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3693 tt_int_op(ret
, OP_EQ
, -1);
3694 tt_str_op(msg
, OP_EQ
, "ConstrainedSockSize is invalid. Must be a value "
3695 "between 2048 and 262144 in 1024 byte increments.");
3698 free_options_test_data(tdata
);
3699 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3700 "ConstrainedSockets 1\n"
3701 "ConstrainedSockSize 2048\n"
3705 mock_clean_saved_logs();
3706 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3707 tt_int_op(ret
, OP_EQ
, 0);
3708 expect_log_msg("You have requested constrained "
3709 "socket buffers while also serving directory entries via DirPort."
3710 " It is strongly suggested that you disable serving directory"
3711 " requests when system TCP buffer resources are scarce.\n");
3714 free_options_test_data(tdata
);
3715 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3716 "ConstrainedSockets 1\n"
3717 "ConstrainedSockSize 2048\n"
3719 mock_clean_saved_logs();
3720 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3721 tt_int_op(ret
, OP_EQ
, 0);
3723 "You have requested constrained socket buffers while also serving"
3724 " directory entries via DirPort. It is strongly suggested that "
3725 "you disable serving directory requests when system TCP buffer "
3726 "resources are scarce.\n");
3730 policies_free_all();
3731 teardown_capture_of_logs();
3732 free_options_test_data(tdata
);
3737 test_options_validate__v3_auth(void *ignored
)
3742 options_test_data_t
*tdata
= NULL
;
3743 setup_capture_of_logs(LOG_WARN
);
3745 free_options_test_data(tdata
);
3746 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3747 "V3AuthVoteDelay 1000\n"
3748 "V3AuthDistDelay 1000\n"
3749 "V3AuthVotingInterval 1000\n"
3751 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3752 tt_int_op(ret
, OP_EQ
, -1);
3753 tt_str_op(msg
, OP_EQ
,
3754 "V3AuthVoteDelay plus V3AuthDistDelay must be less than half "
3755 "V3AuthVotingInterval");
3758 free_options_test_data(tdata
);
3759 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3760 "V3AuthVoteDelay 1\n"
3762 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3763 tt_int_op(ret
, OP_EQ
, -1);
3764 tt_str_op(msg
, OP_EQ
, "V3AuthVoteDelay is way too low.");
3767 free_options_test_data(tdata
);
3768 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3769 "V3AuthVoteDelay 1\n"
3770 "TestingTorNetwork 1\n"
3772 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3773 tt_int_op(ret
, OP_EQ
, -1);
3774 tt_str_op(msg
, OP_EQ
, "V3AuthVoteDelay is way too low.");
3777 // TODO: we can't reach the case of v3authvotedelay lower
3778 // than MIN_VOTE_SECONDS but not lower than MIN_VOTE_SECONDS_TESTING,
3779 // since they are the same
3781 free_options_test_data(tdata
);
3782 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3783 "V3AuthDistDelay 1\n"
3785 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3786 tt_int_op(ret
, OP_EQ
, -1);
3787 tt_str_op(msg
, OP_EQ
, "V3AuthDistDelay is way too low.");
3790 free_options_test_data(tdata
);
3791 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3792 "V3AuthDistDelay 1\n"
3793 "TestingTorNetwork 1\n"
3795 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3796 tt_int_op(ret
, OP_EQ
, -1);
3797 tt_str_op(msg
, OP_EQ
, "V3AuthDistDelay is way too low.");
3800 // TODO: we can't reach the case of v3authdistdelay lower than
3801 // MIN_DIST_SECONDS but not lower than MIN_DIST_SECONDS_TESTING,
3802 // since they are the same
3804 free_options_test_data(tdata
);
3805 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3806 "V3AuthNIntervalsValid 1\n"
3808 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3809 tt_int_op(ret
, OP_EQ
, -1);
3810 tt_str_op(msg
, OP_EQ
, "V3AuthNIntervalsValid must be at least 2.");
3813 free_options_test_data(tdata
);
3814 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3815 "V3AuthVoteDelay 49\n"
3816 "V3AuthDistDelay 49\n"
3817 "V3AuthVotingInterval 200\n"
3819 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3820 tt_int_op(ret
, OP_EQ
, -1);
3821 tt_str_op(msg
, OP_EQ
, "V3AuthVotingInterval is insanely low.");
3824 free_options_test_data(tdata
);
3825 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3826 "V3AuthVoteDelay 49\n"
3827 "V3AuthDistDelay 49\n"
3828 "V3AuthVotingInterval 200000\n"
3830 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3831 tt_int_op(ret
, OP_EQ
, -1);
3832 tt_str_op(msg
, OP_EQ
, "V3AuthVotingInterval is insanely high.");
3835 free_options_test_data(tdata
);
3836 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3837 "V3AuthVoteDelay 49\n"
3838 "V3AuthDistDelay 49\n"
3839 "V3AuthVotingInterval 1441\n"
3841 mock_clean_saved_logs();
3842 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3843 tt_int_op(ret
, OP_EQ
, 0);
3844 expect_log_msg("V3AuthVotingInterval does not divide"
3845 " evenly into 24 hours.\n");
3848 free_options_test_data(tdata
);
3849 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3850 "V3AuthVoteDelay 49\n"
3851 "V3AuthDistDelay 49\n"
3852 "V3AuthVotingInterval 1440\n"
3854 mock_clean_saved_logs();
3855 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3856 tt_int_op(ret
, OP_EQ
, 0);
3857 expect_no_log_msg("V3AuthVotingInterval does not divide"
3858 " evenly into 24 hours.\n");
3861 free_options_test_data(tdata
);
3862 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3863 "V3AuthVoteDelay 49\n"
3864 "V3AuthDistDelay 49\n"
3865 "V3AuthVotingInterval 299\n"
3867 "TestingTorNetwork 1\n"
3869 mock_clean_saved_logs();
3870 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3871 tt_int_op(ret
, OP_EQ
, 0);
3872 expect_log_msg("V3AuthVotingInterval is very low. "
3873 "This may lead to failure to synchronise for a consensus.\n");
3876 // TODO: It is impossible to reach the case of testingtor network, with
3877 // v3authvotinginterval too low
3878 /* free_options_test_data(tdata); */
3879 /* tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES */
3880 /* "V3AuthVoteDelay 1\n" */
3881 /* "V3AuthDistDelay 1\n" */
3882 /* "V3AuthVotingInterval 9\n" */
3883 /* VALID_DIR_AUTH */
3884 /* "TestingTorNetwork 1\n" */
3886 /* ret = options_validate(tdata->old_opt, tdata->opt, */
3887 /* tdata->def_opt, 0, &msg); */
3888 /* tt_int_op(ret, OP_EQ, -1); */
3889 /* tt_str_op(msg, OP_EQ, "V3AuthVotingInterval is insanely low."); */
3891 free_options_test_data(tdata
);
3892 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3893 "TestingV3AuthInitialVoteDelay 1\n"
3895 "TestingTorNetwork 1\n"
3897 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3898 tt_int_op(ret
, OP_EQ
, -1);
3899 tt_str_op(msg
, OP_EQ
, "TestingV3AuthInitialVoteDelay is way too low.");
3902 free_options_test_data(tdata
);
3903 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3904 "TestingV3AuthInitialDistDelay 1\n"
3906 "TestingTorNetwork 1\n"
3908 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3909 tt_int_op(ret
, OP_EQ
, -1);
3910 tt_str_op(msg
, OP_EQ
, "TestingV3AuthInitialDistDelay is way too low.");
3913 free_options_test_data(tdata
);
3914 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3916 "TestingTorNetwork 1\n"
3918 tdata
->opt
->TestingV3AuthVotingStartOffset
= 100000;
3919 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3920 tt_int_op(ret
, OP_EQ
, -1);
3921 tt_str_op(msg
, OP_EQ
, "TestingV3AuthVotingStartOffset is higher than the "
3922 "voting interval.");
3925 free_options_test_data(tdata
);
3926 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3928 "TestingTorNetwork 1\n"
3930 tdata
->opt
->TestingV3AuthVotingStartOffset
= -1;
3931 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3932 tt_int_op(ret
, OP_EQ
, -1);
3933 tt_str_op(msg
, OP_EQ
,
3934 "TestingV3AuthVotingStartOffset must be non-negative.");
3937 free_options_test_data(tdata
);
3938 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3940 "TestingTorNetwork 1\n"
3941 "TestingV3AuthInitialVotingInterval 4\n"
3943 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3944 tt_int_op(ret
, OP_EQ
, -1);
3945 tt_str_op(msg
, OP_EQ
, "TestingV3AuthInitialVotingInterval is insanely low.");
3949 policies_free_all();
3950 teardown_capture_of_logs();
3951 free_options_test_data(tdata
);
3956 test_options_validate__virtual_addr(void *ignored
)
3961 options_test_data_t
*tdata
= NULL
;
3963 free_options_test_data(tdata
);
3964 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3965 "VirtualAddrNetworkIPv4 !!"
3967 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3968 tt_int_op(ret
, OP_EQ
, -1);
3969 tt_str_op(msg
, OP_EQ
, "Error parsing VirtualAddressNetwork !!");
3972 free_options_test_data(tdata
);
3973 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
3974 "VirtualAddrNetworkIPv6 !!"
3976 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
3977 tt_int_op(ret
, OP_EQ
, -1);
3978 tt_str_op(msg
, OP_EQ
, "Error parsing VirtualAddressNetworkIPv6 !!");
3982 escaped(NULL
); // This will free the leaking memory from the previous escaped
3983 policies_free_all();
3984 free_options_test_data(tdata
);
3989 test_options_validate__testing_options(void *ignored
)
3994 options_test_data_t
*tdata
= NULL
;
3995 setup_capture_of_logs(LOG_WARN
);
3997 #define TEST_TESTING_OPTION(name, low_val, high_val, err_low) \
3999 free_options_test_data(tdata); \
4000 tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES \
4002 "TestingTorNetwork 1\n" \
4004 tdata->opt-> name = low_val; \
4005 ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);\
4006 tt_int_op(ret, OP_EQ, -1); \
4007 tt_str_op(msg, OP_EQ, #name " " err_low); \
4010 free_options_test_data(tdata); \
4011 tdata = get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES \
4013 "TestingTorNetwork 1\n" \
4015 tdata->opt-> name = high_val; \
4016 mock_clean_saved_logs(); \
4017 ret = options_validate(tdata->old_opt, tdata->opt, tdata->def_opt, 0, &msg);\
4018 tt_int_op(ret, OP_EQ, 0); \
4019 expect_log_msg( #name " is insanely high.\n"); \
4023 TEST_TESTING_OPTION(TestingAuthDirTimeToLearnReachability
, -1, 8000,
4024 "must be non-negative.");
4025 TEST_TESTING_OPTION(TestingEstimatedDescriptorPropagationTime
, -1, 3601,
4026 "must be non-negative.");
4027 TEST_TESTING_OPTION(TestingClientMaxIntervalWithoutRequest
, -1, 3601,
4029 TEST_TESTING_OPTION(TestingDirConnectionMaxStall
, 1, 3601,
4032 free_options_test_data(tdata
);
4033 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4034 "TestingEnableConnBwEvent 1\n"
4036 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4037 tt_int_op(ret
, OP_EQ
, -1);
4038 tt_str_op(msg
, OP_EQ
, "TestingEnableConnBwEvent may only be changed in "
4039 "testing Tor networks!");
4042 free_options_test_data(tdata
);
4043 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4044 "TestingEnableConnBwEvent 1\n"
4046 "TestingTorNetwork 1\n"
4047 "___UsingTestNetworkDefaults 0\n"
4050 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4051 tt_int_op(ret
, OP_EQ
, 0);
4055 free_options_test_data(tdata
);
4056 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4057 "TestingEnableConnBwEvent 1\n"
4059 "TestingTorNetwork 0\n"
4060 "___UsingTestNetworkDefaults 1\n"
4063 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4064 tt_int_op(ret
, OP_EQ
, 0);
4068 free_options_test_data(tdata
);
4069 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4070 "TestingEnableCellStatsEvent 1\n"
4072 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4073 tt_int_op(ret
, OP_EQ
, -1);
4074 tt_str_op(msg
, OP_EQ
, "TestingEnableCellStatsEvent may only be changed in "
4075 "testing Tor networks!");
4078 free_options_test_data(tdata
);
4079 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4080 "TestingEnableCellStatsEvent 1\n"
4082 "TestingTorNetwork 1\n"
4083 "___UsingTestNetworkDefaults 0\n"
4086 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4087 tt_int_op(ret
, OP_EQ
, 0);
4091 free_options_test_data(tdata
);
4092 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4093 "TestingEnableCellStatsEvent 1\n"
4095 "TestingTorNetwork 0\n"
4096 "___UsingTestNetworkDefaults 1\n"
4099 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4100 tt_int_op(ret
, OP_EQ
, 0);
4104 free_options_test_data(tdata
);
4105 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4106 "TestingEnableTbEmptyEvent 1\n"
4108 "TestingTorNetwork 1\n"
4109 "___UsingTestNetworkDefaults 0\n"
4112 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4113 tt_int_op(ret
, OP_EQ
, 0);
4117 free_options_test_data(tdata
);
4118 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4119 "TestingEnableTbEmptyEvent 1\n"
4121 "TestingTorNetwork 0\n"
4122 "___UsingTestNetworkDefaults 1\n"
4125 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4126 tt_int_op(ret
, OP_EQ
, 0);
4131 policies_free_all();
4132 teardown_capture_of_logs();
4133 free_options_test_data(tdata
);
4138 test_options_validate__accel(void *ignored
)
4143 options_test_data_t
*tdata
= NULL
;
4145 free_options_test_data(tdata
);
4146 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4149 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4150 tt_int_op(ret
, OP_EQ
, 0);
4151 tt_int_op(tdata
->opt
->HardwareAccel
, OP_EQ
, 1);
4154 free_options_test_data(tdata
);
4155 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4158 tdata
->opt
->HardwareAccel
= 2;
4159 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4160 tt_int_op(ret
, OP_EQ
, 0);
4161 tt_int_op(tdata
->opt
->HardwareAccel
, OP_EQ
, 2);
4164 free_options_test_data(tdata
);
4165 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4168 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4169 tt_int_op(ret
, OP_EQ
, -1);
4170 tt_str_op(msg
, OP_EQ
,
4171 "Can't use hardware crypto accelerator dir without engine name.");
4174 free_options_test_data(tdata
);
4175 tdata
= get_options_test_data(TEST_OPTIONS_DEFAULT_VALUES
4177 "AccelName something\n"
4179 ret
= options_validate(tdata
->old_opt
, tdata
->opt
, tdata
->def_opt
, 0, &msg
);
4180 tt_int_op(ret
, OP_EQ
, 0);
4184 policies_free_all();
4185 free_options_test_data(tdata
);
4189 #define LOCAL_VALIDATE_TEST(name) \
4190 { "validate__" #name, test_options_validate__ ## name, TT_FORK, NULL, NULL }
4192 struct testcase_t options_tests
[] = {
4193 { "validate", test_options_validate
, TT_FORK
, NULL
, NULL
},
4194 { "mem_dircache", test_have_enough_mem_for_dircache
, TT_FORK
, NULL
, NULL
},
4195 LOCAL_VALIDATE_TEST(uname_for_server
),
4196 LOCAL_VALIDATE_TEST(outbound_addresses
),
4197 LOCAL_VALIDATE_TEST(data_directory
),
4198 LOCAL_VALIDATE_TEST(nickname
),
4199 LOCAL_VALIDATE_TEST(contactinfo
),
4200 LOCAL_VALIDATE_TEST(logs
),
4201 LOCAL_VALIDATE_TEST(authdir
),
4202 LOCAL_VALIDATE_TEST(relay_with_hidden_services
),
4203 LOCAL_VALIDATE_TEST(transproxy
),
4204 LOCAL_VALIDATE_TEST(exclude_nodes
),
4205 LOCAL_VALIDATE_TEST(node_families
),
4206 LOCAL_VALIDATE_TEST(token_bucket
),
4207 LOCAL_VALIDATE_TEST(recommended_packages
),
4208 LOCAL_VALIDATE_TEST(fetch_dir
),
4209 LOCAL_VALIDATE_TEST(conn_limit
),
4210 LOCAL_VALIDATE_TEST(paths_needed
),
4211 LOCAL_VALIDATE_TEST(max_client_circuits
),
4212 LOCAL_VALIDATE_TEST(ports
),
4213 LOCAL_VALIDATE_TEST(reachable_addresses
),
4214 LOCAL_VALIDATE_TEST(use_bridges
),
4215 LOCAL_VALIDATE_TEST(entry_nodes
),
4216 LOCAL_VALIDATE_TEST(safe_logging
),
4217 LOCAL_VALIDATE_TEST(publish_server_descriptor
),
4218 LOCAL_VALIDATE_TEST(testing
),
4219 LOCAL_VALIDATE_TEST(hidserv
),
4220 LOCAL_VALIDATE_TEST(path_bias
),
4221 LOCAL_VALIDATE_TEST(bandwidth
),
4222 LOCAL_VALIDATE_TEST(circuits
),
4223 LOCAL_VALIDATE_TEST(tor2web
),
4224 LOCAL_VALIDATE_TEST(rend
),
4225 LOCAL_VALIDATE_TEST(single_onion
),
4226 LOCAL_VALIDATE_TEST(accounting
),
4227 LOCAL_VALIDATE_TEST(proxy
),
4228 LOCAL_VALIDATE_TEST(control
),
4229 LOCAL_VALIDATE_TEST(families
),
4230 LOCAL_VALIDATE_TEST(addr_policies
),
4231 LOCAL_VALIDATE_TEST(dir_auth
),
4232 LOCAL_VALIDATE_TEST(transport
),
4233 LOCAL_VALIDATE_TEST(constrained_sockets
),
4234 LOCAL_VALIDATE_TEST(v3_auth
),
4235 LOCAL_VALIDATE_TEST(virtual_addr
),
4236 LOCAL_VALIDATE_TEST(testing_options
),
4237 LOCAL_VALIDATE_TEST(accel
),
4238 END_OF_TESTCASES
/* */