}
END_TEST
-static struct rtr_request *
-pop_request(struct pdu_stream *stream)
-{
- struct rtr_request *request;
-
- request = TAILQ_FIRST(&stream->requests);
- ck_assert_ptr_ne(NULL, request);
- TAILQ_REMOVE(&stream->requests, request, lh);
- stream->reqcount--;
-
- return request;
-}
-
START_TEST(test_serial_query_from_stream)
{
unsigned char input[] = {
14, 15, 16, 17,
};
struct pdu_stream *stream;
+ struct rtr_request_list reqs;
struct rtr_request *request;
- bool wakeup;
+
+ TAILQ_INIT(&reqs.nodes);
+ reqs.count = 0;
stream = create_stream_fd(input, sizeof(input), RTR_V1);
- wakeup = false;
- ck_assert_uint_eq(false, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(true, wakeup);
+ ck_assert_uint_eq(false, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(1u, reqs.count);
- request = pop_request(stream);
+ request = rtreqlist_pop(&reqs);
ck_assert_int_eq(stream->fd, request->fd);
ck_assert_str_eq(stream->addr, request->client_addr);
ck_assert_uint_eq(RTR_V1, request->pdu.rtr_version);
ck_assert_uint_eq(0x0708, request->pdu.obj.sq.session_id);
ck_assert_uint_eq(12, request->pdu.raw.bytes_len);
ck_assert(memcmp(input, request->pdu.raw.bytes, 12) == 0);
- ck_assert_ptr_eq(NULL, TAILQ_NEXT(request, lh));
-
rtreq_destroy(request);
+
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
+
pdustream_destroy(stream);
}
END_TEST
/* Garbage */ 18, 19,
};
struct pdu_stream *stream;
+ struct rtr_request_list reqs;
struct rtr_request *request;
- bool wakeup;
+
+ TAILQ_INIT(&reqs.nodes);
+ reqs.count = 0;
stream = create_stream_fd(input, sizeof(input), RTR_V0);
- wakeup = false;
- ck_assert_uint_eq(false, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(true, wakeup);
+ ck_assert_uint_eq(false, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(1u, reqs.count);
- request = pop_request(stream);
+ request = rtreqlist_pop(&reqs);
ck_assert_int_eq(stream->fd, request->fd);
ck_assert_str_eq(stream->addr, request->client_addr);
ck_assert_uint_eq(RTR_V0, request->pdu.rtr_version);
ck_assert_uint_eq(PDU_TYPE_RESET_QUERY, request->pdu.type);
ck_assert_uint_eq(8, request->pdu.raw.bytes_len);
ck_assert(memcmp(input, request->pdu.raw.bytes, 8) == 0);
- ck_assert_ptr_eq(NULL, TAILQ_NEXT(request, lh));
rtreq_destroy(request);
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
+
pdustream_destroy(stream);
}
END_TEST
1, 2, 3, 4,
};
struct pdu_stream *stream;
- bool wakeup;
+ struct rtr_request_list reqs;
+
+ TAILQ_INIT(&reqs.nodes);
+ reqs.count = 0;
stream = create_stream_fd(input, sizeof(input), RTR_V1);
- wakeup = false;
- ck_assert_uint_eq(false, pdustream_parse(stream, &wakeup));
+ ck_assert_uint_eq(false, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(0, reqs.count);
- ck_assert_int_eq(false, wakeup);
- ck_assert_ptr_eq(NULL, TAILQ_FIRST(&stream->requests));
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
pdustream_destroy(stream);
}
/* reset query */ 1, 2, 6, 7, 0, 0, 0, 8,
};
struct pdu_stream *stream;
+ struct rtr_request_list reqs;
struct rtr_request *request;
- bool wakeup;
int pipes[2];
+ TAILQ_INIT(&reqs.nodes);
+ reqs.count = 0;
+
setup_pipes(pipes);
stream = pdustream_create(pipes[0], "192.0.2.1");
/* Input 1 */
ck_assert_int_eq(32, write(pipes[1], input1, sizeof(input1)));
- wakeup = false;
- ck_assert_uint_eq(true, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(true, wakeup);
+ ck_assert_uint_eq(true, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(3u, reqs.count);
- request = pop_request(stream);
+ request = rtreqlist_pop(&reqs);
ck_assert_int_eq(stream->fd, request->fd);
ck_assert_str_eq(stream->addr, request->client_addr);
ASSERT_RQ(request, RTR_V1);
ck_assert(memcmp(input1, request->pdu.raw.bytes, 8) == 0);
rtreq_destroy(request);
- request = pop_request(stream);
+ request = rtreqlist_pop(&reqs);
ck_assert_int_eq(stream->fd, request->fd);
ck_assert_str_eq(stream->addr, request->client_addr);
ASSERT_SQ(request, RTR_V1, 0x0607, 0x01020304);
ck_assert(memcmp(input1 + 8, request->pdu.raw.bytes, 12) == 0);
rtreq_destroy(request);
- request = pop_request(stream);
+ request = rtreqlist_pop(&reqs);
ck_assert_int_eq(stream->fd, request->fd);
ck_assert_str_eq(stream->addr, request->client_addr);
ASSERT_RQ(request, RTR_V1);
ck_assert_uint_eq(8, request->pdu.raw.bytes_len);
ck_assert(memcmp(input1 + 20, request->pdu.raw.bytes, 8) == 0);
- ck_assert_ptr_eq(NULL, TAILQ_NEXT(request, lh));
rtreq_destroy(request);
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
+
/* Input 2 */
ck_assert_int_eq(12, write(pipes[1], input2, sizeof(input2)));
- wakeup = false;
- ck_assert_uint_eq(true, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(true, wakeup);
+ ck_assert_uint_eq(true, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(2u, reqs.count);
- request = pop_request(stream);
+ request = rtreqlist_pop(&reqs);
ck_assert_int_eq(stream->fd, request->fd);
ck_assert_str_eq(stream->addr, request->client_addr);
ASSERT_RQ(request, RTR_V1);
ck_assert(memcmp(input1 + 20, request->pdu.raw.bytes, 8) == 0);
rtreq_destroy(request);
- request = pop_request(stream);
+ request = rtreqlist_pop(&reqs);
ck_assert_int_eq(stream->fd, request->fd);
ck_assert_str_eq(stream->addr, request->client_addr);
ASSERT_RQ(request, RTR_V1);
ck_assert_uint_eq(8, request->pdu.raw.bytes_len);
ck_assert(memcmp(input2 + 4, request->pdu.raw.bytes, 8) == 0);
- ck_assert_ptr_eq(NULL, TAILQ_NEXT(request, lh));
rtreq_destroy(request);
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
+
/* Input 3 */
close(pipes[1]);
- wakeup = false;
- ck_assert_uint_eq(false, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(false, wakeup);
- ck_assert_ptr_eq(NULL, TAILQ_FIRST(&stream->requests));
+ ck_assert_uint_eq(false, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(0, reqs.count);
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
/* Clean up */
static unsigned char reset_query[] = { 1, 2, 0, 0, 0, 0, 0, 8, };
static void
-ck_one_reset_query(struct pdu_stream *stream)
+ck_one_reset_query(struct rtr_request_list *list)
{
struct rtr_request *request;
- request = pop_request(stream);
- ck_assert_int_eq(stream->fd, request->fd);
- ck_assert_str_eq(stream->addr, request->client_addr);
+ request = rtreqlist_pop(list);
ASSERT_RQ(request, RTR_V1);
ck_assert_uint_eq(8, request->pdu.raw.bytes_len);
ck_assert(memcmp(reset_query, request->pdu.raw.bytes, 8) == 0);
START_TEST(test_too_many_pdus)
{
struct pdu_stream *stream;
+ struct rtr_request_list reqs;
struct rtr_request *request;
- bool wakeup;
int pipes[2];
+ TAILQ_INIT(&reqs.nodes);
+ reqs.count = 0;
+
setup_pipes(pipes);
stream = pdustream_create(pipes[0], "192.0.2.1");
ck_assert_int_eq(8, write(pipes[1], reset_query, sizeof(reset_query)));
ck_assert_int_eq(8, write(pipes[1], reset_query, sizeof(reset_query)));
ck_assert_int_eq(8, write(pipes[1], reset_query, sizeof(reset_query)));
- wakeup = false;
- ck_assert_uint_eq(true, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(true, wakeup);
+ ck_assert_uint_eq(true, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(4u, reqs.count);
- ck_one_reset_query(stream);
+ ck_one_reset_query(&reqs);
+ ck_assert_uint_eq(3u, reqs.count);
ck_assert_int_eq(8, write(pipes[1], reset_query, sizeof(reset_query)));
- wakeup = false;
- ck_assert_uint_eq(true, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(true, wakeup);
+ ck_assert_uint_eq(true, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(4u, reqs.count);
ck_assert_int_eq(8, write(pipes[1], reset_query, sizeof(reset_query)));
- wakeup = false;
- ck_assert_uint_eq(false, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(false, wakeup);
+ ck_assert_uint_eq(false, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(4u, reqs.count);
- ck_one_reset_query(stream);
- ck_one_reset_query(stream);
- ck_one_reset_query(stream);
- ck_one_reset_query(stream);
- ck_assert_ptr_eq(NULL, TAILQ_FIRST(&stream->requests));
+ ck_one_reset_query(&reqs);
+ ck_one_reset_query(&reqs);
+ ck_one_reset_query(&reqs);
+ ck_one_reset_query(&reqs);
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
close(pipes[1]);
pdustream_destroy(stream);
{
unsigned char input[] = { 0, 1 };
struct pdu_stream *stream;
- bool wakeup;
+ struct rtr_request_list reqs;
+
+ TAILQ_INIT(&reqs.nodes);
+ reqs.count = 0;
stream = create_stream_fd(input, sizeof(input), RTR_V1);
- wakeup = false;
- /* XXX WTF? */
- ck_assert_uint_eq(false, pdustream_parse(stream, &wakeup));
- ck_assert_int_eq(false, wakeup);
- ck_assert_ptr_eq(NULL, TAILQ_FIRST(&stream->requests));
+ ck_assert_uint_eq(false, pdustream_parse(stream, &reqs));
+ ck_assert_uint_eq(0, reqs.count);
+ ck_assert_ptr_eq(NULL, rtreqlist_pop(&reqs));
pdustream_destroy(stream);
}