blob: 3c0a9eb2c2b5ae3c476f072620cfd66463be6bce [file] [log] [blame]
// Copyright 2024 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package tradefed_modules
import (
"android/soong/android"
"android/soong/java"
"encoding/json"
"slices"
"testing"
)
func TestTestSuites(t *testing.T) {
t.Parallel()
ctx := android.GroupFixturePreparers(
java.PrepareForTestWithJavaDefaultModules,
android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents),
).RunTestWithBp(t, `
android_test {
name: "TestModule1",
sdk_version: "current",
}
android_test {
name: "TestModule2",
sdk_version: "current",
}
test_suite {
name: "my-suite",
description: "a test suite",
tests: [
"TestModule1",
"TestModule2",
]
}
`)
manifestPath := ctx.ModuleForTests("my-suite", "android_common").Output("out/soong/test_suites/my-suite/my-suite.json")
var actual testSuiteManifest
if err := json.Unmarshal([]byte(android.ContentFromFileRuleForTests(t, ctx.TestContext, manifestPath)), &actual); err != nil {
t.Errorf("failed to unmarshal manifest: %v", err)
}
slices.Sort(actual.Files)
expected := testSuiteManifest{
Name: "my-suite",
Files: []string{
"target/testcases/TestModule1/TestModule1.config",
"target/testcases/TestModule1/arm64/TestModule1.apk",
"target/testcases/TestModule2/TestModule2.config",
"target/testcases/TestModule2/arm64/TestModule2.apk",
},
}
android.AssertDeepEquals(t, "manifests differ", expected, actual)
}
func TestTestSuitesWithNested(t *testing.T) {
t.Parallel()
ctx := android.GroupFixturePreparers(
java.PrepareForTestWithJavaDefaultModules,
android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents),
).RunTestWithBp(t, `
android_test {
name: "TestModule1",
sdk_version: "current",
}
android_test {
name: "TestModule2",
sdk_version: "current",
}
android_test {
name: "TestModule3",
sdk_version: "current",
}
test_suite {
name: "my-child-suite",
description: "a child test suite",
tests: [
"TestModule1",
"TestModule2",
]
}
test_suite {
name: "my-all-tests-suite",
description: "a parent test suite",
tests: [
"TestModule1",
"TestModule3",
"my-child-suite",
]
}
`)
manifestPath := ctx.ModuleForTests("my-all-tests-suite", "android_common").Output("out/soong/test_suites/my-all-tests-suite/my-all-tests-suite.json")
var actual testSuiteManifest
if err := json.Unmarshal([]byte(android.ContentFromFileRuleForTests(t, ctx.TestContext, manifestPath)), &actual); err != nil {
t.Errorf("failed to unmarshal manifest: %v", err)
}
slices.Sort(actual.Files)
expected := testSuiteManifest{
Name: "my-all-tests-suite",
Files: []string{
"target/testcases/TestModule1/TestModule1.config",
"target/testcases/TestModule1/arm64/TestModule1.apk",
"target/testcases/TestModule2/TestModule2.config",
"target/testcases/TestModule2/arm64/TestModule2.apk",
"target/testcases/TestModule3/TestModule3.config",
"target/testcases/TestModule3/arm64/TestModule3.apk",
},
}
android.AssertDeepEquals(t, "manifests differ", expected, actual)
}
func TestTestSuitesNotInstalledInTestcases(t *testing.T) {
t.Parallel()
android.GroupFixturePreparers(
java.PrepareForTestWithJavaDefaultModules,
android.FixtureRegisterWithContext(RegisterTestSuiteBuildComponents),
).ExtendWithErrorHandler(android.FixtureExpectsAllErrorsToMatchAPattern([]string{
`"SomeHostTest" is not installed in testcases`,
})).RunTestWithBp(t, `
java_test_host {
name: "SomeHostTest",
srcs: ["a.java"],
}
test_suite {
name: "my-suite",
description: "a test suite",
tests: [
"SomeHostTest",
]
}
`)
}