diff options
Diffstat (limited to 'android/bazel_handler_test.go')
-rw-r--r-- | android/bazel_handler_test.go | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/android/bazel_handler_test.go b/android/bazel_handler_test.go new file mode 100644 index 000000000..f1fabecad --- /dev/null +++ b/android/bazel_handler_test.go @@ -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(@soong_injection//mixed_builds:buildroot))"}: `//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, "soong_injection", "mixed_builds", "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, "soong_injection", "mixed_builds", "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, "soong_injection", "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(@soong_injection//mixed_builds: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(@soong_injection//mixed_builds: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 +} |