diff options
Diffstat (limited to 'tools/misc_helpers.cpp')
-rw-r--r-- | tools/misc_helpers.cpp | 448 |
1 files changed, 0 insertions, 448 deletions
diff --git a/tools/misc_helpers.cpp b/tools/misc_helpers.cpp deleted file mode 100644 index 8ec4ddefcd88..000000000000 --- a/tools/misc_helpers.cpp +++ /dev/null @@ -1,448 +0,0 @@ -// -// Automated Testing Framework (atf) -// -// Copyright (c) 2007 The NetBSD Foundation, Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND -// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -// IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// - -extern "C" { -#include <sys/stat.h> - -#include <signal.h> -#include <unistd.h> -} - -#include <cstdlib> -#include <fstream> -#include <iomanip> -#include <ios> -#include <iostream> -#include <string> - -#include <atf-c++.hpp> - -#include "env.hpp" -#include "fs.hpp" -#include "process.hpp" - -// ------------------------------------------------------------------------ -// Auxiliary functions. -// ------------------------------------------------------------------------ - -static -void -touch(const std::string& path) -{ - std::ofstream os(path.c_str()); - if (!os) - ATF_FAIL("Could not create file " + path); - os.close(); -} - -// ------------------------------------------------------------------------ -// Helper tests for "atf-run_test". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(pass); -ATF_TEST_CASE_HEAD(pass) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(pass) -{ -} - -ATF_TEST_CASE(config); -ATF_TEST_CASE_HEAD(config) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(config) -{ - std::cout << "1st: " << get_config_var("1st") << "\n"; - std::cout << "2nd: " << get_config_var("2nd") << "\n"; - std::cout << "3rd: " << get_config_var("3rd") << "\n"; - std::cout << "4th: " << get_config_var("4th") << "\n"; -} - -ATF_TEST_CASE(fds); -ATF_TEST_CASE_HEAD(fds) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(fds) -{ - std::cout << "msg1 to stdout" << "\n"; - std::cout << "msg2 to stdout" << "\n"; - std::cerr << "msg1 to stderr" << "\n"; - std::cerr << "msg2 to stderr" << "\n"; -} - -ATF_TEST_CASE_WITHOUT_HEAD(mux_streams); -ATF_TEST_CASE_BODY(mux_streams) -{ - for (size_t i = 0; i < 10000; i++) { - switch (i % 5) { - case 0: - std::cout << "stdout " << i << "\n"; - break; - case 1: - std::cerr << "stderr " << i << "\n"; - break; - case 2: - std::cout << "stdout " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - break; - case 3: - std::cout << "stdout " << i << "\n"; - std::cout << "stdout " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - break; - case 4: - std::cout << "stdout " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - std::cerr << "stderr " << i << "\n"; - break; - default: - std::abort(); - } - } -} - -ATF_TEST_CASE(testvar); -ATF_TEST_CASE_HEAD(testvar) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(testvar) -{ - if (!has_config_var("testvar")) - fail("testvar variable not defined"); - std::cout << "testvar: " << get_config_var("testvar") << "\n"; -} - -ATF_TEST_CASE(env_list); -ATF_TEST_CASE_HEAD(env_list) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(env_list) -{ - const tools::process::status s = - tools::process::exec(tools::fs::path("env"), - tools::process::argv_array("env", NULL), - tools::process::stream_inherit(), - tools::process::stream_inherit()); - ATF_REQUIRE(s.exited()); - ATF_REQUIRE(s.exitstatus() == EXIT_SUCCESS); -} - -ATF_TEST_CASE(env_home); -ATF_TEST_CASE_HEAD(env_home) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(env_home) -{ - ATF_REQUIRE(tools::env::has("HOME")); - tools::fs::path p(tools::env::get("HOME")); - tools::fs::file_info fi1(p); - tools::fs::file_info fi2(tools::fs::path(".")); - ATF_REQUIRE_EQ(fi1.get_device(), fi2.get_device()); - ATF_REQUIRE_EQ(fi1.get_inode(), fi2.get_inode()); -} - -ATF_TEST_CASE(read_stdin); -ATF_TEST_CASE_HEAD(read_stdin) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(read_stdin) -{ - char buf[100]; - ssize_t len = ::read(STDIN_FILENO, buf, sizeof(buf) - 1); - ATF_REQUIRE(len != -1); - - buf[len + 1] = '\0'; - for (ssize_t i = 0; i < len; i++) { - if (buf[i] != '\0') { - fail("The stdin of the test case does not seem to be /dev/zero; " - "got '" + std::string(buf) + "'"); - } - } -} - -ATF_TEST_CASE(umask); -ATF_TEST_CASE_HEAD(umask) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(umask) -{ - mode_t m = ::umask(0); - std::cout << "umask: " << std::setw(4) << std::setfill('0') - << std::oct << m << "\n"; - (void)::umask(m); -} - -ATF_TEST_CASE_WITH_CLEANUP(cleanup_states); -ATF_TEST_CASE_HEAD(cleanup_states) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(cleanup_states) -{ - touch(get_config_var("statedir") + "/to-delete"); - touch(get_config_var("statedir") + "/to-stay"); - - if (get_config_var("state") == "fail") - ATF_FAIL("On purpose"); - else if (get_config_var("state") == "skip") - ATF_SKIP("On purpose"); -} -ATF_TEST_CASE_CLEANUP(cleanup_states) -{ - tools::fs::remove(tools::fs::path(get_config_var("statedir") + "/to-delete")); -} - -ATF_TEST_CASE_WITH_CLEANUP(cleanup_curdir); -ATF_TEST_CASE_HEAD(cleanup_curdir) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(cleanup_curdir) -{ - std::ofstream os("oldvalue"); - if (!os) - ATF_FAIL("Failed to create oldvalue file"); - os << 1234; - os.close(); -} -ATF_TEST_CASE_CLEANUP(cleanup_curdir) -{ - std::ifstream is("oldvalue"); - if (is) { - int i; - is >> i; - std::cout << "Old value: " << i << "\n"; - is.close(); - } -} - -ATF_TEST_CASE(require_arch); -ATF_TEST_CASE_HEAD(require_arch) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.arch", get_config_var("arch", "not-set")); -} -ATF_TEST_CASE_BODY(require_arch) -{ -} - -ATF_TEST_CASE(require_config); -ATF_TEST_CASE_HEAD(require_config) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.config", "var1 var2"); -} -ATF_TEST_CASE_BODY(require_config) -{ - std::cout << "var1: " << get_config_var("var1") << "\n"; - std::cout << "var2: " << get_config_var("var2") << "\n"; -} - -ATF_TEST_CASE(require_files); -ATF_TEST_CASE_HEAD(require_files) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.files", get_config_var("files", "not-set")); -} -ATF_TEST_CASE_BODY(require_files) -{ -} - -ATF_TEST_CASE(require_machine); -ATF_TEST_CASE_HEAD(require_machine) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.machine", get_config_var("machine", "not-set")); -} -ATF_TEST_CASE_BODY(require_machine) -{ -} - -ATF_TEST_CASE(require_progs); -ATF_TEST_CASE_HEAD(require_progs) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.progs", get_config_var("progs", "not-set")); -} -ATF_TEST_CASE_BODY(require_progs) -{ -} - -ATF_TEST_CASE(require_user); -ATF_TEST_CASE_HEAD(require_user) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("require.user", get_config_var("user", "not-set")); -} -ATF_TEST_CASE_BODY(require_user) -{ -} - -ATF_TEST_CASE(timeout); -ATF_TEST_CASE_HEAD(timeout) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("timeout", "1"); -} -ATF_TEST_CASE_BODY(timeout) -{ - sleep(10); - touch(get_config_var("statedir") + "/finished"); -} - -ATF_TEST_CASE(timeout_forkexit); -ATF_TEST_CASE_HEAD(timeout_forkexit) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); -} -ATF_TEST_CASE_BODY(timeout_forkexit) -{ - pid_t pid = fork(); - ATF_REQUIRE(pid != -1); - - if (pid == 0) { - sigset_t mask; - sigemptyset(&mask); - - std::cout << "Waiting in subprocess\n"; - std::cout.flush(); - ::sigsuspend(&mask); - - touch(get_config_var("statedir") + "/child-finished"); - std::cout << "Subprocess exiting\n"; - std::cout.flush(); - exit(EXIT_SUCCESS); - } else { - // Don't wait for the child process and let atf-run deal with it. - touch(get_config_var("statedir") + "/parent-finished"); - std::cout << "Parent process exiting\n"; - ATF_PASS(); - } -} - -ATF_TEST_CASE(use_fs); -ATF_TEST_CASE_HEAD(use_fs) -{ - set_md_var("descr", "Helper test case for the t_integration test program"); - set_md_var("use.fs", "this-is-deprecated"); -} -ATF_TEST_CASE_BODY(use_fs) -{ - touch("test-file"); -} - -// ------------------------------------------------------------------------ -// Helper tests for "atf-report_test". -// ------------------------------------------------------------------------ - -ATF_TEST_CASE(diff); -ATF_TEST_CASE_HEAD(diff) -{ - set_md_var("descr", "Helper test case for the t_integration program"); -} -ATF_TEST_CASE_BODY(diff) -{ - std::cout << "--- a 2007-11-04 14:00:41.000000000 +0100\n"; - std::cout << "+++ b 2007-11-04 14:00:48.000000000 +0100\n"; - std::cout << "@@ -1,7 +1,7 @@\n"; - std::cout << " This test is meant to simulate a diff.\n"; - std::cout << " Blank space at beginning of context lines must be " - "preserved.\n"; - std::cout << " \n"; - std::cout << "-First original line.\n"; - std::cout << "-Second original line.\n"; - std::cout << "+First modified line.\n"; - std::cout << "+Second modified line.\n"; - std::cout << " \n"; - std::cout << " EOF\n"; -} - -// ------------------------------------------------------------------------ -// Main. -// ------------------------------------------------------------------------ - -ATF_INIT_TEST_CASES(tcs) -{ - std::string which = tools::env::get("TESTCASE"); - - // Add helper tests for atf-run_test. - if (which == "pass") - ATF_ADD_TEST_CASE(tcs, pass); - if (which == "config") - ATF_ADD_TEST_CASE(tcs, config); - if (which == "fds") - ATF_ADD_TEST_CASE(tcs, fds); - if (which == "mux_streams") - ATF_ADD_TEST_CASE(tcs, mux_streams); - if (which == "testvar") - ATF_ADD_TEST_CASE(tcs, testvar); - if (which == "env_list") - ATF_ADD_TEST_CASE(tcs, env_list); - if (which == "env_home") - ATF_ADD_TEST_CASE(tcs, env_home); - if (which == "read_stdin") - ATF_ADD_TEST_CASE(tcs, read_stdin); - if (which == "umask") - ATF_ADD_TEST_CASE(tcs, umask); - if (which == "cleanup_states") - ATF_ADD_TEST_CASE(tcs, cleanup_states); - if (which == "cleanup_curdir") - ATF_ADD_TEST_CASE(tcs, cleanup_curdir); - if (which == "require_arch") - ATF_ADD_TEST_CASE(tcs, require_arch); - if (which == "require_config") - ATF_ADD_TEST_CASE(tcs, require_config); - if (which == "require_files") - ATF_ADD_TEST_CASE(tcs, require_files); - if (which == "require_machine") - ATF_ADD_TEST_CASE(tcs, require_machine); - if (which == "require_progs") - ATF_ADD_TEST_CASE(tcs, require_progs); - if (which == "require_user") - ATF_ADD_TEST_CASE(tcs, require_user); - if (which == "timeout") - ATF_ADD_TEST_CASE(tcs, timeout); - if (which == "timeout_forkexit") - ATF_ADD_TEST_CASE(tcs, timeout_forkexit); - if (which == "use_fs") - ATF_ADD_TEST_CASE(tcs, use_fs); - - // Add helper tests for atf-report_test. - if (which == "diff") - ATF_ADD_TEST_CASE(tcs, diff); -} |