blob: 35b7cc645082652eb3dad02674f9acd2a3509651 [file] [log] [blame]
// 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.
// +build linux darwin
package main
import (
"context"
"fmt"
"math/rand"
"os"
"testing"
"time"
)
func TestTempDir(t *testing.T) {
d, err := newTempDir()
if err != nil {
t.Fatal("failed to create temp dir: ", err)
}
defer os.RemoveAll(d.path)
written := "the contents of foo"
filename, err := d.createFile("foo", written)
if err != nil {
t.Fatal("failed to create temp file: ", err)
}
expectedFilename := d.join("foo")
if filename != expectedFilename {
t.Errorf("got %q, want %q", filename, expectedFilename)
}
read, err := d.readFile("foo")
if err != nil {
t.Fatal("failed to read temp file: ", err)
}
if read != written {
t.Errorf("got %q, want %q", read, written)
}
}
func TestFindFile(t *testing.T) {
d1, err := newTempDir()
if err != nil {
t.Fatal("failed to create temp dir: ", err)
}
defer os.RemoveAll(d1.path)
d2, err := newTempDir()
if err != nil {
t.Fatal("failed to create temp dir: ", err)
}
defer os.RemoveAll(d2.path)
d1a, err := d1.createFile("a", "stuff")
if err != nil {
t.Fatal("failed to create temp file: ", err)
}
d2a, err := d2.createFile("a", "stuff")
if err != nil {
t.Fatal("failed to create temp file: ", err)
}
d2b, err := d2.createFile("b", "stuff")
if err != nil {
t.Fatal("failed to create temp file: ", err)
}
findD1a, err := findFile("a", []string{d1.path, d2.path})
if err != nil {
t.Fatal("failed to find d1/a: ", err)
}
if findD1a != d1a {
t.Errorf("got %q, want %q", findD1a, d1a)
}
findD2a, err := findFile("a", []string{d2.path, d1.path})
if err != nil {
t.Fatal("failed to find d2/a: ", err)
}
if findD2a != d2a {
t.Errorf("got %q, want %q", findD2a, d2a)
}
findD2b, err := findFile("b", []string{d1.path, d2.path})
if err != nil {
t.Fatal("failed to find d2/b: ", err)
}
if findD2b != d2b {
t.Errorf("got %q, want %q", findD2b, d2b)
}
}
func init() {
rand.Seed(time.Now().UTC().UnixNano())
}
var nonexistentPath = fmt.Sprintf("/does_not_exist.%020d", rand.Uint64())
func TestProgramRunSuccess(t *testing.T) {
p := program{"/bin/echo"}
ctx := context.Background()
run, err := p.run(ctx, "hi")
if err != nil {
t.Fatal("failed to run echo: ", err)
}
if !run.success {
t.Error("echo did not succeed")
}
stdout := "hi\n"
stderr := ""
if run.stdout != stdout {
t.Errorf("got %q, want %q", run.stdout, stdout)
}
if run.stderr != stderr {
t.Errorf("got %q, want %q", run.stderr, stderr)
}
}
func TestProgramRunFailure(t *testing.T) {
p := program{"/bin/cat"}
ctx := context.Background()
run, err := p.run(ctx, nonexistentPath)
if err != nil {
t.Fatalf("%s %s: %s", p.path, nonexistentPath, err)
}
if run.success {
t.Errorf("%s %s: run.success: got %v, want false", p.path, nonexistentPath, run.success)
}
if run.stdout != "" {
t.Errorf("%s %s: run.stdout: got %q, want %q", p.path, nonexistentPath, run.stdout, "")
}
if run.stderr == "" {
t.Errorf("%s %s: run.stderr: got %q, want nonempty", p.path, nonexistentPath, run.stderr)
}
}
func TestProgramRunNoLaunch(t *testing.T) {
p := program{nonexistentPath}
ctx := context.Background()
_, err := p.run(ctx)
if err == nil {
t.Fatalf("%s: expected error", p.path)
}
}
func TestProgramRunInfallibleSuccess(t *testing.T) {
p := program{"/bin/echo"}
ctx := context.Background()
run, err := p.runInfallible(ctx, "hi")
if err != nil {
t.Fatal("failed to run echo: ", err)
}
if !run.success {
t.Error("echo did not succeed")
}
stdout := "hi\n"
stderr := ""
if run.stdout != stdout {
t.Errorf("got %q, want %q", run.stdout, stdout)
}
if run.stderr != stderr {
t.Errorf("got %q, want %q", run.stderr, stderr)
}
}
func TestProgramRunInfallibleFailure(t *testing.T) {
p := program{"/bin/cat"}
ctx := context.Background()
_, err := p.runInfallible(ctx, nonexistentPath)
if err == nil {
t.Fatalf("%s %s: expected error", p.path, nonexistentPath)
}
}