2014-10-28 20:28:14 +01:00
|
|
|
/* Copyright (c) 2013-2014, The Tor Project, Inc. */
|
2013-07-19 18:05:38 +02:00
|
|
|
/* See LICENSE for licensing information */
|
|
|
|
|
|
|
|
#define TOR_CHANNEL_INTERNAL_
|
|
|
|
#define CIRCUITMUX_PRIVATE
|
|
|
|
#define RELAY_PRIVATE
|
|
|
|
#include "or.h"
|
|
|
|
#include "channel.h"
|
|
|
|
#include "circuitmux.h"
|
|
|
|
#include "relay.h"
|
|
|
|
#include "test.h"
|
|
|
|
|
|
|
|
/* XXXX duplicated function from test_circuitlist.c */
|
|
|
|
static channel_t *
|
|
|
|
new_fake_channel(void)
|
|
|
|
{
|
|
|
|
channel_t *chan = tor_malloc_zero(sizeof(channel_t));
|
|
|
|
channel_init(chan);
|
|
|
|
return chan;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
has_queued_writes(channel_t *c)
|
|
|
|
{
|
|
|
|
(void) c;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Test destroy cell queue with no interference from other queues. */
|
|
|
|
static void
|
|
|
|
test_cmux_destroy_cell_queue(void *arg)
|
|
|
|
{
|
|
|
|
circuitmux_t *cmux = NULL;
|
|
|
|
channel_t *ch = NULL;
|
|
|
|
circuit_t *circ = NULL;
|
|
|
|
cell_queue_t *cq = NULL;
|
|
|
|
packed_cell_t *pc = NULL;
|
|
|
|
|
2014-05-13 03:23:34 +02:00
|
|
|
#ifdef ENABLE_MEMPOOLS
|
2013-07-19 18:05:38 +02:00
|
|
|
init_cell_pool();
|
2014-05-13 03:23:34 +02:00
|
|
|
#endif /* ENABLE_MEMPOOLS */
|
2013-07-19 18:05:38 +02:00
|
|
|
(void) arg;
|
|
|
|
|
|
|
|
cmux = circuitmux_alloc();
|
|
|
|
tt_assert(cmux);
|
|
|
|
ch = new_fake_channel();
|
|
|
|
ch->has_queued_writes = has_queued_writes;
|
|
|
|
ch->wide_circ_ids = 1;
|
|
|
|
|
|
|
|
circ = circuitmux_get_first_active_circuit(cmux, &cq);
|
|
|
|
tt_assert(!circ);
|
|
|
|
tt_assert(!cq);
|
|
|
|
|
|
|
|
circuitmux_append_destroy_cell(ch, cmux, 100, 10);
|
|
|
|
circuitmux_append_destroy_cell(ch, cmux, 190, 6);
|
|
|
|
circuitmux_append_destroy_cell(ch, cmux, 30, 1);
|
|
|
|
|
|
|
|
tt_int_op(circuitmux_num_cells(cmux), ==, 3);
|
|
|
|
|
|
|
|
circ = circuitmux_get_first_active_circuit(cmux, &cq);
|
|
|
|
tt_assert(!circ);
|
|
|
|
tt_assert(cq);
|
|
|
|
|
|
|
|
tt_int_op(cq->n, ==, 3);
|
|
|
|
|
|
|
|
pc = cell_queue_pop(cq);
|
|
|
|
tt_assert(pc);
|
Use coccinelle scripts to clean up our unit tests
This should get rid of most of the users of the old test_*
functions. Some are in macros and will need manual cleanup, though.
This patch is for 13119, and was automatically generated with these
scripts. The perl scripts are there because coccinelle hates
operators as macro arguments.
------------------------------
s/==,/_X_EQ_,/g;
s/!=,/_X_NE_,/g;
s/<,/_X_LT_,/g;
s/>,/_X_GT_,/g;
s/>=,/_X_GEQ_,/g;
s/<=,/_X_LEQ_,/g;
------------------------------
@@
expression a;
identifier func;
@@
func (...) {
<...
-test_fail_msg
+TT_DIE
(
+(
a
+)
)
...>
}
@@
identifier func;
@@
func (...) {
<...
-test_fail()
+TT_DIE(("Assertion failed."))
...>
}
@@
expression a;
identifier func;
@@
func (...) {
<...
-test_assert
+tt_assert
(a)
...>
}
@@
expression a, b;
identifier func;
@@
func (...) {
<...
-test_eq
+tt_int_op
(a,
+_X_EQ_,
b)
...>
}
@@
expression a, b;
identifier func;
@@
func (...) {
<...
-test_neq
+tt_int_op
(a,
+_X_NEQ_,
b)
...>
}
@@
expression a, b;
identifier func;
@@
func (...) {
<...
-test_streq
+tt_str_op
(a,
+_X_EQ_,
b)
...>
}
@@
expression a, b;
identifier func;
@@
func (...) {
<...
-test_strneq
+tt_str_op
(a,
+_X_NEQ_,
b)
...>
}
@@
expression a, b;
identifier func;
@@
func (...) {
<...
-test_eq_ptr
+tt_ptr_op
(a,
+_X_EQ_,
b)
...>
}
@@
expression a, b;
identifier func;
@@
func() {
<...
-test_neq_ptr
+tt_ptr_op
(a,
+_X_NEQ_,
b)
...>
}
@@
expression a, b, len;
identifier func;
@@
func (...) {
<...
-test_memeq
+tt_mem_op
(a,
+_X_EQ_,
b, len)
...>
}
@@
expression a, b, len;
identifier func;
@@
func (...) {
<...
-test_memneq
+tt_mem_op
(a,
+_X_NEQ_,
b, len)
...>
}
------------------------------
@@
char a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a == b
+a, _X_EQ_, b
)
...>
}
@@
int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a == b
+a, _X_EQ_, b
)
...>
}
@@
long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a == b
+a, _X_EQ_, b
)
...>
}
@@
unsigned int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a == b
+a, _X_EQ_, b
)
...>
}
@@
unsigned long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a == b
+a, _X_EQ_, b
)
...>
}
@@
char a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a != b
+a, _X_NEQ_, b
)
...>
}
@@
int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a != b
+a, _X_NEQ_, b
)
...>
}
@@
long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a != b
+a, _X_NEQ_, b
)
...>
}
@@
unsigned int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a != b
+a, _X_NEQ_, b
)
...>
}
@@
unsigned long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a != b
+a, _X_NEQ_, b
)
...>
}
@@
char a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a >= b
+a, _X_GEQ_, b
)
...>
}
@@
int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a >= b
+a, _X_GEQ_, b
)
...>
}
@@
long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a >= b
+a, _X_GEQ_, b
)
...>
}
@@
unsigned int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a >= b
+a, _X_GEQ_, b
)
...>
}
@@
unsigned long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a >= b
+a, _X_GEQ_, b
)
...>
}
@@
char a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a <= b
+a, _X_LEQ_, b
)
...>
}
@@
int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a <= b
+a, _X_LEQ_, b
)
...>
}
@@
long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a <= b
+a, _X_LEQ_, b
)
...>
}
@@
unsigned int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a <= b
+a, _X_LEQ_, b
)
...>
}
@@
unsigned long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a <= b
+a, _X_LEQ_, b
)
...>
}
@@
char a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a > b
+a, _X_GT_, b
)
...>
}
@@
int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a > b
+a, _X_GT_, b
)
...>
}
@@
long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a > b
+a, _X_GT_, b
)
...>
}
@@
unsigned int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a > b
+a, _X_GT_, b
)
...>
}
@@
unsigned long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a > b
+a, _X_GT_, b
)
...>
}
@@
char a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a < b
+a, _X_LT_, b
)
...>
}
@@
int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a < b
+a, _X_LT_, b
)
...>
}
@@
long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_int_op
(
-a < b
+a, _X_LT_, b
)
...>
}
@@
unsigned int a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a < b
+a, _X_LT_, b
)
...>
}
@@
unsigned long a, b;
identifier func;
@@
func (...) {
<...
-tt_assert
+tt_uint_op
(
-a < b
+a, _X_LT_, b
)
...>
}
------------------------------
s/_X_NEQ_/!=/g;
s/_X_NE_/!=/g;
s/_X_EQ_/==/g;
s/_X_GT_/>/g;
s/_X_LT_/</g;
s/_X_GEQ_/>=/g;
s/_X_LEQ_/<=/g;
s/test_mem_op\(/tt_mem_op\(/g;
2014-09-16 03:18:21 +02:00
|
|
|
tt_mem_op(pc->body, ==, "\x00\x00\x00\x64\x04\x0a\x00\x00\x00", 9);
|
2013-07-19 18:05:38 +02:00
|
|
|
packed_cell_free(pc);
|
|
|
|
pc = NULL;
|
|
|
|
|
|
|
|
tt_int_op(circuitmux_num_cells(cmux), ==, 2);
|
|
|
|
|
|
|
|
done:
|
|
|
|
circuitmux_free(cmux);
|
|
|
|
channel_free(ch);
|
|
|
|
packed_cell_free(pc);
|
|
|
|
|
2014-05-13 03:23:34 +02:00
|
|
|
#ifdef ENABLE_MEMPOOLS
|
2013-07-19 18:05:38 +02:00
|
|
|
free_cell_pool();
|
2014-05-13 03:23:34 +02:00
|
|
|
#endif /* ENABLE_MEMPOOLS */
|
2013-07-19 18:05:38 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
struct testcase_t circuitmux_tests[] = {
|
|
|
|
{ "destroy_cell_queue", test_cmux_destroy_cell_queue, TT_FORK, NULL, NULL },
|
|
|
|
END_OF_TESTCASES
|
|
|
|
};
|
|
|
|
|