079a97c778
Prepare for changing rust rules by testing that output file names will match. A build failure in b/301463284 was partially caused by output paths changing and resulting in old files building up on buildbots which filled the disk. This unit test will ensure that the file paths of rust modules do not change and cause the same failure. Bug: 301463284 Bug: 286077158 Change-Id: I1baba2c63ad29a2c98e378fce0a2ed32bc319c1e
165 lines
6.1 KiB
Go
165 lines
6.1 KiB
Go
// Copyright 2020 The Android Open Source Project
|
|
//
|
|
// 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 rust
|
|
|
|
import (
|
|
"android/soong/android"
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
func TestSourceProviderCollision(t *testing.T) {
|
|
testRustError(t, "multiple source providers generate the same filename output: bindings.rs", `
|
|
rust_binary {
|
|
name: "source_collider",
|
|
srcs: [
|
|
"foo.rs",
|
|
":libbindings1",
|
|
":libbindings2",
|
|
],
|
|
}
|
|
rust_bindgen {
|
|
name: "libbindings1",
|
|
source_stem: "bindings",
|
|
crate_name: "bindings1",
|
|
wrapper_src: "src/any.h",
|
|
}
|
|
rust_bindgen {
|
|
name: "libbindings2",
|
|
source_stem: "bindings",
|
|
crate_name: "bindings2",
|
|
wrapper_src: "src/any.h",
|
|
}
|
|
`)
|
|
}
|
|
|
|
func TestCompilationOutputFiles(t *testing.T) {
|
|
ctx := testRust(t, `
|
|
rust_library {
|
|
name: "libfizz_buzz",
|
|
crate_name:"fizz_buzz",
|
|
srcs: ["lib.rs"],
|
|
}
|
|
rust_binary {
|
|
name: "fizz_buzz",
|
|
crate_name:"fizz_buzz",
|
|
srcs: ["lib.rs"],
|
|
}
|
|
rust_ffi {
|
|
name: "librust_ffi",
|
|
crate_name: "rust_ffi",
|
|
srcs: ["lib.rs"],
|
|
}
|
|
`)
|
|
testcases := []struct {
|
|
testName string
|
|
moduleName string
|
|
variant string
|
|
expectedFiles []string
|
|
}{
|
|
{
|
|
testName: "dylib",
|
|
moduleName: "libfizz_buzz",
|
|
variant: "android_arm64_armv8-a_dylib",
|
|
expectedFiles: []string{
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.clippy",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.rsp",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.rsp.a",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/libfizz_buzz.dylib.so.rsp.whole.a",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/unstripped/libfizz_buzz.dylib.so",
|
|
"out/soong/target/product/test_device/system/lib64/libfizz_buzz.dylib.so",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_dylib/meta_lic",
|
|
},
|
|
},
|
|
{
|
|
testName: "rlib dylib-std",
|
|
moduleName: "libfizz_buzz",
|
|
variant: "android_arm64_armv8-a_rlib_dylib-std",
|
|
expectedFiles: []string{
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/libfizz_buzz.rlib.clippy",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_dylib-std/meta_lic",
|
|
},
|
|
},
|
|
{
|
|
testName: "rlib rlib-std",
|
|
moduleName: "libfizz_buzz",
|
|
variant: "android_arm64_armv8-a_rlib_rlib-std",
|
|
expectedFiles: []string{
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/libfizz_buzz.rlib.clippy",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/meta_lic",
|
|
"out/soong/.intermediates/libfizz_buzz/android_arm64_armv8-a_rlib_rlib-std/rustdoc.timestamp",
|
|
},
|
|
},
|
|
{
|
|
testName: "rust_binary",
|
|
moduleName: "fizz_buzz",
|
|
variant: "android_arm64_armv8-a",
|
|
expectedFiles: []string{
|
|
"out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz",
|
|
"out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.clippy",
|
|
"out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.rsp",
|
|
"out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.rsp.a",
|
|
"out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/fizz_buzz.rsp.whole.a",
|
|
"out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/unstripped/fizz_buzz",
|
|
"out/soong/target/product/test_device/system/bin/fizz_buzz",
|
|
"out/soong/.intermediates/fizz_buzz/android_arm64_armv8-a/meta_lic",
|
|
},
|
|
},
|
|
{
|
|
testName: "rust_ffi static",
|
|
moduleName: "librust_ffi",
|
|
variant: "android_arm64_armv8-a_static",
|
|
expectedFiles: []string{
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/librust_ffi.a",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/librust_ffi.a.clippy",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/meta_lic",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_static/rustdoc.timestamp",
|
|
},
|
|
},
|
|
{
|
|
testName: "rust_ffi shared",
|
|
moduleName: "librust_ffi",
|
|
variant: "android_arm64_armv8-a_shared",
|
|
expectedFiles: []string{
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.clippy",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.rsp",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.rsp.a",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/librust_ffi.so.rsp.whole.a",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/unstripped/librust_ffi.so.toc",
|
|
"out/soong/.intermediates/librust_ffi/android_arm64_armv8-a_shared/meta_lic",
|
|
"out/soong/target/product/test_device/system/lib64/librust_ffi.so",
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testcases {
|
|
t.Run(tc.testName, func(t *testing.T) {
|
|
modOutputs := ctx.ModuleForTests(tc.moduleName, tc.variant).AllOutputs()
|
|
sort.Strings(tc.expectedFiles)
|
|
sort.Strings(modOutputs)
|
|
android.AssertStringPathsRelativeToTopEquals(
|
|
t,
|
|
"incorrect outputs from rust module",
|
|
ctx.Config(),
|
|
tc.expectedFiles,
|
|
modOutputs,
|
|
)
|
|
})
|
|
}
|
|
}
|