From 2e7c348acabca6e0c60d37c41a841d18fe5c6abe Mon Sep 17 00:00:00 2001 From: vivek Date: Sat, 18 Apr 2015 17:40:59 +0200 Subject: [PATCH] eio: add test cases for eio xattr module. Summary: Added test cases for eio_file_xattr, eio_file_xattr_set and eio_file_xattr_get functions Signed-off-by: vivek Reviewers: cedric Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D2374 Signed-off-by: Cedric BAIL --- src/Makefile_Eio.am | 1 + src/tests/eio/eio_suite.c | 3 + src/tests/eio/eio_suite.h | 1 + src/tests/eio/eio_test_xattr.c | 164 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 src/tests/eio/eio_test_xattr.c diff --git a/src/Makefile_Eio.am b/src/Makefile_Eio.am index afa1ce3..a41af55 100644 --- a/src/Makefile_Eio.am +++ b/src/Makefile_Eio.am @@ -66,6 +66,7 @@ tests/eio/eio_model_test_file.c \ tests/eio/eio_model_test_monitor_add.c \ tests/eio/eio_test_monitor.c \ tests/eio/eio_test_file.c \ +tests/eio/eio_test_xattr.c \ tests/eio/eio_suite.h tests_eio_eio_suite_CPPFLAGS = -I$(top_builddir)/src/lib/efl \ diff --git a/src/tests/eio/eio_suite.c b/src/tests/eio/eio_suite.c index 7b3de1b..4dfdbfb 100644 --- a/src/tests/eio/eio_suite.c +++ b/src/tests/eio/eio_suite.c @@ -22,6 +22,9 @@ static const Eio_Test_Case etc[] = { {"Eio Model", eio_model_test_file}, {"Eio Model Monitor", eio_model_test_monitor_add}, {"Eio File", eio_test_file}, +#ifdef XATTR_TEST_DIR + {"Eio_Xattr", eio_test_xattr}, +#endif {NULL, NULL} }; diff --git a/src/tests/eio/eio_suite.h b/src/tests/eio/eio_suite.h index d365f70..170a060 100644 --- a/src/tests/eio/eio_suite.h +++ b/src/tests/eio/eio_suite.h @@ -7,5 +7,6 @@ void eio_test_monitor(TCase *tc); void eio_model_test_file(TCase *tc); void eio_model_test_monitor_add(TCase *tc); void eio_test_file(TCase *tc); +void eio_test_xattr(TCase *tc); #endif /* _EIO_SUITE_H */ diff --git a/src/tests/eio/eio_test_xattr.c b/src/tests/eio/eio_test_xattr.c new file mode 100644 index 0000000..6d12c3b --- /dev/null +++ b/src/tests/eio/eio_test_xattr.c @@ -0,0 +1,164 @@ +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include + +#include +#include +#include + +#include "eio_suite.h" + +const char *attribute[] = + { + "user.comment1", + "user.comment2", + "user.comment3" + }; +const char *attr_data[] = + { + "This is a test file", + "This line is a comment", + "This file has extra attributes" + }; + +Eina_Tmpstr* +get_file_path(const char* tmpdirname, const char* filename) +{ + char file_path[PATH_MAX] = ""; + eina_str_join(file_path, sizeof(file_path), '/', tmpdirname, filename); + return eina_tmpstr_add(file_path); +} + +static Eina_Bool +_filter_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, const char *attr EINA_UNUSED) +{ + return EINA_TRUE; +} + +static void +_main_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, const char *attr) +{ + int *num_of_attr = (int *)data; + unsigned int i; + + for (i = 0; i < sizeof (attribute) / sizeof (attribute[0]); ++i) + if (strcmp(attr, attribute[i]) == 0) + break; + + fail_if(i == sizeof (attribute) / sizeof (attribute[0])); + (*num_of_attr)++; +} + +static void +_done_cb(void *data, Eio_File *handler EINA_UNUSED) + +{ + int *num_of_attr = (int *)data; + + (*num_of_attr)++; + + if (((*num_of_attr) + 1) == (sizeof (attribute) / sizeof (attribute[0]))) + ecore_main_loop_quit(); +} + +static void +_done_once_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED) +{ + ecore_main_loop_quit(); +} + +static void +_done_get_cb(void *data, Eio_File *handler EINA_UNUSED, const char *name, unsigned int len EINA_UNUSED) + +{ + int i = (int)(uintptr_t)data; + + fail_if(strcmp(name, attr_data[i]) != 0); + + if ((i + 1) == (sizeof (attribute) / sizeof (attribute[0]))) + ecore_main_loop_quit(); +} + +static void +_error_cb(void *data EINA_UNUSED, Eio_File *handler EINA_UNUSED, int error) + +{ + fprintf(stderr, "Something wrong has happend:%s\n", strerror(error)); + abort(); + + ecore_main_loop_quit(); +} + +#ifdef XATTR_TEST_DIR +START_TEST(eio_test_xattr_set) +{ + char *filename = "eio-tmpfile"; + Eina_Tmpstr *test_file_path; + Eio_File *fp; + int num_of_attr = 0, fd; + unsigned int i; + + ecore_init(); + eina_init(); + eio_init(); + + test_file_path = get_file_path(XATTR_TEST_DIR, filename); + fd = open(test_file_path, + O_WRONLY | O_CREAT | O_TRUNC, + S_IRWXU | S_IRWXG | S_IRWXO); + fail_if(fd == 0); + + for (i = 0; i < sizeof(attribute) / sizeof(attribute[0]); ++i) + { + fp = eio_file_xattr_set(test_file_path, attribute[i], + attr_data[i], strlen(attr_data[i]), + EINA_XATTR_INSERT, + _done_cb, _error_cb, &num_of_attr); + + fail_if(num_of_attr != 0); // test asynchronous + fail_if(!fp); + } + + ecore_main_loop_begin(); + + for (i = 0; i < sizeof(attribute) / sizeof(attribute[0]); ++i) + { + fp = eio_file_xattr_get(test_file_path, attribute[i], + _done_get_cb, _error_cb, (void*)(uintptr_t) i); + fail_if(!fp); + } + + ecore_main_loop_begin(); + + num_of_attr = 0; + fp = eio_file_xattr(test_file_path, + _filter_cb, _main_cb, _done_once_cb, _error_cb, + &num_of_attr); + fail_if(num_of_attr != 0); + fail_if(!fp); + + ecore_main_loop_begin(); + + fail_if(num_of_attr != sizeof (attribute) / sizeof (attribute[0])); + + close(fd); + unlink(test_file_path); + eio_shutdown(); + ecore_shutdown(); +} +END_TEST +#endif + +void eio_test_xattr(TCase *tc) +{ +#ifdef XATTR_TEST_DIR + tcase_add_test(tc, eio_test_xattr_set); +#else + (void)tc +#endif +} -- 2.7.4