[tor-commits] [tor/master] Merge branch 'ticket31705_v2' into ticket31705_v2_merged

teor at torproject.org teor at torproject.org
Thu Oct 24 00:01:21 UTC 2019


commit b2d487ae2249a307cd23255dbb1a22241eefd6ef
Merge: 2d013bbe5 7e7a4874b
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Oct 22 09:39:06 2019 -0400

    Merge branch 'ticket31705_v2' into ticket31705_v2_merged
    
    Conflicts:
            src/feature/dirparse/authcert_parse.c
            src/feature/dirparse/ns_parse.c
            src/feature/hs/hs_service.c
            src/lib/conf/conftesting.h
            src/lib/log/log.h
            src/lib/thread/threads.h
            src/test/test_options.c
    
    These conflicts were mostly related to autostyle improvements, with
    one or two due to doxygen fixes.

 changes/ticket31705                      |  9 +++++
 scripts/coccinelle/apply.sh              |  9 +++++
 scripts/coccinelle/test-operator-cleanup | 13 +++++++
 scripts/coccinelle/tor-coccinelle.h      | 60 ++++++++++++++++++++++++++++++++
 scripts/coccinelle/try_parse.sh          | 29 +++++++++++++++
 src/app/config/config.c                  | 10 ++++++
 src/core/mainloop/mainloop.c             |  9 ++++-
 src/core/mainloop/periodic.h             |  2 ++
 src/core/or/circuitpadding.c             |  2 ++
 src/core/or/or_periodic.c                |  2 ++
 src/feature/control/control_cmd.c        |  2 ++
 src/feature/control/control_events.c     |  2 ++
 src/feature/dirauth/dirauth_periodic.c   |  2 ++
 src/feature/dircommon/consdiff.c         |  2 ++
 src/feature/hs/hs_service.c              |  2 ++
 src/feature/relay/relay_periodic.c       |  2 ++
 src/lib/buf/buffers.c                    |  2 ++
 src/lib/cc/ctassert.h                    |  2 +-
 src/lib/conf/confmacros.h                |  2 ++
 src/lib/conf/conftesting.h               |  9 ++---
 src/lib/container/namemap_st.h           |  2 ++
 src/lib/container/smartlist.h            |  2 ++
 src/lib/crypt_ops/crypto_openssl_mgt.c   |  6 ++--
 src/lib/dispatch/dispatch_naming.c       |  2 ++
 src/lib/evloop/timers.c                  |  4 ++-
 src/lib/intmath/weakrng.h                |  3 ++
 src/lib/log/log.c                        |  2 +-
 src/lib/log/log.h                        |  4 ++-
 src/lib/log/ratelim.h                    |  2 ++
 src/lib/log/util_bug.h                   |  9 +++--
 src/lib/malloc/map_anon.c                |  4 +--
 src/lib/net/address.c                    |  2 +-
 src/lib/string/parse_int.c               |  5 ++-
 src/lib/thread/threads.h                 |  4 ++-
 src/lib/tls/tortls_openssl.c             |  2 ++
 src/lib/version/git_revision.c           |  4 +++
 src/lib/wallclock/timeval.h              |  2 ++
 src/test/hs_test_helpers.c               | 28 +++++++--------
 src/test/test.h                          |  6 ++++
 src/test/test_addr.c                     |  6 ++++
 src/test/test_config.c                   |  2 ++
 src/test/test_confparse.c                |  2 ++
 src/test/test_connection.c               |  2 ++
 src/test/test_controller.c               |  4 +++
 src/test/test_crypto.c                   |  2 ++
 src/test/test_crypto_slow.c              |  2 ++
 src/test/test_dir.c                      |  2 ++
 src/test/test_entrynodes.c               |  2 ++
 src/test/test_link_handshake.c           |  2 ++
 src/test/test_options.c                  |  2 ++
 src/test/test_router.c                   | 10 +++---
 src/test/test_scheduler.c                | 52 +++++++++++++--------------
 src/test/test_util.c                     |  4 +++
 53 files changed, 296 insertions(+), 63 deletions(-)

diff --cc src/feature/hs/hs_service.c
index 15db5dd1d,600d64cac..964bf68a1
--- a/src/feature/hs/hs_service.c
+++ b/src/feature/hs/hs_service.c
@@@ -67,7 -67,8 +67,8 @@@
  #include <unistd.h>
  #endif
  
