[tor-commits] [tor/master] Add testing-only functions to get the subsystem config/state indices

nickm at torproject.org nickm at torproject.org
Thu Nov 7 13:59:49 UTC 2019


commit b06e9d8ad58bfe11d2c1f6a921ba059658a578f2
Author: Nick Mathewson <nickm at torproject.org>
Date:   Fri Nov 1 10:41:02 2019 -0400

    Add testing-only functions to get the subsystem config/state indices
---
 src/app/main/subsysmgr.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/app/main/subsysmgr.h |  5 +++++
 2 files changed, 53 insertions(+)

diff --git a/src/app/main/subsysmgr.c b/src/app/main/subsysmgr.c
index bd9af1144..4189519ca 100644
--- a/src/app/main/subsysmgr.c
+++ b/src/app/main/subsysmgr.c
@@ -335,6 +335,54 @@ subsystems_register_state_formats(config_mgr_t *mgr)
   return 0;
 }
 
+#ifdef TOR_UNIT_TESTS
+/**
+ * Helper: look up the index for <b>sys</b>.  Return -1 if the subsystem
+ * is not recognized.
+ **/
+static int
+subsys_get_idx(const subsys_fns_t *sys)
+{
+  for (unsigned i = 0; i < n_tor_subsystems; ++i) {
+    if (sys == tor_subsystems[i])
+      return (int)i;
+  }
+  return -1;
+}
+
+/**
+ * Return the current state-manager's index for any state held by the
+ * subsystem <b>sys</b>.  If <b>sys</b> has no options, return -1.
+ *
+ * Using raw indices can be error-prone: only do this from the unit
+ * tests. If you need a way to access another subsystem's configuration,
+ * that subsystem should provide access functions.
+ **/
+int
+subsystems_get_options_idx(const subsys_fns_t *sys)
+{
+  int i = subsys_get_idx(sys);
+  tor_assert(i >= 0);
+  return sys_status[i].options_idx;
+}
+
+/**
+ * Return the current state-manager's index for any state held by the
+ * subsystem <b>sys</b>.  If <b>sys</b> has no state, return -1.
+ *
+ * Using raw indices can be error-prone: only do this from the unit
+ * tests.  If you need a way to access another subsystem's state
+ * that subsystem should provide access functions.
+ **/
+int
+subsystems_get_state_idx(const subsys_fns_t *sys)
+{
+  int i = subsys_get_idx(sys);
+  tor_assert(i >= 0);
+  return sys_status[i].state_idx;
+}
+#endif
+
 /**
  * Call all appropriate set_options() methods to tell the various subsystems
  * about a new set of torrc options.  Return 0 on success, -1 on
diff --git a/src/app/main/subsysmgr.h b/src/app/main/subsysmgr.h
index 7e5fe7636..c1138e1ff 100644
--- a/src/app/main/subsysmgr.h
+++ b/src/app/main/subsysmgr.h
@@ -43,4 +43,9 @@ int subsystems_set_state(const struct config_mgr_t *mgr,
 int subsystems_flush_state(const struct config_mgr_t *mgr,
                            struct or_state_t *state);
 
+#ifdef TOR_UNIT_TESTS
+int subsystems_get_options_idx(const subsys_fns_t *sys);
+int subsystems_get_state_idx(const subsys_fns_t *sys);
+#endif
+
 #endif /* !defined(TOR_SUBSYSMGR_T) */





More information about the tor-commits mailing list