summaryrefslogtreecommitdiff
path: root/server/tests/files-tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/tests/files-tests.c')
-rw-r--r--server/tests/files-tests.c323
1 files changed, 0 insertions, 323 deletions
diff --git a/server/tests/files-tests.c b/server/tests/files-tests.c
deleted file mode 100644
index 90b97177..00000000
--- a/server/tests/files-tests.c
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Authors:
- * Jakub Hrozek <jhrozek@redhat.com>
- *
- * Copyright (C) 2008 Red Hat
- * see file 'COPYING' for use and warranty information
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; version 3 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <stdlib.h>
-#include <check.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <errno.h>
-#include <talloc.h>
-#include <popt.h>
-
-#include "config.h"
-#include "tools/tools_util.h"
-#include "util/util.h"
-
-static char tpl_dir[] = "file-tests-dir-XXXXXX";
-static char *dir_path;
-static char *dst_path;
-static uid_t uid;
-static gid_t gid;
-static TALLOC_CTX *test_ctx = NULL;
-
-static void setup_files_test(void)
-{
- /* create a temporary directory that we fill with stuff later on */
- test_ctx = talloc_new(NULL);
- dir_path = mkdtemp(talloc_strdup(test_ctx, tpl_dir));
- dst_path = mkdtemp(talloc_strdup(test_ctx, tpl_dir));
-
- uid = getuid();
- gid = getgid();
-}
-
-static void teardown_files_test(void)
-{
- char *cmd = NULL;
-
- /* OK this is crude but since the functions to remove tree are under test.. */
- if (dir_path && test_ctx) {
- cmd = talloc_asprintf(test_ctx, "/bin/rm -rf %s\n", dir_path);
- system(cmd);
- }
- if (dst_path && test_ctx) {
- cmd = talloc_asprintf(test_ctx, "/bin/rm -rf %s\n", dst_path);
- system(cmd);
- }
-
- /* clean up */
- talloc_zfree(test_ctx);
-}
-
-static int create_simple_file(const char *name, const char *content)
-{
- int fd;
- ssize_t size;
- int ret;
-
- fd = open(name, O_WRONLY | O_CREAT | O_TRUNC, 0700);
- fail_if(fd == -1, "Cannot create simple file\n");
-
- size = write(fd, "abc", 3);
- fail_if(size == -1, "Cannot write to file\n");
-
- ret = fsync(fd);
- fail_if(ret == -1, "Cannot sync file\n");
-
- ret = close(fd);
- fail_if(ret == -1, "Cannot close file\n");
-
- return ret;
-}
-
-START_TEST(test_remove_tree)
-{
- int ret;
- char origpath[PATH_MAX+1];
-
- errno = 0;
- getcwd(origpath, PATH_MAX);
- fail_unless(errno == 0, "Cannot getcwd\n");
-
- DEBUG(5, ("About to delete %s\n", dir_path));
-
- /* create a file */
- ret = chdir(dir_path);
- fail_if(ret == -1, "Cannot chdir1\n");
-
- ret = create_simple_file("bar", "bar");
- fail_if(ret == -1, "Cannot create file1\n");
-
- /* create a subdir and file inside it */
- ret = mkdir("subdir", 0700);
- fail_if(ret == -1, "Cannot create subdir\n");
-
- ret = chdir("subdir");
- fail_if(ret == -1, "Cannot chdir\n");
-
- ret = create_simple_file("foo", "foo");
- fail_if(ret == -1, "Cannot create file\n");
-
- /* create another subdir, empty this time */
- ret = mkdir("subdir2", 0700);
- fail_if(ret == -1, "Cannot create subdir\n");
-
- ret = chdir(origpath);
- fail_if(ret == -1, "Cannot chdir2\n");
-
- /* go back */
- ret = chdir(origpath);
- fail_if(ret == -1, "Cannot chdir\n");
-
- /* and finally wipe it out.. */
- ret = remove_tree(dir_path);
- fail_unless(ret == EOK, "remove_tree failed\n");
-
- /* check if really gone */
- ret = access(dir_path, F_OK);
- fail_unless(ret == -1, "directory still there after remove_tree\n");
-}
-END_TEST
-
-START_TEST(test_simple_copy)
-{
- int ret;
- char origpath[PATH_MAX+1];
- char *tmp;
- int fd = -1;
-
- errno = 0;
- getcwd(origpath, PATH_MAX);
- fail_unless(errno == 0, "Cannot getcwd\n");
-
- /* create a file */
- ret = chdir(dir_path);
- fail_if(ret == -1, "Cannot chdir1\n");
-
- ret = create_simple_file("bar", "bar");
- fail_if(ret == -1, "Cannot create file1\n");
-
- /* create a subdir and file inside it */
- ret = mkdir("subdir", 0700);
- fail_if(ret == -1, "Cannot create subdir\n");
-
- ret = chdir("subdir");
- fail_if(ret == -1, "Cannot chdir\n");
-
- ret = create_simple_file("foo", "foo");
- fail_if(ret == -1, "Cannot create file\n");
-
- /* go back */
- ret = chdir(origpath);
- fail_if(ret == -1, "Cannot chdir\n");
-
- /* and finally copy.. */
- DEBUG(5, ("Will copy from '%s' to '%s'\n", dir_path, dst_path));
- ret = copy_tree(dir_path, dst_path, uid, gid);
- fail_unless(ret == EOK, "copy_tree failed\n");
-
- /* check if really copied */
- ret = access(dst_path, F_OK);
- fail_unless(ret == 0, "destination directory not there\n");
-
- tmp = talloc_asprintf(test_ctx, "%s/bar", dst_path);
- ret = check_and_open_readonly(tmp, &fd, uid, gid, 0700);
- fail_unless(ret == EOK, "Cannot open %s\n");
- close(fd);
- talloc_free(tmp);
-}
-END_TEST
-
-START_TEST(test_copy_symlink)
-{
- int ret;
- char origpath[PATH_MAX+1];
- char *tmp;
- struct stat statbuf;
-
- errno = 0;
- getcwd(origpath, PATH_MAX);
- fail_unless(errno == 0, "Cannot getcwd\n");
-
- /* create a subdir */
- ret = chdir(dir_path);
- fail_if(ret == -1, "Cannot chdir\n");
-
- ret = create_simple_file("footarget", "foo");
- fail_if(ret == -1, "Cannot create file\n");
-
- ret = symlink("footarget", "foolink");
- fail_if(ret == -1, "Cannot create symlink\n");
-
- /* go back */
- ret = chdir(origpath);
- fail_if(ret == -1, "Cannot chdir\n");
-
- /* and finally copy.. */
- DEBUG(5, ("Will copy from '%s' to '%s'\n", dir_path, dst_path));
- ret = copy_tree(dir_path, dst_path, uid, gid);
- fail_unless(ret == EOK, "copy_tree failed\n");
-
- /* check if really copied */
- ret = access(dst_path, F_OK);
- fail_unless(ret == 0, "destination directory not there\n");
-
- tmp = talloc_asprintf(test_ctx, "%s/foolink", dst_path);
- ret = lstat(tmp, &statbuf);
- fail_unless(ret == 0, "cannot stat the symlink %s\n", tmp);
- fail_unless(S_ISLNK(statbuf.st_mode), "%s not a symlink?\n", tmp);
- talloc_free(tmp);
-}
-END_TEST
-
-START_TEST(test_copy_node)
-{
- int ret;
- char origpath[PATH_MAX+1];
- char *tmp;
- struct stat statbuf;
-
- errno = 0;
- getcwd(origpath, PATH_MAX);
- fail_unless(errno == 0, "Cannot getcwd\n");
-
- /* create a node */
- ret = chdir(dir_path);
- fail_if(ret == -1, "Cannot chdir\n");
-
- ret = mknod("testnode", S_IFIFO | S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH, 0);
- fail_unless(ret == 0, "cannot stat /dev/null: %s", strerror(errno));
-
- /* go back */
- ret = chdir(origpath);
- fail_if(ret == -1, "Cannot chdir\n");
-
- /* and finally copy.. */
- DEBUG(5, ("Will copy from '%s' to '%s'\n", dir_path, dst_path));
- ret = copy_tree(dir_path, dst_path, uid, gid);
- fail_unless(ret == EOK, "copy_tree failed\n");
-
- /* check if really copied */
- ret = access(dst_path, F_OK);
- fail_unless(ret == 0, "destination directory not there\n");
-
- tmp = talloc_asprintf(test_ctx, "%s/testnode", dst_path);
- ret = lstat(tmp, &statbuf);
- fail_unless(ret == 0, "cannot stat the node %s\n", tmp);
- fail_unless(S_ISFIFO(statbuf.st_mode), "%s not a char device??\n", tmp);
- talloc_free(tmp);
-}
-END_TEST
-
-static Suite *files_suite(void)
-{
- Suite *s = suite_create("files_suite");
-
- TCase *tc_files = tcase_create("files");
- tcase_add_checked_fixture(tc_files,
- setup_files_test,
- teardown_files_test);
-
- tcase_add_test(tc_files, test_remove_tree);
- tcase_add_test(tc_files, test_simple_copy);
- tcase_add_test(tc_files, test_copy_symlink);
- tcase_add_test(tc_files, test_copy_node);
- suite_add_tcase(s, tc_files);
-
- return s;
-}
-
-int main(int argc, char *argv[])
-{
- int number_failed;
- int opt;
- poptContext pc;
- int debug = 0;
-
- struct poptOption long_options[] = {
- POPT_AUTOHELP
- { "debug-level", 'd', POPT_ARG_INT, &debug, 0, "Set debug level", NULL },
- POPT_TABLEEND
- };
-
- pc = poptGetContext(argv[0], argc, (const char **) argv, long_options, 0);
- while((opt = poptGetNextOpt(pc)) != -1) {
- fprintf(stderr, "\nInvalid option %s: %s\n\n",
- poptBadOption(pc, 0), poptStrerror(opt));
- poptPrintUsage(pc, stderr, 0);
- return 1;
- }
- poptFreeContext(pc);
- debug_level = debug;
-
- Suite *s = files_suite();
- SRunner *sr = srunner_create(s);
- /* If CK_VERBOSITY is set, use that, otherwise it defaults to CK_NORMAL */
- srunner_run_all(sr, CK_ENV);
- number_failed = srunner_ntests_failed(sr);
- srunner_free(sr);
- return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
-}
-