+ #ifndef COCCI
 -/* Helper macro. Iterate over every service in the global map. The var is the
 +/** Helper macro. Iterate over every service in the global map. The var is the
   * name of the service pointer. */
  #define FOR_EACH_SERVICE_BEGIN(var)                          \
      STMT_BEGIN                                               \
diff --cc src/lib/log/util_bug.h
index c3141754d,8c233da73..dcff5fd9c
--- a/src/lib/log/util_bug.h
+++ b/src/lib/log/util_bug.h
@@@ -208,10 -211,10 +211,10 @@@
        if (bool_result && !var) {                                        \
          var = 1;                                                        \
          tor_bug_occurred_(SHORT_FILE__, __LINE__, __func__,             \
-                           "!("#cond")", 1, NULL);                       \
+                           ("!("#cond")"), 1, NULL);                     \
        }                                                                 \
        bool_result; } ))
 -#else /* !(defined(__GNUC__)) */
 +#else /* !defined(__GNUC__) */
  #define IF_BUG_ONCE__(cond,var)                                         \
    static int var = 0;                                                   \
    if ((cond) ?                                                          \
diff --cc src/test/test_options.c
index 82def205a,62d477a63..aeb5de210
--- a/src/test/test_options.c
+++ b/src/test/test_options.c
@@@ -3882,193 -4163,10 +3882,195 @@@ test_options_validate__accel(void *igno
    tor_free(msg);
  }
  
 +static int mocked_granularity;
 +
 +static void
 +mock_set_log_time_granularity(int g)
 +{
 +  mocked_granularity = g;
 +}
 +
 +static void
 +test_options_init_logs_granularity(void *arg)
 +{
 +  options_test_data_t *tdata = get_options_test_data("");
 +  int rv;
 +  (void) arg;
 +
 +  MOCK(set_log_time_granularity, mock_set_log_time_granularity);
 +
 +  /* Reasonable value. */
 +  tdata->opt->LogTimeGranularity = 100;
 +  mocked_granularity = -1;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(mocked_granularity, OP_EQ, 100);
 +
 +  /* Doesn't divide 1000. */
 +  tdata->opt->LogTimeGranularity = 249;
 +  mocked_granularity = -1;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(mocked_granularity, OP_EQ, 250);
 +
 +  /* Doesn't divide 1000. */
 +  tdata->opt->LogTimeGranularity = 3;
 +  mocked_granularity = -1;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(mocked_granularity, OP_EQ, 4);
 +
 +  /* Not a multiple of 1000. */
 +  tdata->opt->LogTimeGranularity = 1500;
 +  mocked_granularity = -1;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(mocked_granularity, OP_EQ, 2000);
 +
 +  /* Reasonable value. */
 +  tdata->opt->LogTimeGranularity = 3000;
 +  mocked_granularity = -1;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(mocked_granularity, OP_EQ, 3000);
 +
 +  /* Negative. (Shouldn't be allowed by rest of config parsing.) */
 +  tdata->opt->LogTimeGranularity = -1;
 +  mocked_granularity = -1;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, -1);
 +
 +  /* Very big */
 +  tdata->opt->LogTimeGranularity = 3600 * 1000;
 +  mocked_granularity = -1;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(mocked_granularity, OP_EQ, 3600 * 1000);
 +
 + done:
 +  free_options_test_data(tdata);
 +  UNMOCK(set_log_time_granularity);
 +}
 +
 +typedef struct {
 +  char *name;
 +  log_severity_list_t sev;
 +  int fd;
 +  bool stream;
 +} added_log_t;
 +
 +static smartlist_t *added_logs = NULL;
 +
 +static void
 +mock_add_stream_log_impl(const log_severity_list_t *sev, const char *name,
 +                         int fd)
 +{
 +  added_log_t *a = tor_malloc_zero(sizeof(added_log_t));
 +  a->name = tor_strdup(name);
 +  memcpy(&a->sev, sev, sizeof(log_severity_list_t));
 +  a->fd = fd;
 +  a->stream = true;
 +  smartlist_add(added_logs, a);
 +}
 +
 +static int
 +mock_add_file_log(const log_severity_list_t *sev, const char *name, int fd)
 +{
 +  added_log_t *a = tor_malloc_zero(sizeof(added_log_t));
 +  a->name = tor_strdup(name);
 +  memcpy(&a->sev, sev, sizeof(log_severity_list_t));
 +  a->fd = fd;
 +  smartlist_add(added_logs, a);
 +  return 0;
 +}
 +
 +static void
 +clear_added_logs(void)
 +{
 +  SMARTLIST_FOREACH(added_logs, added_log_t *, a,
 +                    { tor_free(a->name); tor_free(a); });
 +  smartlist_clear(added_logs);
 +}
 +
 +static void
 +test_options_init_logs_quiet(void *arg)
 +{
 +  (void)arg;
 +  char *cfg = NULL;
 +  options_test_data_t *tdata = get_options_test_data("");
 +  char *fn1 = tor_strdup(get_fname_rnd("log"));
 +  const added_log_t *a;
 +  int rv;
 +  tdata->opt->RunAsDaemon = 0;
 +
 +  added_logs = smartlist_new();
 +  MOCK(add_stream_log_impl, mock_add_stream_log_impl);
 +  MOCK(add_file_log, mock_add_file_log);
 +
 +  tt_ptr_op(tdata->opt->Logs, OP_EQ, NULL);
 +
 +  /* First, try with no configured logs, and make sure that our configured
 +     logs match the quiet level. */
 +  quiet_level = QUIET_SILENT;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(smartlist_len(added_logs), OP_EQ, 0);
 +
 +  quiet_level = QUIET_HUSH;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(smartlist_len(added_logs), OP_EQ, 1);
 +  a = smartlist_get(added_logs, 0);
 +  tt_assert(a);
 +  tt_assert(a->stream);
 +  tt_int_op(a->fd, OP_EQ, fileno(stdout));
 +  tt_int_op(a->sev.masks[LOG_INFO-LOG_ERR], OP_EQ, 0);
 +  tt_int_op(a->sev.masks[LOG_NOTICE-LOG_ERR], OP_EQ, 0);
 +  tt_int_op(a->sev.masks[LOG_WARN-LOG_ERR], OP_EQ, LD_ALL_DOMAINS);
 +  clear_added_logs();
 +
 +  quiet_level = QUIET_NONE;
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(smartlist_len(added_logs), OP_EQ, 1);
 +  a = smartlist_get(added_logs, 0);
 +  tt_assert(a);
 +  tt_assert(a->stream);
 +  tt_int_op(a->fd, OP_EQ, fileno(stdout));
 +  tt_int_op(a->sev.masks[LOG_INFO-LOG_ERR], OP_EQ, 0);
 +  tt_int_op(a->sev.masks[LOG_NOTICE-LOG_ERR], OP_EQ, LD_ALL_DOMAINS);
 +  tt_int_op(a->sev.masks[LOG_WARN-LOG_ERR], OP_EQ, LD_ALL_DOMAINS);
 +  clear_added_logs();
 +
 +  /* Make sure that adding a configured log makes the default logs go away. */
 +  tor_asprintf(&cfg, "Log info file %s\n", fn1);
 +  free_options_test_data(tdata);
 +  tdata = get_options_test_data(cfg);
 +  rv = options_init_logs(NULL, tdata->opt, 0);
 +  tt_int_op(rv, OP_EQ, 0);
 +  tt_int_op(smartlist_len(added_logs), OP_EQ, 1);
 +  a = smartlist_get(added_logs, 0);
 +  tt_assert(a);
 +  tt_assert(! a->stream);
 +  tt_int_op(a->fd, OP_NE, fileno(stdout));
 +  tt_int_op(a->sev.masks[LOG_INFO-LOG_ERR], OP_EQ, LD_ALL_DOMAINS);
 +  tt_int_op(a->sev.masks[LOG_NOTICE-LOG_ERR], OP_EQ, LD_ALL_DOMAINS);
 +  tt_int_op(a->sev.masks[LOG_WARN-LOG_ERR], OP_EQ, LD_ALL_DOMAINS);
 +
 + done:
 +  free_options_test_data(tdata);
 +  tor_free(fn1);
 +  tor_free(cfg);
 +  clear_added_logs();
 +  smartlist_free(added_logs);
 +  UNMOCK(add_stream_log_impl);
 +  UNMOCK(add_file_log);
 +}
 +
+ #ifndef COCCI
  #define LOCAL_VALIDATE_TEST(name) \
    { "validate__" #name, test_options_validate__ ## name, TT_FORK, NULL, NULL }
+ #endif
  
  struct testcase_t options_tests[] = {
    { "validate", test_options_validate, TT_FORK, NULL, NULL },





More information about the tor-commits mailing list