From 9a28ce8c8d15ecc619b5072e9ae2c782e142efbc Mon Sep 17 00:00:00 2001 From: Slava Zanko Date: Tue, 26 Apr 2011 14:24:17 +0300 Subject: [PATCH] Add more tests for VFS Signed-off-by: Slava Zanko --- lib/tests/vfs/Makefile.am | 10 +- lib/tests/vfs/vfs_path_from_string.c | 115 +++++++++++++++++++++++ lib/tests/vfs/vfs_s_get_path_mangle.c | 171 ++++++++++++++++++++++++++++++++++ 3 files changed, 295 insertions(+), 1 deletion(-) create mode 100644 lib/tests/vfs/vfs_path_from_string.c create mode 100644 lib/tests/vfs/vfs_s_get_path_mangle.c diff --git a/lib/tests/vfs/Makefile.am b/lib/tests/vfs/Makefile.am index 922a0eeae..55a8af2bb 100644 --- a/lib/tests/vfs/Makefile.am +++ b/lib/tests/vfs/Makefile.am @@ -5,7 +5,9 @@ LIBS=@CHECK_LIBS@ \ TESTS = \ vfs_prefix_to_class \ get_vfs_class \ - vfs_split + vfs_split \ + vfs_path_from_string \ + vfs_s_get_path_mangle check_PROGRAMS = $(TESTS) @@ -17,3 +19,9 @@ vfs_split_SOURCES = \ vfs_prefix_to_class_SOURCES = \ vfs_prefix_to_class.c + +vfs_path_from_string_SOURCES = \ + vfs_path_from_string.c + +vfs_s_get_path_mangle_SOURCES = \ + vfs_s_get_path_mangle.c \ No newline at end of file diff --git a/lib/tests/vfs/vfs_path_from_string.c b/lib/tests/vfs/vfs_path_from_string.c new file mode 100644 index 000000000..6af6f6118 --- /dev/null +++ b/lib/tests/vfs/vfs_path_from_string.c @@ -0,0 +1,115 @@ +/* lib/vfs - get vfs_path_t from string + + Copyright (C) 2011 Free Software Foundation, Inc. + + Written by: + Slava Zanko , 2011 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#define TEST_SUITE_NAME "/lib/vfs" + +#include + + +#include "lib/global.h" +#include "lib/strutil.h" +#include "lib/vfs/xdirentry.h" +#include "lib/vfs/path.c" /* for testing static methods */ + +#include "src/vfs/local/local.c" + +struct vfs_s_subclass test_subclass1, test_subclass2, test_subclass3; +struct vfs_class vfs_test_ops1, vfs_test_ops2, vfs_test_ops3; + +static void +setup (void) +{ + + str_init_strings (NULL); + + vfs_init (); + init_localfs (); + vfs_setup_work_dir (); + + + test_subclass1.flags = VFS_S_REMOTE; + vfs_s_init_class (&vfs_test_ops1, &test_subclass1); + + vfs_test_ops1.name = "testfs1"; + vfs_test_ops1.flags = VFSF_NOLINKS; + vfs_test_ops1.prefix = "test1:"; + vfs_register_class (&vfs_test_ops1); + + vfs_s_init_class (&vfs_test_ops2, &test_subclass2); + vfs_test_ops2.name = "testfs2"; + vfs_test_ops2.prefix = "test2:"; + vfs_register_class (&vfs_test_ops2); + + vfs_s_init_class (&vfs_test_ops3, &test_subclass3); + vfs_test_ops3.name = "testfs3"; + vfs_test_ops3.prefix = "test3:"; + vfs_register_class (&vfs_test_ops3); + +} + +static void +teardown (void) +{ + vfs_shut (); +} + +/* --------------------------------------------------------------------------------------------- */ + +START_TEST (test_vfs_path_from_string) +{ + vfs_path_t *vpath; + size_t vpath_len; + vpath = vfs_path_from_str ("/#test1://bla-bla/some/path/#test2://bla-bla/some/path#test3:/111/22/33"); + + vpath_len = vfs_path_length(vpath); +// fail_unless(vpath_len == 3, "vpath length should be 3 (actial: %d)",vpath_len); + vfs_path_free(vpath); +} +END_TEST + +/* --------------------------------------------------------------------------------------------- */ + +int +main (void) +{ + int number_failed; + + Suite *s = suite_create (TEST_SUITE_NAME); + TCase *tc_core = tcase_create ("Core"); + SRunner *sr; + + tcase_add_checked_fixture (tc_core, setup, teardown); + + /* Add new tests here: *************** */ + tcase_add_test (tc_core, test_vfs_path_from_string); + /* *********************************** */ + + suite_add_tcase (s, tc_core); + sr = srunner_create (s); + srunner_set_log (sr, "get_vfs_class.log"); + srunner_run_all (sr, CK_NORMAL); + number_failed = srunner_ntests_failed (sr); + srunner_free (sr); + return (number_failed == 0) ? 0 : 1; +} + +/* --------------------------------------------------------------------------------------------- */ diff --git a/lib/tests/vfs/vfs_s_get_path_mangle.c b/lib/tests/vfs/vfs_s_get_path_mangle.c new file mode 100644 index 000000000..319a462fb --- /dev/null +++ b/lib/tests/vfs/vfs_s_get_path_mangle.c @@ -0,0 +1,171 @@ +/* lib/vfs - test vfs_s_get_path_mangle() function + + Copyright (C) 2011 Free Software Foundation, Inc. + + Written by: + Slava Zanko , 2011 + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License + as published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +#define TEST_SUITE_NAME "/lib/vfs" + +#include + + +#include "lib/global.h" +#include "lib/strutil.h" +#include "lib/vfs/direntry.c" /* for testing static methods */ + +#include "src/vfs/local/local.c" + +#define ARCH_NAME "/path/to/some/file.ext" +#define ETALON_PATH "path/to/test1_file.ext" +#define ETALON_VFS_NAME "#test2:user:pass@host.net" + +struct vfs_s_subclass test_subclass1, test_subclass2, test_subclass3; +struct vfs_class vfs_test_ops1, vfs_test_ops2, vfs_test_ops3; + +static int +test1_mock_open_archive(struct vfs_class *me, struct vfs_s_super *super, + const char *archive_name, char *op) +{ + struct vfs_s_inode *root; + + (void) op; + + fail_unless(strcmp(ETALON_VFS_NAME ARCH_NAME, archive_name) == 0, + "etalon(%s) doesn't equal to actual(%s)", ETALON_VFS_NAME ARCH_NAME, archive_name); + + super->name = g_strdup (archive_name); + super->data = g_new (char *, 1); + root = vfs_s_new_inode (me, super, NULL); + super->root = root; + + return 0; +} + +static int +test1_mock_archive_same (struct vfs_class *me, struct vfs_s_super *super, + const char *archive_name, char *op, void *cookie) +{ + (void) me; + (void) super; + (void) op; + (void) cookie; + + if (strcmp(ARCH_NAME, archive_name) != 0) + return 0; + return 1; +} + +static void +setup (void) +{ + + str_init_strings (NULL); + + vfs_init (); + init_localfs (); + vfs_setup_work_dir (); + + + test_subclass1.flags = VFS_S_REMOTE; + vfs_s_init_class (&vfs_test_ops1, &test_subclass1); + + vfs_test_ops1.name = "testfs1"; + vfs_test_ops1.flags = VFSF_NOLINKS; + vfs_test_ops1.prefix = "test1:"; + vfs_register_class (&vfs_test_ops1); + test_subclass1.open_archive = test1_mock_open_archive; + test_subclass1.archive_same = test1_mock_archive_same; + test_subclass1.archive_check = NULL; + + vfs_s_init_class (&vfs_test_ops2, &test_subclass2); + vfs_test_ops2.name = "testfs2"; + vfs_test_ops2.prefix = "test2:"; + vfs_register_class (&vfs_test_ops2); + + vfs_s_init_class (&vfs_test_ops3, &test_subclass3); + vfs_test_ops3.name = "testfs3"; + vfs_test_ops3.prefix = "test3:"; + vfs_register_class (&vfs_test_ops3); +} + +static void +teardown (void) +{ + vfs_shut (); +} + + +void +vfs_die (const char *m) +{ + printf("VFS_DIE: '%s'\n", m); +} + +/* --------------------------------------------------------------------------------------------- */ + +START_TEST (test_vfs_s_get_path_mangle) +{ + struct vfs_s_super *archive; + + const char *result; + char *path = g_strdup(ETALON_VFS_NAME ARCH_NAME"#test1:/"ETALON_PATH); + + struct vfs_class *me; + me = vfs_get_class(path); + + result = vfs_s_get_path_mangle (me, path, &archive, 0); + + fail_unless(strcmp(ETALON_PATH, result) == 0, + "expected(%s) doesn't equal to actual(%s)", ETALON_PATH, result); + + fail_unless(strcmp(ETALON_VFS_NAME ARCH_NAME,archive->name) == 0, + "expected(%s) doesn't equal to actual(%s)", ETALON_VFS_NAME ARCH_NAME, archive->name); + + g_free(path); + +} +END_TEST + +/* --------------------------------------------------------------------------------------------- */ + +int +main (void) +{ + int number_failed; + + Suite *s = suite_create (TEST_SUITE_NAME); + TCase *tc_core = tcase_create ("Core"); + SRunner *sr; + + tcase_add_checked_fixture (tc_core, setup, teardown); + + /* Add new tests here: *************** */ + tcase_add_test (tc_core, test_vfs_s_get_path_mangle); + /* *********************************** */ + + suite_add_tcase (s, tc_core); + sr = srunner_create (s); + srunner_set_log (sr, "get_vfs_class.log"); + srunner_run_all (sr, CK_NORMAL); + number_failed = srunner_ntests_failed (sr); + srunner_free (sr); + return (number_failed == 0) ? 0 : 1; +} + +/* --------------------------------------------------------------------------------------------- */ -- 2.11.4.GIT