blob: b3de9d8376e1851097cf6122f57f660741fe2c52 [file] [edit]
// Copyright 2020 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.
package main
import (
"errors"
"flag"
"fmt"
"os"
"os/exec"
"path"
"path/filepath"
)
var testscript = flag.String("testscript", "", "test script to execute. Relative paths are relative to the location of the running script. Absolute paths are absolute.")
var testroot = flag.String("testroot", "", "Root directory of the files needed to execute the test.")
// This is a wrapper for running unit tests.
func main() {
flag.Parse()
var (
theTest = *testscript
theRoot = *testroot
)
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
fmt.Fprintf(os.Stderr, "Could not determine execution path: %v\n", err)
os.Exit(1)
}
if !filepath.IsAbs(theTest) {
theTest = path.Join(dir, theTest)
}
if !filepath.IsAbs(theRoot) {
theRoot = path.Join(dir, theRoot)
}
// Make sure the test is executable.
if err := os.Chmod(theTest, 0755); err != nil {
fmt.Fprintf(os.Stderr, "Chmod %v failed: %v\n", theTest, err)
os.Exit(1)
}
cmd := exec.Command(theTest)
cmd.Dir = theRoot
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
if err := cmd.Run(); err != nil {
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
os.Exit(exitErr.ExitCode())
}
fmt.Fprintf(os.Stderr, "%v failed: %v\n", theTest, err)
os.Exit(1)
}
}