From bb3a3a61fe7b971ad8ef326ec7e4d5903e6860ee Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Mon, 27 Jan 2014 15:15:43 -0800 Subject: Functional tests for C library MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While gearing up to make an addition to the C library, I became concerned at the lack of test infrastructure for the project. The build system now integrates Check , a lightweight testing framework for C, and there are a few tests to ensure no serious regressions occur. You can run the tests with “make check”. --- test/tmpdir.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 test/tmpdir.c (limited to 'test/tmpdir.c') diff --git a/test/tmpdir.c b/test/tmpdir.c new file mode 100644 index 0000000..5d0c4d0 --- /dev/null +++ b/test/tmpdir.c @@ -0,0 +1,92 @@ +/* tmpdir.c -- fixture to create a temporary directory + * Copyright (C) 2010 caf + * Copyright (C) 2014 Galois, Inc. + * + * This library 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 of the License, or (at your option) + * any later version. + * + * This library 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 library. If not, see . + * + * To contact Galois, complete the Web form at + * or write to Galois, Inc., 421 Southwest + * 6th Avenue, Suite 300, Portland, Oregon, 97204-1622. */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define _POSIX_C_SOURCE 200809L // mkdtemp(3) + +/* This is a bit out of order, but it needs to go here, before *any* includes + * are done, so that they can catch _XOPEN_SOURCE. */ +#if HAVE_FTW_H +# define _XOPEN_SOURCE 500 +# include +#endif + +#include +#include +#include +#include + +#if HAVE_SYS_STAT_H +# include +#endif + +#if HAVE_UNISTD_H +# include +#endif + +#include + +#include "tmpdir.h" + +#define ignore(x) ((void)(x)) + +#if (HAVE_STRUCT_FTW && HAVE_MKDTEMP && HAVE_NFTW) + static int unlink_cb( + const char *fpath, + const struct stat *sb, + int typeflag, + struct FTW *ftwbuf) + { + ignore(sb); + ignore(typeflag); + ignore(ftwbuf); + return remove(fpath); + } + + static inline int rm_rf(char *path) + { + return nftw(path, unlink_cb, 64, FTW_DEPTH | FTW_PHYS); + } + + static char tmpdir_buf[64]; + + void tmpdir_make() { + const char template[] = "scratch.XXXXXX"; + strcpy(tmpdir_buf, template); + ck_assert(mkdtemp(tmpdir_buf) != NULL); + } + + const char *tmpdir_name() { + if (strlen(tmpdir_buf) == 0) { + return NULL; + } else { + return tmpdir_buf; + } + } + + void tmpdir_clean() { + rm_rf(tmpdir_buf); + tmpdir_buf[0] = '\0'; + } +#endif -- cgit v1.2.3