diff options
| author | Ted Ross <tross@apache.org> | 2013-03-01 00:26:23 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2013-03-01 00:26:23 +0000 |
| commit | 2e5734c62bb84c2500ef89937267e1a3df65366e (patch) | |
| tree | bc330fe183e99a1e268ad4acaa10165de7b1d56b /qpid | |
| parent | 0d35f541a728091195e6bc2797d974159e9247bd (diff) | |
| download | qpid-python-2e5734c62bb84c2500ef89937267e1a3df65366e.tar.gz | |
QPID-4614
Added CTest hooks to the dispatch build.
The unit tests are run with different buffer sizes (including one-octet buffers).
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1451444 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid')
| -rw-r--r-- | qpid/extras/dispatch/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | qpid/extras/dispatch/tests/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | qpid/extras/dispatch/tests/message_test.c | 56 | ||||
| -rw-r--r-- | qpid/extras/dispatch/tests/run_tests.c | 12 |
4 files changed, 67 insertions, 14 deletions
diff --git a/qpid/extras/dispatch/CMakeLists.txt b/qpid/extras/dispatch/CMakeLists.txt index bc1812fb6b..546b2c4986 100644 --- a/qpid/extras/dispatch/CMakeLists.txt +++ b/qpid/extras/dispatch/CMakeLists.txt @@ -23,6 +23,9 @@ include(CheckSymbolExists) project(qpid-dispatch C) +enable_testing() +include (CTest) + set (SO_VERSION_MAJOR 0) set (SO_VERSION_MINOR 1) set (SO_VERSION "${SO_VERSION_MAJOR}.${SO_VERSION_MINOR}") diff --git a/qpid/extras/dispatch/tests/CMakeLists.txt b/qpid/extras/dispatch/tests/CMakeLists.txt index 10bf1eb43a..b92f66939f 100644 --- a/qpid/extras/dispatch/tests/CMakeLists.txt +++ b/qpid/extras/dispatch/tests/CMakeLists.txt @@ -20,7 +20,7 @@ ## ## Build test applications ## -set(test_SOURCES +set(unit_test_SOURCES alloc_test.c message_test.c run_tests.c @@ -29,6 +29,10 @@ set(test_SOURCES tool_test.c ) -add_executable(run_tests ${test_SOURCES}) -target_link_libraries(run_tests qpid-dispatch) +add_executable(unit_tests ${unit_test_SOURCES}) +target_link_libraries(unit_tests qpid-dispatch) +add_test(unit_tests_buf_512 unit_tests 512) +add_test(unit_tests_buf_10K unit_tests 10000) +add_test(unit_tests_buf_10 unit_tests 10) +add_test(unit_tests_buf_1 unit_tests 1) diff --git a/qpid/extras/dispatch/tests/message_test.c b/qpid/extras/dispatch/tests/message_test.c index 84ec06c0c3..ef81dc6d25 100644 --- a/qpid/extras/dispatch/tests/message_test.c +++ b/qpid/extras/dispatch/tests/message_test.c @@ -24,6 +24,41 @@ #include <qpid/dispatch/iterator.h> #include <proton/message.h> +static char buffer[10000]; + +static size_t flatten_bufs(dx_message_content_t *content) +{ + char *cursor = buffer; + dx_buffer_t *buf = DEQ_HEAD(content->buffers); + + while (buf) { + memcpy(cursor, dx_buffer_base(buf), dx_buffer_size(buf)); + cursor += dx_buffer_size(buf); + buf = buf->next; + } + + return (size_t) (cursor - buffer); +} + + +static void set_content(dx_message_content_t *content, size_t len) +{ + char *cursor = buffer; + dx_buffer_t *buf; + + while (len > (size_t) (cursor - buffer)) { + buf = dx_allocate_buffer(); + size_t segment = dx_buffer_capacity(buf); + size_t remaining = len - (size_t) (cursor - buffer); + if (segment > remaining) + segment = remaining; + memcpy(dx_buffer_base(buf), cursor, segment); + cursor += segment; + dx_buffer_insert(buf, segment); + DEQ_INSERT_TAIL(content->buffers, buf); + } +} + static char* test_send_to_messenger(void *context) { @@ -35,7 +70,8 @@ static char* test_send_to_messenger(void *context) if (buf == 0) return "Expected a buffer in the test message"; pn_message_t *pn_msg = pn_message(); - int result = pn_message_decode(pn_msg, (const char*) dx_buffer_base(buf), dx_buffer_size(buf)); + size_t len = flatten_bufs(content); + int result = pn_message_decode(pn_msg, buffer, len); if (result != 0) return "Error in pn_message_decode"; if (strcmp(pn_message_get_address(pn_msg), "test_addr_0") != 0) @@ -53,16 +89,15 @@ static char* test_receive_from_messenger(void *context) pn_message_t *pn_msg = pn_message(); pn_message_set_address(pn_msg, "test_addr_1"); - dx_buffer_t *buf = dx_allocate_buffer(); - size_t size = dx_buffer_capacity(buf); - int result = pn_message_encode(pn_msg, (char*) dx_buffer_cursor(buf), &size); + size_t size = 10000; + int result = pn_message_encode(pn_msg, buffer, &size); if (result != 0) return "Error in pn_message_encode"; - dx_buffer_insert(buf, size); dx_message_t *msg = dx_allocate_message(); dx_message_content_t *content = MSG_CONTENT(msg); - DEQ_INSERT_TAIL(content->buffers, buf); + set_content(content, size); + int valid = dx_message_check(msg, DX_DEPTH_ALL); if (!valid) return "dx_message_check returns 'invalid'"; @@ -94,16 +129,15 @@ static char* test_insufficient_check_depth(void *context) pn_message_t *pn_msg = pn_message(); pn_message_set_address(pn_msg, "test_addr_2"); - dx_buffer_t *buf = dx_allocate_buffer(); - size_t size = dx_buffer_capacity(buf); - int result = pn_message_encode(pn_msg, (char*) dx_buffer_cursor(buf), &size); + size_t size = 10000; + int result = pn_message_encode(pn_msg, buffer, &size); if (result != 0) return "Error in pn_message_encode"; - dx_buffer_insert(buf, size); dx_message_t *msg = dx_allocate_message(); dx_message_content_t *content = MSG_CONTENT(msg); - DEQ_INSERT_TAIL(content->buffers, buf); + set_content(content, size); + int valid = dx_message_check(msg, DX_DEPTH_DELIVERY_ANNOTATIONS); if (!valid) return "dx_message_check returns 'invalid'"; diff --git a/qpid/extras/dispatch/tests/run_tests.c b/qpid/extras/dispatch/tests/run_tests.c index a677c04577..765dad5c66 100644 --- a/qpid/extras/dispatch/tests/run_tests.c +++ b/qpid/extras/dispatch/tests/run_tests.c @@ -17,6 +17,8 @@ * under the License. */ +#include <qpid/dispatch/buffer.h> + int tool_tests(); int timer_tests(); int alloc_tests(); @@ -25,6 +27,16 @@ int message_tests(); int main(int argc, char** argv) { + ssize_t buffer_size = 512; + + if (argc > 1) { + buffer_size = atoi(argv[1]); + if (buffer_size < 1) + return 1; + } + + dx_buffer_set_size(buffer_size); + int result = 0; result += tool_tests(); result += timer_tests(); |
