aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2019-11-01 10:41:02 -0400
committerNick Mathewson <nickm@torproject.org>2019-11-07 07:28:43 -0500
commitb06e9d8ad58bfe11d2c1f6a921ba059658a578f2 (patch)
treef43d19ffc0b9c769531ac4634889d58d34388907
parent52c0ab4af3ec152c4b78669acf8877ca27d66097 (diff)
downloadtor-b06e9d8ad58bfe11d2c1f6a921ba059658a578f2.tar.gz
tor-b06e9d8ad58bfe11d2c1f6a921ba059658a578f2.zip
Add testing-only functions to get the subsystem config/state indices
-rw-r--r--src/app/main/subsysmgr.c48
-rw-r--r--src/app/main/subsysmgr.h5
2 files changed, 53 insertions, 0 deletions
diff --git a/src/app/main/subsysmgr.c b/src/app/main/subsysmgr.c
index bd9af11444..4189519cad 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 7e5fe76362..c1138e1ff3 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) */