Add tests for bazel_handler
Test: go test Test: m nothing Test: bp2build generate && sync; mixed build libc Change-Id: Id4307a9e735b50221a8effb963325aaa57c3c7d0
This commit is contained in:
118
android/bazel_handler_test.go
Normal file
118
android/bazel_handler_test.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package android
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRequestResultsAfterInvokeBazel(t *testing.T) {
|
||||
label := "//foo:bar"
|
||||
arch := Arm64
|
||||
bazelContext, _ := testBazelContext(t, map[bazelCommand]string{
|
||||
bazelCommand{command: "cquery", expression: "kind(rule, deps(//:buildroot))"}: `@sourceroot//foo:bar|arm64>>out/foo/bar.txt`,
|
||||
})
|
||||
g, ok := bazelContext.GetOutputFiles(label, arch)
|
||||
if ok {
|
||||
t.Errorf("Did not expect cquery results prior to running InvokeBazel(), but got %s", g)
|
||||
}
|
||||
err := bazelContext.InvokeBazel()
|
||||
if err != nil {
|
||||
t.Fatalf("Did not expect error invoking Bazel, but got %s", err)
|
||||
}
|
||||
g, ok = bazelContext.GetOutputFiles(label, arch)
|
||||
if !ok {
|
||||
t.Errorf("Expected cquery results after running InvokeBazel(), but got none")
|
||||
} else if w := []string{"out/foo/bar.txt"}; !reflect.DeepEqual(w, g) {
|
||||
t.Errorf("Expected output %s, got %s", w, g)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInvokeBazelWritesBazelFiles(t *testing.T) {
|
||||
bazelContext, baseDir := testBazelContext(t, map[bazelCommand]string{})
|
||||
err := bazelContext.InvokeBazel()
|
||||
if err != nil {
|
||||
t.Fatalf("Did not expect error invoking Bazel, but got %s", err)
|
||||
}
|
||||
if _, err := os.Stat(filepath.Join(baseDir, "bazel", "main.bzl")); os.IsNotExist(err) {
|
||||
t.Errorf("Expected main.bzl to exist, but it does not")
|
||||
} else if err != nil {
|
||||
t.Errorf("Unexpected error stating main.bzl %s", err)
|
||||
}
|
||||
|
||||
if _, err := os.Stat(filepath.Join(baseDir, "bazel", "BUILD.bazel")); os.IsNotExist(err) {
|
||||
t.Errorf("Expected BUILD.bazel to exist, but it does not")
|
||||
} else if err != nil {
|
||||
t.Errorf("Unexpected error stating BUILD.bazel %s", err)
|
||||
}
|
||||
|
||||
if _, err := os.Stat(filepath.Join(baseDir, "bazel", "WORKSPACE.bazel")); os.IsNotExist(err) {
|
||||
t.Errorf("Expected WORKSPACE.bazel to exist, but it does not")
|
||||
} else if err != nil {
|
||||
t.Errorf("Unexpected error stating WORKSPACE.bazel %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInvokeBazelPopulatesBuildStatements(t *testing.T) {
|
||||
bazelContext, _ := testBazelContext(t, map[bazelCommand]string{
|
||||
bazelCommand{command: "aquery", expression: "deps(//:buildroot)"}: `
|
||||
{
|
||||
"artifacts": [{
|
||||
"id": 1,
|
||||
"pathFragmentId": 1
|
||||
}, {
|
||||
"id": 2,
|
||||
"pathFragmentId": 2
|
||||
}],
|
||||
"actions": [{
|
||||
"targetId": 1,
|
||||
"actionKey": "x",
|
||||
"mnemonic": "x",
|
||||
"arguments": ["touch", "foo"],
|
||||
"inputDepSetIds": [1],
|
||||
"outputIds": [1],
|
||||
"primaryOutputId": 1
|
||||
}],
|
||||
"depSetOfFiles": [{
|
||||
"id": 1,
|
||||
"directArtifactIds": [1, 2]
|
||||
}],
|
||||
"pathFragments": [{
|
||||
"id": 1,
|
||||
"label": "one"
|
||||
}, {
|
||||
"id": 2,
|
||||
"label": "two"
|
||||
}]
|
||||
}`,
|
||||
})
|
||||
err := bazelContext.InvokeBazel()
|
||||
if err != nil {
|
||||
t.Fatalf("Did not expect error invoking Bazel, but got %s", err)
|
||||
}
|
||||
|
||||
got := bazelContext.BuildStatementsToRegister()
|
||||
if want := 1; len(got) != want {
|
||||
t.Errorf("Expected %d registered build statements, got %#v", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func testBazelContext(t *testing.T, bazelCommandResults map[bazelCommand]string) (*bazelContext, string) {
|
||||
t.Helper()
|
||||
p := bazelPaths{
|
||||
buildDir: t.TempDir(),
|
||||
outputBase: "outputbase",
|
||||
workspaceDir: "workspace_dir",
|
||||
}
|
||||
aqueryCommand := bazelCommand{command: "aquery", expression: "deps(//:buildroot)"}
|
||||
if _, exists := bazelCommandResults[aqueryCommand]; !exists {
|
||||
bazelCommandResults[aqueryCommand] = "{}\n"
|
||||
}
|
||||
runner := &mockBazelRunner{bazelCommandResults: bazelCommandResults}
|
||||
return &bazelContext{
|
||||
bazelRunner: runner,
|
||||
paths: &p,
|
||||
requests: map[cqueryKey]bool{},
|
||||
}, p.buildDir
|
||||
}
|
Reference in New Issue
Block a user