blob: b8f91f019394a7961c9be381d1ae15a59fd18355 [file] [log] [blame]
// Copyright 2020 The Chromium 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 (
"context"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
"go.skia.org/infra/go/testutils/unittest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.skia.org/infra/task_driver/go/td"
)
func TestSetupCIFuzzRepoAndDocker_Success(t *testing.T) {
unittest.LinuxOnlyTest(t)
base := t.TempDir()
fakeWorkDir := filepath.Join(base, "work")
gb, err := exec.Command("which", "git").Output()
require.NoError(t, err)
gitExe := strings.TrimSpace(string(gb))
res := td.RunTestSteps(t, false, func(ctx context.Context) error {
return setupCIFuzzRepoAndDocker(ctx, fakeWorkDir, gitExe)
})
require.Empty(t, res.Errors)
require.Empty(t, res.Exceptions)
require.Len(t, res.Steps, 1)
step := res.Steps[0]
assert.Equal(t, td.StepResultSuccess, step.Result)
assert.Empty(t, step.Errors)
assert.Empty(t, step.Exceptions)
// Make sure the output directory is created
assert.DirExists(t, filepath.Join(fakeWorkDir, "out"))
}
func TestExtractOutput_OnlyCopyFuzzOutputs(t *testing.T) {
base := t.TempDir()
fakeWorkDir := filepath.Join(base, "work")
fakeCIFuzzOut := filepath.Join(fakeWorkDir, "out")
fakeOutput := filepath.Join(base, "swarming_out")
err := os.MkdirAll(fakeCIFuzzOut, 0777)
require.NoError(t, err)
touch(t, filepath.Join(fakeCIFuzzOut, "crash-1234"))
touch(t, filepath.Join(fakeCIFuzzOut, "oom-1234"))
touch(t, filepath.Join(fakeCIFuzzOut, "timeout-1234"))
touch(t, filepath.Join(fakeCIFuzzOut, "a_fuzz_executable_that_should_not_be_copied"))
_, err = os.Stat(fakeOutput)
require.Error(t, err)
res := td.RunTestSteps(t, false, func(ctx context.Context) error {
return extractOutput(ctx, fakeWorkDir, fakeOutput)
})
require.Empty(t, res.Errors)
require.Empty(t, res.Exceptions)
require.Len(t, res.Steps, 1)
step := res.Steps[0]
assert.Equal(t, td.StepResultSuccess, step.Result)
assert.Empty(t, step.Errors)
assert.Empty(t, step.Exceptions)
copiedFiles, err := ioutil.ReadDir(fakeOutput)
require.NoError(t, err)
fileNames := make([]string, 0, len(copiedFiles))
for _, f := range copiedFiles {
fileNames = append(fileNames, f.Name())
}
assert.ElementsMatch(t, []string{"crash-1234", "oom-1234", "timeout-1234"}, fileNames)
}
func touch(t *testing.T, file string) {
err := ioutil.WriteFile(file, []byte("Whatever"), 0666)
require.NoError(t, err)
}