Signed-off-by: Mike Holmes <[email protected]>
Signed-off-by: Anders Roxell <[email protected]>
---
v2:
Add dependencies
Add cross compile
Add comments on test cases
.gitignore | 1 +
DEPENDENCIES | 19 +++-
configure.ac | 20 ++++
test/Makefile.am | 2 +-
test/api_test/Makefile.am | 1 +
test/unit/Makefile.am | 11 +++
test/unit/odp_buffer_test.c | 222 ++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 274 insertions(+), 2 deletions(-)
create mode 100644 test/unit/Makefile.am
create mode 100644 test/unit/odp_buffer_test.c
diff --git a/.gitignore b/.gitignore
index 6a97f17..1000401 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,4 +42,5 @@ odp_pktio
odp_timer_test
odp_generator
odp_l2fwd
+odp_buffer
doxygen-doc
diff --git a/DEPENDENCIES b/DEPENDENCIES
index 9597511..f54724d 100644
--- a/DEPENDENCIES
+++ b/DEPENDENCIES
@@ -75,4 +75,21 @@ Prerequisites for building the OpenDataPlane (ODP) API
# Or build 64 bit version of ODP
$ ./configure --host=aarch64-linux-gnu \
--with-openssl-path=/home/user/src/install-openssl-aarch64
- $ make
\ No newline at end of file
+ $ make
+
+4. packages needed to build API tests
+
+4.1 Native compile
+
+ # Debian/Ubuntu
+ $ apt-get install libcunit1-dev
+
+ On CentOS/RedHat/Fedora systems:
+ $ su -c 'yum update CUnit'
+
+4.2 Cross compile
+
+ $ git svn clone http://svn.code.sf.net/p/cunit/code/trunk cunit-code
+ $ cd cunit-code
+ $ ./bootstrap
+ $ ./configure --host=arm-linux-gnueabihf
--prefix=/home/user/src/install-cunit
diff --git a/configure.ac b/configure.ac
index 5574f82..d63f9ef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -73,6 +73,25 @@ AC_ARG_ENABLE([netmap],
AM_CONDITIONAL([ODP_NETMAP_ENABLED], [test x$netmap_support = xyes ])
##########################################################################
+# Enable/disable Unit tests
+##########################################################################
+AC_ARG_ENABLE([cunit],
+ [ --enable-cunit Enable/Disable cunit. See cunit-path],
+ [if test x$enableval = xyes; then
+ unit_support=yes
+ fi])
+
+AC_ARG_WITH([cunit-path],
+AC_HELP_STRING([--with-cunit-path=DIR Path to Cunit libs and headers],
+ [(automaticly implies --enable-cunit).]),
+[CUNIT_PATH=$withval unit_support=yes
+],[ AC_MSG_WARN([Cunit not found - continuing without Cunit support])
+])
+
+AC_SUBST(CUNIT_PATH)
+AM_CONDITIONAL([ODP_UNIT_ENABLED], [test x$unit_support = xyes ])
+
+##########################################################################
# Enable/disable ODP_DEBUG_PRINT
##########################################################################
ODP_DEBUG=1
@@ -152,6 +171,7 @@ AC_CONFIG_FILES([Makefile
example/timer/Makefile
test/Makefile
test/api_test/Makefile
+ test/unit/Makefile
pkgconfig/libodp.pc])
AC_SEARCH_LIBS([timer_create],[rt posix4])
diff --git a/test/Makefile.am b/test/Makefile.am
index 9bd7db1..dda7d5e 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1 +1 @@
-SUBDIRS = api_test
+SUBDIRS = api_test unit
diff --git a/test/api_test/Makefile.am b/test/api_test/Makefile.am
index 5104454..d76bc26 100644
--- a/test/api_test/Makefile.am
+++ b/test/api_test/Makefile.am
@@ -1,6 +1,7 @@
include $(top_srcdir)/test/Makefile.inc
bin_PROGRAMS = odp_atomic odp_shm odp_ring odp_timer_ping
+
odp_atomic_LDFLAGS = $(AM_LDFLAGS) -static
odp_shm_LDFLAGS = $(AM_LDFLAGS) -static
odp_ring_LDFLAGS = $(AM_LDFLAGS) -static
diff --git a/test/unit/Makefile.am b/test/unit/Makefile.am
new file mode 100644
index 0000000..9554ed9
--- /dev/null
+++ b/test/unit/Makefile.am
@@ -0,0 +1,11 @@
+include $(top_srcdir)/test/Makefile.inc
+
+AM_CFLAGS += -I$(CUNIT_PATH)/include
+AM_LDFLAGS += -L$(CUNIT_PATH)/lib
+
+if ODP_UNIT_ENABLED
+bin_PROGRAMS = odp_buffer
+odp_buffer_LDFLAGS = $(AM_LDFLAGS) -static -lcunit
+endif
+
+dist_odp_buffer_SOURCES = odp_buffer_test.c
diff --git a/test/unit/odp_buffer_test.c b/test/unit/odp_buffer_test.c
new file mode 100644
index 0000000..5bc990e
--- /dev/null
+++ b/test/unit/odp_buffer_test.c
@@ -0,0 +1,222 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "odp.h"
+#include "CUnit/Basic.h"
+
+#define DEFAULT_MSG_POOL_SIZE (4*1024*1024)
+#define DEFAULT_MSG_SIZE (8)
+
+static void test_odp_buffer_addr(void)
+{
+ void *startaddress;
+ odp_buffer_pool_t msg_pool;
+ odp_buffer_t mybuffer;
+ void *pool_base;
+ /* correct address returned */
+ pool_base = odp_shm_reserve("msg_pool1",
+ DEFAULT_MSG_POOL_SIZE,
+ ODP_CACHE_LINE_SIZE);
+ msg_pool = odp_buffer_pool_create("msg_pool1",
+ pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ DEFAULT_MSG_SIZE,
+ ODP_CACHE_LINE_SIZE,
+ ODP_BUFFER_TYPE_RAW);
+ mybuffer = odp_buffer_alloc(msg_pool);
+ startaddress = odp_buffer_addr(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_ASSERT_TRUE(startaddress != NULL);
+}
+
+static void test_odp_buffer_size(void)
+{
+ size_t size;
+ odp_buffer_pool_t msg_pool;
+ odp_buffer_t mybuffer;
+ void *pool_base;
+ /* correct size returned */
+ pool_base = odp_shm_reserve("msg_pool2",
+ DEFAULT_MSG_POOL_SIZE,
+ ODP_CACHE_LINE_SIZE);
+ msg_pool = odp_buffer_pool_create("msg_pool2", pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ DEFAULT_MSG_SIZE,
+ ODP_CACHE_LINE_SIZE,
+ ODP_BUFFER_TYPE_RAW);
+ mybuffer = odp_buffer_alloc(msg_pool);
+ size = odp_buffer_size(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_ASSERT_TRUE(size == DEFAULT_MSG_SIZE);
+ msg_pool = odp_buffer_pool_create("msg_pool2_1", pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ -1,
+ ODP_CACHE_LINE_SIZE,
+ ODP_BUFFER_TYPE_RAW);
+ CU_ASSERT_TRUE(msg_pool == ODP_BUFFER_POOL_INVALID);
+ mybuffer = odp_buffer_alloc(msg_pool);
+ size = odp_buffer_size(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_ASSERT_TRUE(size == ODP_BUFFER_INVALID);
+}
+
+static void test_odp_buffer_type(int type_in)
+{
+ int type;
+ odp_buffer_pool_t msg_pool;
+ odp_buffer_t mybuffer;
+ void *pool_base;
+ char pool_name[32];
+ /* valid types */
+ sprintf(pool_name, "mag_pool_%d", type_in);
+ pool_base = odp_shm_reserve(pool_name,
+ DEFAULT_MSG_POOL_SIZE,
+ ODP_CACHE_LINE_SIZE);
+ msg_pool = odp_buffer_pool_create(pool_name, pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ DEFAULT_MSG_SIZE,
+ ODP_CACHE_LINE_SIZE, type_in);
+ mybuffer = odp_buffer_alloc(msg_pool);
+ type = odp_buffer_type(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_ASSERT_TRUE(type == type_in);
+}
+
+static void test_odp_buffer_type_valid(void)
+{
+ test_odp_buffer_type(ODP_BUFFER_TYPE_ANY);
+ test_odp_buffer_type(ODP_BUFFER_TYPE_RAW);
+ test_odp_buffer_type(ODP_BUFFER_TYPE_PACKET);
+ test_odp_buffer_type(ODP_BUFFER_TYPE_TIMEOUT);
+}
+
+static void test_odp_buffer_type_invalid(void)
+{
+ int type;
+ int type_in = ODP_BUFFER_TYPE_INVALID;
+ odp_buffer_pool_t msg_pool;
+ odp_buffer_t mybuffer;
+ void *pool_base;
+ /* invalid type */
+ pool_base = odp_shm_reserve("msg_pool4",
+ DEFAULT_MSG_POOL_SIZE,
+ ODP_CACHE_LINE_SIZE);
+ msg_pool = odp_buffer_pool_create("msg_pool4", pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ DEFAULT_MSG_SIZE,
+ ODP_CACHE_LINE_SIZE, type_in);
+ /* msg_pool should fail */
+ CU_ASSERT_TRUE(msg_pool == ODP_BUFFER_POOL_INVALID);
+ /* mybuffer should fail */
+ mybuffer = odp_buffer_alloc(msg_pool);
+ CU_ASSERT_TRUE(mybuffer == ODP_BUFFER_INVALID);
+ /* type should fail */
+ type = odp_buffer_type(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_ASSERT_TRUE(type == type_in);
+}
+
+static void test_odp_is_scatter(void)
+{
+ int is_scatter;
+ odp_buffer_pool_t msg_pool;
+ odp_buffer_t mybuffer;
+ void *pool_base;
+ /* scatter is boolean */
+ pool_base = odp_shm_reserve("msg_pool5",
+ DEFAULT_MSG_POOL_SIZE,
+ ODP_CACHE_LINE_SIZE);
+ msg_pool = odp_buffer_pool_create("msg_pool5", pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ DEFAULT_MSG_SIZE,
+ ODP_CACHE_LINE_SIZE,
+ ODP_BUFFER_TYPE_RAW);
+ mybuffer = odp_buffer_alloc(msg_pool);
+ is_scatter = odp_buffer_size(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_ASSERT_TRUE((is_scatter < 0) || (is_scatter > 1));
+}
+
+static void test_odp_is_valid(void)
+{
+ int is_valid;
+ odp_buffer_pool_t msg_pool;
+ odp_buffer_t mybuffer;
+ void *pool_base;
+ /* valid is boolean */
+ pool_base = odp_shm_reserve("msg_pool6",
+ DEFAULT_MSG_POOL_SIZE,
+ ODP_CACHE_LINE_SIZE);
+ msg_pool = odp_buffer_pool_create("msg_pool6", pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ DEFAULT_MSG_SIZE,
+ ODP_CACHE_LINE_SIZE,
+ ODP_BUFFER_TYPE_RAW);
+ mybuffer = odp_buffer_alloc(msg_pool);
+ is_valid = odp_buffer_is_valid(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_ASSERT_FALSE((is_valid < 0) || (is_valid > 1));
+}
+
+static void test_odp_buffer_print(void)
+{
+ odp_buffer_pool_t msg_pool;
+ odp_buffer_t mybuffer;
+ void *pool_base;
+ pool_base = odp_shm_reserve("msg_pool8",
+ DEFAULT_MSG_POOL_SIZE,
+ ODP_CACHE_LINE_SIZE);
+ msg_pool = odp_buffer_pool_create("msg_pool8", pool_base,
+ DEFAULT_MSG_POOL_SIZE,
+ DEFAULT_MSG_SIZE,
+ ODP_CACHE_LINE_SIZE,
+ ODP_BUFFER_TYPE_RAW);
+ mybuffer = odp_buffer_alloc(msg_pool);
+ odp_buffer_print(mybuffer);
+ odp_buffer_free(mybuffer);
+ CU_PASS("test_odp_buffer_print");
+}
+
+static int init_suite1(void)
+{
+ odp_init_global();
+ return 0;
+}
+
+static int clean_suite1(void)
+{
+ return 0;
+}
+
+int main(void)
+{
+ CU_pSuite pSuite = NULL;
+ /* initialize the CUnit test registry */
+ if (CUE_SUCCESS != CU_initialize_registry())
+ return CU_get_error();
+ /* add a suite to the registry */
+ pSuite = CU_add_suite("odp_buffer_pool", init_suite1, clean_suite1);
+ if (NULL == pSuite) {
+ CU_cleanup_registry();
+ return CU_get_error();
+ }
+ /* add the tests to the suite */
+ if ((NULL == CU_ADD_TEST(pSuite, test_odp_buffer_size)) ||
+ (NULL == CU_ADD_TEST(pSuite, test_odp_buffer_addr)) ||
+ (NULL == CU_ADD_TEST(pSuite, test_odp_buffer_type_valid)) ||
+ (NULL == CU_ADD_TEST(pSuite, test_odp_buffer_type_invalid)) ||
+ (NULL == CU_ADD_TEST(pSuite, test_odp_is_valid)) ||
+ (NULL == CU_ADD_TEST(pSuite, test_odp_is_scatter)) ||
+ (NULL == CU_ADD_TEST(pSuite, test_odp_buffer_print))) {
+ CU_cleanup_registry();
+ return CU_get_error();
+ }
+ /* Run all tests using the CUnit Basic interface */
+ CU_basic_set_mode(CU_BRM_VERBOSE);
+ CU_basic_run_tests();
+ CU_cleanup_registry();
+ return CU_get_error();
+}
--
1.9.1
_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp