|
@@ -7,6 +7,7 @@
|
|
|
#define CONTROL_EVENTS_PRIVATE
|
|
|
#define OCIRC_EVENT_PRIVATE
|
|
|
#define ORCONN_EVENT_PRIVATE
|
|
|
+#include "app/main/subsysmgr.h"
|
|
|
#include "core/or/or.h"
|
|
|
#include "core/or/channel.h"
|
|
|
#include "core/or/channeltls.h"
|
|
@@ -16,6 +17,7 @@
|
|
|
#include "core/mainloop/connection.h"
|
|
|
#include "feature/control/control_events.h"
|
|
|
#include "test/test.h"
|
|
|
+#include "test/test_helpers.h"
|
|
|
|
|
|
#include "core/or/or_circuit_st.h"
|
|
|
#include "core/or/origin_circuit_st.h"
|
|
@@ -394,38 +396,39 @@ test_cntev_dirboot_defer_orconn(void *arg)
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-setup_orconn_state(orconn_event_msg_t *msg, uint64_t gid, uint64_t chan,
|
|
|
+setup_orconn_state(orconn_state_msg_t *msg, uint64_t gid, uint64_t chan,
|
|
|
int proxy_type)
|
|
|
{
|
|
|
- msg->type = ORCONN_MSGTYPE_STATE;
|
|
|
- msg->u.state.gid = gid;
|
|
|
- msg->u.state.chan = chan;
|
|
|
- msg->u.state.proxy_type = proxy_type;
|
|
|
+ msg->gid = gid;
|
|
|
+ msg->chan = chan;
|
|
|
+ msg->proxy_type = proxy_type;
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
-send_orconn_state(orconn_event_msg_t *msg, uint8_t state)
|
|
|
+send_orconn_state(const orconn_state_msg_t *msg_in, uint8_t state)
|
|
|
{
|
|
|
- msg->u.state.state = state;
|
|
|
- orconn_event_publish(msg);
|
|
|
+ orconn_state_msg_t *msg = tor_malloc(sizeof(*msg));
|
|
|
+
|
|
|
+ *msg = *msg_in;
|
|
|
+ msg->state = state;
|
|
|
+ orconn_state_publish(msg);
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
send_ocirc_chan(uint32_t gid, uint64_t chan, bool onehop)
|
|
|
{
|
|
|
- ocirc_event_msg_t msg;
|
|
|
+ ocirc_chan_msg_t *msg = tor_malloc(sizeof(*msg));
|
|
|
|
|
|
- msg.type = OCIRC_MSGTYPE_CHAN;
|
|
|
- msg.u.chan.gid = gid;
|
|
|
- msg.u.chan.chan = chan;
|
|
|
- msg.u.chan.onehop = onehop;
|
|
|
- ocirc_event_publish(&msg);
|
|
|
+ msg->gid = gid;
|
|
|
+ msg->chan = chan;
|
|
|
+ msg->onehop = onehop;
|
|
|
+ ocirc_chan_publish(msg);
|
|
|
}
|
|
|
|
|
|
static void
|
|
|
test_cntev_orconn_state(void *arg)
|
|
|
{
|
|
|
- orconn_event_msg_t conn;
|
|
|
+ orconn_state_msg_t conn;
|
|
|
|
|
|
(void)arg;
|
|
|
MOCK(queue_control_event_string, mock_queue_control_event_string);
|
|
@@ -442,8 +445,8 @@ test_cntev_orconn_state(void *arg)
|
|
|
send_orconn_state(&conn, OR_CONN_STATE_OPEN);
|
|
|
assert_bootmsg("15 TAG=handshake_done");
|
|
|
|
|
|
- conn.u.state.gid = 2;
|
|
|
- conn.u.state.chan = 2;
|
|
|
+ conn.gid = 2;
|
|
|
+ conn.chan = 2;
|
|
|
send_orconn_state(&conn, OR_CONN_STATE_CONNECTING);
|
|
|
/* It doesn't know it's an origin circuit yet */
|
|
|
assert_bootmsg("15 TAG=handshake_done");
|
|
@@ -464,7 +467,7 @@ test_cntev_orconn_state(void *arg)
|
|
|
static void
|
|
|
test_cntev_orconn_state_pt(void *arg)
|
|
|
{
|
|
|
- orconn_event_msg_t conn;
|
|
|
+ orconn_state_msg_t conn;
|
|
|
|
|
|
(void)arg;
|
|
|
MOCK(queue_control_event_string, mock_queue_control_event_string);
|
|
@@ -484,8 +487,8 @@ test_cntev_orconn_state_pt(void *arg)
|
|
|
assert_bootmsg("15 TAG=handshake_done");
|
|
|
|
|
|
send_ocirc_chan(2, 2, false);
|
|
|
- conn.u.state.gid = 2;
|
|
|
- conn.u.state.chan = 2;
|
|
|
+ conn.gid = 2;
|
|
|
+ conn.chan = 2;
|
|
|
send_orconn_state(&conn, OR_CONN_STATE_CONNECTING);
|
|
|
assert_bootmsg("76 TAG=ap_conn_pt");
|
|
|
send_orconn_state(&conn, OR_CONN_STATE_PROXY_HANDSHAKING);
|
|
@@ -499,7 +502,7 @@ test_cntev_orconn_state_pt(void *arg)
|
|
|
static void
|
|
|
test_cntev_orconn_state_proxy(void *arg)
|
|
|
{
|
|
|
- orconn_event_msg_t conn;
|
|
|
+ orconn_state_msg_t conn;
|
|
|
|
|
|
(void)arg;
|
|
|
MOCK(queue_control_event_string, mock_queue_control_event_string);
|
|
@@ -519,8 +522,8 @@ test_cntev_orconn_state_proxy(void *arg)
|
|
|
assert_bootmsg("15 TAG=handshake_done");
|
|
|
|
|
|
send_ocirc_chan(2, 2, false);
|
|
|
- conn.u.state.gid = 2;
|
|
|
- conn.u.state.chan = 2;
|
|
|
+ conn.gid = 2;
|
|
|
+ conn.chan = 2;
|
|
|
send_orconn_state(&conn, OR_CONN_STATE_CONNECTING);
|
|
|
assert_bootmsg("78 TAG=ap_conn_proxy");
|
|
|
send_orconn_state(&conn, OR_CONN_STATE_PROXY_HANDSHAKING);
|
|
@@ -534,15 +537,18 @@ test_cntev_orconn_state_proxy(void *arg)
|
|
|
#define TEST(name, flags) \
|
|
|
{ #name, test_cntev_ ## name, flags, 0, NULL }
|
|
|
|
|
|
+#define T_PUBSUB(name, setup) \
|
|
|
+ { #name, test_cntev_ ## name, TT_FORK, &helper_pubsub_setup, NULL }
|
|
|
+
|
|
|
struct testcase_t controller_event_tests[] = {
|
|
|
TEST(sum_up_cell_stats, TT_FORK),
|
|
|
TEST(append_cell_stats, TT_FORK),
|
|
|
TEST(format_cell_stats, TT_FORK),
|
|
|
TEST(event_mask, TT_FORK),
|
|
|
- TEST(dirboot_defer_desc, TT_FORK),
|
|
|
- TEST(dirboot_defer_orconn, TT_FORK),
|
|
|
- TEST(orconn_state, TT_FORK),
|
|
|
- TEST(orconn_state_pt, TT_FORK),
|
|
|
- TEST(orconn_state_proxy, TT_FORK),
|
|
|
+ T_PUBSUB(dirboot_defer_desc, TT_FORK),
|
|
|
+ T_PUBSUB(dirboot_defer_orconn, TT_FORK),
|
|
|
+ T_PUBSUB(orconn_state, TT_FORK),
|
|
|
+ T_PUBSUB(orconn_state_pt, TT_FORK),
|
|
|
+ T_PUBSUB(orconn_state_proxy, TT_FORK),
|
|
|
END_OF_TESTCASES
|
|
|
};
|