platform_build_soong/sdk/compat_config_sdk_test.go
Paul Duffin 1822a0a371 Improve sdk snapshot testing
The sdk produces snapshots that are expected to be unpacked in one of
the Android repos. Often that can lead to issues due to conflicts
between the source and prebuilts. This change attempts to avoid those
conflicts by testing the different ways that those files can be used.

With the existing test to cover adding the snapshot
This change will cause the sdk tests to check the following:
1) Snapshot on its own (already done).
2) Snapshot plus original source where the original source is
   preferred.
3) Snapshot plus original source where the snapshot is preferred.

It also adds the ability for tests to provide their own custom checkers
to verify the result of each of the previous tests.

This change reveals a number of bugs already present. Rather than
attempt to fix them this change adds the ability to specify error
handlers for the two cases that mix source and snapshot to allow those
errors to be temporarily ignored while allowing the majority of the
tests to benefit from this improvement. Each of those failures has a
TODO and bug associated with it.

Bug: 183184375
Test: m nothing
Change-Id: I105233195074dbe7a6422b6dfc5486e74398ea15
2021-03-25 12:50:18 +00:00

95 lines
3.2 KiB
Go

// Copyright 2021 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 sdk
import (
"testing"
"android/soong/android"
"android/soong/java"
)
func TestSnapshotWithCompatConfig(t *testing.T) {
result := android.GroupFixturePreparers(
prepareForSdkTestWithJava,
java.PrepareForTestWithPlatformCompatConfig,
).RunTestWithBp(t, `
sdk {
name: "mysdk",
compat_configs: ["myconfig"],
}
platform_compat_config {
name: "myconfig",
}
`)
CheckSnapshot(t, result, "mysdk", "",
checkVersionedAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.
prebuilt_platform_compat_config {
name: "mysdk_myconfig@current",
sdk_member_name: "myconfig",
visibility: ["//visibility:public"],
metadata: "compat_configs/myconfig/myconfig_meta.xml",
}
sdk_snapshot {
name: "mysdk@current",
visibility: ["//visibility:public"],
compat_configs: ["mysdk_myconfig@current"],
}
`),
checkUnversionedAndroidBpContents(`
// This is auto-generated. DO NOT EDIT.
prebuilt_platform_compat_config {
name: "myconfig",
prefer: false,
visibility: ["//visibility:public"],
metadata: "compat_configs/myconfig/myconfig_meta.xml",
}
`),
checkAllCopyRules(`
.intermediates/myconfig/android_common/myconfig_meta.xml -> compat_configs/myconfig/myconfig_meta.xml
`),
snapshotTestChecker(checkSnapshotWithoutSource,
func(t *testing.T, result *android.TestResult) {
// Make sure that the snapshot metadata is collated by the platform compat config singleton.
java.CheckMergedCompatConfigInputs(t, result, "snapshot module", "snapshot/compat_configs/myconfig/myconfig_meta.xml")
}),
snapshotTestChecker(checkSnapshotWithSourcePreferred,
func(t *testing.T, result *android.TestResult) {
// Make sure that the snapshot metadata is collated by the platform compat config singleton.
java.CheckMergedCompatConfigInputs(t, result, "snapshot module",
"out/soong/.intermediates/myconfig/android_common/myconfig_meta.xml",
// TODO(b/182402754): Remove this as only the config file from the preferred module should be used.
"snapshot/compat_configs/myconfig/myconfig_meta.xml",
)
}),
snapshotTestChecker(checkSnapshotPreferredWithSource,
func(t *testing.T, result *android.TestResult) {
// Make sure that the snapshot metadata is collated by the platform compat config singleton.
java.CheckMergedCompatConfigInputs(t, result, "snapshot module",
"out/soong/.intermediates/myconfig/android_common/myconfig_meta.xml",
// TODO(b/182402754): Remove this as only the config file from the preferred module should be used.
"snapshot/compat_configs/myconfig/myconfig_meta.xml",
)
}),
)
}