1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Test main for the runtests-utils test on POSIX systems (e.g., Linux and 6// MacOS). 7 8#include "runtests-utils-test-globals.h" 9 10#include <stdio.h> 11#include <stdlib.h> 12#include <unistd.h> 13 14#include <fbl/auto_call.h> 15#include <runtests-utils/posix-run-test.h> 16#include <unittest/unittest.h> 17 18namespace runtests { 19 20// Pointer to root of unique subdirectory of TMPDIR or /tmp. 21static const fbl::String* TmpDirRoot = nullptr; 22 23const char kScriptShebang[32] = "#!/bin/sh\n\n"; 24const RunTestFn PlatformRunTest = &PosixRunTest; 25 26const char* TestFsRoot() { 27 if (TmpDirRoot == nullptr) { 28 char test_fs_template[256]; 29 sprintf(test_fs_template, "%s/XXXXXX", 30 getenv("TMPDIR") ? getenv("TMPDIR") : "/tmp"); 31 TmpDirRoot = new fbl::String(mkdtemp(test_fs_template)); 32 } 33 return TmpDirRoot->c_str(); 34} 35 36} // namespace runtests 37 38int main(int argc, char** argv) { 39 printf("\nRoot directory of the filesystem used for testing: %s\n", 40 runtests::TestFsRoot()); 41 42 auto auto_test_fs_clean_up = fbl::MakeAutoCall([&] { 43 // Since all subdirectories created will be scoped, at the end of the 44 // test TestFsRoot() should be empty. 45 remove(runtests::TestFsRoot()); 46 delete runtests::TmpDirRoot; 47 }); 48 return unittest_run_all_tests(argc, argv) ? EXIT_SUCCESS : EXIT_FAILURE; 49} 50