blob: 4aeebd37e69383bb001b4a478198137949a888bf [file] [log] [blame]
package testutils
import (
"context"
"time"
cipd_git "go.skia.org/infra/bazel/external/cipd/git"
bt_testutil "go.skia.org/infra/go/bt/testutil"
git_testutils "go.skia.org/infra/go/git/testutils"
"go.skia.org/infra/go/sktest"
"go.skia.org/infra/go/testutils"
"go.skia.org/infra/task_scheduler/go/specs"
)
const (
BuildTaskName = "Build-Ubuntu-GCC-Arm7-Release-Android"
TestTaskName = "Test-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release"
PerfTaskName = "Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release"
CompileCASDigest = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/42"
TestCASDigest = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/42"
PerfCASDigest = "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc/42"
)
var (
BuildTask = &specs.TaskSpec{
CasSpec: "compile",
CipdPackages: []*specs.CipdPackage{
{
Name: "android_sdk",
Path: "android_sdk",
Version: "version:0",
},
},
Command: []string{"ninja", "skia"},
Dimensions: []string{"pool:Skia", "os:Ubuntu"},
ExtraTags: map[string]string{
"is_build_task": "true",
},
MaxAttempts: 5,
Priority: 0.5,
}
TestTask = &specs.TaskSpec{
CasSpec: "test",
CipdPackages: []*specs.CipdPackage{
{
Name: "skimage",
Path: "skimage",
Version: "version:0",
},
{
Name: "skp",
Path: "skp",
Version: "version:0",
},
},
Command: []string{"test", "skia"},
Dependencies: []string{BuildTaskName},
Dimensions: []string{"pool:Skia", "os:Android", "device_type:grouper"},
EnvPrefixes: map[string][]string{
"PATH": {"curdir"},
},
Priority: 0.5,
}
PerfTask = &specs.TaskSpec{
CasSpec: "perf",
CipdPackages: []*specs.CipdPackage{
{
Name: "skimage",
Path: "skimage",
Version: "version:0",
},
{
Name: "skp",
Path: "skp",
Version: "version:0",
},
},
Command: []string{"perf", "skia"},
Dependencies: []string{BuildTaskName},
Dimensions: []string{"pool:Skia", "os:Android", "device_type:grouper"},
Priority: 0.5,
}
BuildJob = &specs.JobSpec{
Priority: 0.5,
TaskSpecs: []string{BuildTaskName},
}
TestJob = &specs.JobSpec{
Priority: 0.5,
TaskSpecs: []string{TestTaskName},
}
PerfJob = &specs.JobSpec{
Priority: 0.5,
TaskSpecs: []string{PerfTaskName},
}
CasSpecs1 = map[string]*specs.CasSpec{
"compile": {
Digest: CompileCASDigest,
},
"test": {
Digest: TestCASDigest,
},
}
CasSpecs2 = map[string]*specs.CasSpec{
"compile": {
Digest: CompileCASDigest,
},
"test": {
Digest: TestCASDigest,
},
"perf": {
Digest: PerfCASDigest,
},
}
TasksCfg1 = &specs.TasksCfg{
CasSpecs: CasSpecs1,
Tasks: map[string]*specs.TaskSpec{
BuildTaskName: BuildTask,
TestTaskName: TestTask,
},
Jobs: map[string]*specs.JobSpec{
BuildTaskName: BuildJob,
TestTaskName: TestJob,
},
}
TasksCfg2 = &specs.TasksCfg{
CasSpecs: CasSpecs2,
Tasks: map[string]*specs.TaskSpec{
BuildTaskName: BuildTask,
PerfTaskName: PerfTask,
TestTaskName: TestTask,
},
Jobs: map[string]*specs.JobSpec{
BuildTaskName: BuildJob,
PerfTaskName: PerfJob,
TestTaskName: TestJob,
},
}
)
// The test repo has two commits. The first commit adds a tasks.cfg file
// with two task specs: a build task and a test task, the test task
// depending on the build task. The second commit adds a perf task spec,
// which also depends on the build task. Therefore, there are five total
// possible tasks we could run:
//
// Build@c1, Test@c1, Build@c2, Test@c2, Perf@c2
//
// Returns the GitBuilder instance for the test repo, along with the commit
// hashes for c1 and c2.
func SetupTestRepo(t sktest.TestingT) (context.Context, *git_testutils.GitBuilder, string, string) {
ctx := cipd_git.UseGitFinder(context.Background())
gb := git_testutils.GitInit(t, ctx)
// Commit 1.
gb.Add(ctx, "infra/bots/tasks.json", testutils.MarshalIndentJSON(t, TasksCfg1))
gb.Add(ctx, "somefile.txt", "blahblah")
gb.Add(ctx, "a.txt", "blah")
now := time.Now()
c1 := gb.CommitMsgAt(ctx, "c1", now.Add(-5*time.Second))
// Commit 2.
gb.Add(ctx, "infra/bots/tasks.json", testutils.MarshalIndentJSON(t, TasksCfg2))
c2 := gb.CommitMsgAt(ctx, "c2", now)
return ctx, gb, c1, c2
}
// SetupBigTable performs setup for the TaskCfgCache in BigTable. Returns the
// BigTable instance name which should be used to instantiate TaskCfgCache and a
// cleanup function which should be deferred.
func SetupBigTable(t sktest.TestingT) (string, string, func()) {
// The table and column family names are task_cfg_cache.BT_TABLE and
// task_cfg_cache.BT_COLUMN_FAMILY, but are hard-coded here to avoid a
// dependency cycle.
return bt_testutil.SetupBigTable(t, "tasks-cfg", "CFGS")
}