summaryrefslogtreecommitdiff
path: root/qpid
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2013-03-01 00:26:23 +0000
committerTed Ross <tross@apache.org>2013-03-01 00:26:23 +0000
commit2e5734c62bb84c2500ef89937267e1a3df65366e (patch)
treebc330fe183e99a1e268ad4acaa10165de7b1d56b /qpid
parent0d35f541a728091195e6bc2797d974159e9247bd (diff)
downloadqpid-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.txt3
-rw-r--r--qpid/extras/dispatch/tests/CMakeLists.txt10
-rw-r--r--qpid/extras/dispatch/tests/message_test.c56
-rw-r--r--qpid/extras/dispatch/tests/run_tests.c12
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();