// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Test main for the runtests-utils test on POSIX systems (e.g., Linux and
// MacOS).

#include "runtests-utils-test-globals.h"

#include <stdio.h>

#include <fbl/auto_call.h>
#include <runtests-utils/posix-run-test.h>
#include <unittest/unittest.h>

namespace runtests {

// Pointer to root of unique subdirectory of TMPDIR or /tmp.
static const fbl::String* TmpDirRoot = nullptr;

const char kScriptShebang[32] = "#!/bin/sh\n\n";
const RunTestFn PlatformRunTest = &PosixRunTest;

const char* TestFsRoot() {
    if (TmpDirRoot == nullptr) {
        char test_fs_template[256];
        sprintf(test_fs_template, "%s/XXXXXX",
                getenv("TMPDIR") ? getenv("TMPDIR") : "/tmp");
        TmpDirRoot = new fbl::String(mkdtemp(test_fs_template));
        printf("Root directory used for testing: %s\n", TmpDirRoot->c_str());
    }
    return TmpDirRoot->c_str();
}

} // namespace runtests

int main(int argc, char** argv) {
    printf("\nRoot directory of the filesystem used for testing: %s\n",
           runtests::TestFsRoot());

    auto auto_test_fs_clean_up = fbl::MakeAutoCall([&] {
        // Since all subdirectories created will be scoped, at the end of the
        // test TestFsRoot() should be empty.
        remove(runtests::TestFsRoot());
    });
    return unittest_run_all_tests(argc, argv) ? EXIT_SUCCESS : EXIT_FAILURE;
}
