[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Add testing-only functions to get the subsystem config/state indices
commit b06e9d8ad58bfe11d2c1f6a921ba059658a578f2
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
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) */
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits