From a411a9964bf570ea8dc67b1796c2f6df17d05b56 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Wed, 27 Jan 2010 08:15:08 +0200 Subject: [PATCH] * add unit tests for mu_maildir_mkdir --- src/mu-maildir.h | 4 +- src/tests/Makefile.am | 12 +- src/tests/test-mu-maildir.c | 149 ++++++++++++++++++++++ src/tests/{test-util.c => test-mu-util.c} | 0 4 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 src/tests/test-mu-maildir.c rename src/tests/{test-util.c => test-mu-util.c} (100%) diff --git a/src/mu-maildir.h b/src/mu-maildir.h index fc2e595fd..c2b7d28bc 100644 --- a/src/mu-maildir.h +++ b/src/mu-maildir.h @@ -28,7 +28,9 @@ /** * create a new maildir. Note, if the function fails 'halfway', it - * will *not* try to remove the parts the were created. + * will *not* try to remove the parts the were created. it *will* + * create any parent dirs that are not yet existant. + * * * @param path the path (missing components will be created, as in 'mkdir -p') * @param mode the file mode (e.g., 0755) diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am index fa595cb94..54f6470b7 100644 --- a/src/tests/Makefile.am +++ b/src/tests/Makefile.am @@ -24,9 +24,15 @@ INCLUDES=$(XAPIAN_CXXFLAGS) \ noinst_PROGRAMS= $(TEST_PROGS) -TEST_PROGS += test-util -test_util_SOURCES= test-util.c -test_util_LDADD= ${top_srcdir}/src/libmu.la +TEST_PROGS += test-mu-util +test_mu_util_SOURCES= test-mu-util.c +test_mu_util_LDADD= ${top_srcdir}/src/libmu.la + + +TEST_PROGS += test-mu-maildir +test_mu_maildir_SOURCES= test-mu-maildir.c +test_mu_maildir_LDADD= ${top_srcdir}/src/libmu.la + # note the question marks; make does not like files with ':'... diff --git a/src/tests/test-mu-maildir.c b/src/tests/test-mu-maildir.c new file mode 100644 index 000000000..27e7c0432 --- /dev/null +++ b/src/tests/test-mu-maildir.c @@ -0,0 +1,149 @@ +/* +** Copyright (C) 2010 Dirk-Jan C. Binnema +** +** 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; either 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +** +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif /*HAVE_CONFIG_H*/ + +#include +#include +#include + +#include "src/mu-maildir.h" + +static char* +random_tmpdir (void) +{ + return g_strdup_printf ("%s%cmu-test-%x", g_get_tmp_dir(), + G_DIR_SEPARATOR, + (int)random()*getpid()*(int)time(NULL)); +} + + +static void +test_mu_maildir_mkmdir_01 (void) +{ + int i; + gchar *tmpdir, *mdir, *tmp; + const gchar *subs[] = {"tmp", "cur", "new"}; + + tmpdir = random_tmpdir (); + mdir = g_strdup_printf ("%s%c%s", tmpdir, G_DIR_SEPARATOR, + "cuux"); + + g_assert_cmpuint (mu_maildir_mkmdir (mdir, 0755, FALSE), + ==, TRUE); + + for (i = 0; i != G_N_ELEMENTS(subs); ++i) { + gchar* dir; + + dir = g_strdup_printf ("%s%c%s", mdir, G_DIR_SEPARATOR, + subs[i]); + g_assert_cmpuint (g_access (dir, R_OK), ==, 0); + g_assert_cmpuint (g_access (dir, W_OK), ==, 0); + g_free (dir); + } + + tmp = g_strdup_printf ("%s%c%s", mdir, G_DIR_SEPARATOR, ".noindex"); + g_assert_cmpuint (g_access (tmp, F_OK), !=, 0); + + g_free (tmp); + g_free (tmpdir); + g_free (mdir); + +} + + +static void +test_mu_maildir_mkmdir_02 (void) +{ + int i; + gchar *tmpdir, *mdir, *tmp; + const gchar *subs[] = {"tmp", "cur", "new"}; + + tmpdir = random_tmpdir (); + mdir = g_strdup_printf ("%s%c%s", tmpdir, G_DIR_SEPARATOR, + "cuux"); + + g_assert_cmpuint (mu_maildir_mkmdir (mdir, 0755, TRUE), + ==, TRUE); + + for (i = 0; i != G_N_ELEMENTS(subs); ++i) { + gchar* dir; + + dir = g_strdup_printf ("%s%c%s", mdir, G_DIR_SEPARATOR, + subs[i]); + g_assert_cmpuint (g_access (dir, R_OK), ==, 0); + + g_assert_cmpuint (g_access (dir, W_OK), ==, 0); + g_free (dir); + } + + tmp = g_strdup_printf ("%s%c%s", mdir, G_DIR_SEPARATOR, ".noindex"); + g_assert_cmpuint (g_access (tmp, F_OK), ==, 0); + + g_free (tmp); + g_free (tmpdir); + g_free (mdir); +} + + + +static gboolean +ignore_error (const char* log_domain, GLogLevelFlags log_level, const gchar* msg, + gpointer user_data) +{ + return FALSE; /* don't abort */ +} + +static void +test_mu_maildir_mkmdir_03 (void) +{ + /* this must fail */ + g_test_log_set_fatal_handler ((GTestLogFatalFunc)ignore_error, NULL); + + g_assert_cmpuint (mu_maildir_mkmdir (NULL, 0755, TRUE), + ==, FALSE); +} + + +static void +shutup (void) {} + + + +int +main (int argc, char *argv[]) +{ + g_test_init (&argc, &argv, NULL); + + /* mu_util_dir_expand */ + g_test_add_func ("/mu-maildir/mu-maildir-mkmdir-01", + test_mu_maildir_mkmdir_01); + g_test_add_func ("/mu-maildir/mu-maildir-mkmdir-02", + test_mu_maildir_mkmdir_02); + g_test_add_func ("/mu-maildir/mu-maildir-mkmdir-03", + test_mu_maildir_mkmdir_03); + + g_log_set_handler (NULL, + G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION, + (GLogFunc)shutup, NULL); + + return g_test_run (); +} diff --git a/src/tests/test-util.c b/src/tests/test-mu-util.c similarity index 100% rename from src/tests/test-util.c rename to src/tests/test-mu-util.c