Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 683d7316 authored by Kiyoung Kim's avatar Kiyoung Kim Committed by Gerrit Code Review
Browse files

Merge "Remove VNDK information from Rust, etc, and sysprop tests" into main

parents e8abc238 1db4a74a
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ import (
func TestRustAconfigLibrary(t *testing.T) {
	result := android.GroupFixturePreparers(
		PrepareForTestWithAconfigBuildComponents,
		rust.PrepareForTestWithRustIncludeVndk,
		rust.PrepareForIntegrationTestWithRust,
		android.PrepareForTestWithArchMutator,
		android.PrepareForTestWithDefaults,
		android.PrepareForTestWithPrebuilts,
@@ -100,7 +100,7 @@ func testRustCodegenModeHelper(t *testing.T, bpMode string, ruleMode string) {
	t.Helper()
	result := android.GroupFixturePreparers(
		PrepareForTestWithAconfigBuildComponents,
		rust.PrepareForTestWithRustIncludeVndk).
		rust.PrepareForIntegrationTestWithRust).
		ExtendWithErrorHandler(android.FixtureExpectsNoErrors).
		RunTestWithBp(t, fmt.Sprintf(`
			rust_library {
@@ -162,7 +162,7 @@ func testIncorrectRustCodegenModeHelper(t *testing.T, bpMode string, err string)
	t.Helper()
	android.GroupFixturePreparers(
		PrepareForTestWithAconfigBuildComponents,
		rust.PrepareForTestWithRustIncludeVndk).
		rust.PrepareForIntegrationTestWithRust).
		ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern(err)).
		RunTestWithBp(t, fmt.Sprintf(`
			rust_library {
+0 −121
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
package etc

import (
	"fmt"
	"os"
	"path/filepath"
	"testing"
@@ -23,7 +22,6 @@ import (
	"github.com/google/blueprint/proptools"

	"android/soong/android"
	"android/soong/snapshot"
)

func TestMain(m *testing.M) {
@@ -40,18 +38,6 @@ var prepareForPrebuiltEtcTest = android.GroupFixturePreparers(
	}),
)

var prepareForPrebuiltEtcSnapshotTest = android.GroupFixturePreparers(
	prepareForPrebuiltEtcTest,
	android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) {
		snapshot.VendorSnapshotImageSingleton.Init(ctx)
		snapshot.RecoverySnapshotImageSingleton.Init(ctx)
	}),
	android.FixtureModifyConfig(func(config android.Config) {
		config.TestProductVariables.DeviceVndkVersion = proptools.StringPtr("current")
		config.TestProductVariables.RecoverySnapshotVersion = proptools.StringPtr("current")
	}),
)

func TestPrebuiltEtcVariants(t *testing.T) {
	result := prepareForPrebuiltEtcTest.RunTestWithBp(t, `
		prebuilt_etc {
@@ -415,110 +401,3 @@ func TestPrebuiltRFSADirPath(t *testing.T) {
		})
	}
}

func checkIfSnapshotTaken(t *testing.T, result *android.TestResult, image string, moduleName string) {
	checkIfSnapshotExistAsExpected(t, result, image, moduleName, true)
}

func checkIfSnapshotNotTaken(t *testing.T, result *android.TestResult, image string, moduleName string) {
	checkIfSnapshotExistAsExpected(t, result, image, moduleName, false)
}

func checkIfSnapshotExistAsExpected(t *testing.T, result *android.TestResult, image string, moduleName string, expectToExist bool) {
	snapshotSingleton := result.SingletonForTests(image + "-snapshot")
	archType := "arm64"
	archVariant := "armv8-a"
	archDir := fmt.Sprintf("arch-%s", archType)

	snapshotDir := fmt.Sprintf("%s-snapshot", image)
	snapshotVariantPath := filepath.Join(snapshotDir, archType)
	outputDir := filepath.Join(snapshotVariantPath, archDir, "etc")
	imageVariant := ""
	if image == "recovery" {
		imageVariant = "recovery_"
	}
	mod := result.ModuleForTests(moduleName, fmt.Sprintf("android_%s%s_%s", imageVariant, archType, archVariant))
	outputFiles := mod.OutputFiles(t, "")
	if len(outputFiles) != 1 {
		t.Errorf("%q must have single output\n", moduleName)
		return
	}
	snapshotPath := filepath.Join(outputDir, moduleName)

	if expectToExist {
		out := snapshotSingleton.Output(snapshotPath)

		if out.Input.String() != outputFiles[0].String() {
			t.Errorf("The input of snapshot %q must be %q, but %q", "prebuilt_vendor", out.Input.String(), outputFiles[0])
		}

		snapshotJsonPath := snapshotPath + ".json"

		if snapshotSingleton.MaybeOutput(snapshotJsonPath).Rule == nil {
			t.Errorf("%q expected but not found", snapshotJsonPath)
		}
	} else {
		out := snapshotSingleton.MaybeOutput(snapshotPath)
		if out.Rule != nil {
			t.Errorf("There must be no rule for module %q output file %q", moduleName, outputFiles[0])
		}
	}
}

func TestPrebuiltTakeSnapshot(t *testing.T) {
	var testBp = `
	prebuilt_etc {
		name: "prebuilt_vendor",
		src: "foo.conf",
		vendor: true,
	}

	prebuilt_etc {
		name: "prebuilt_vendor_indirect",
		src: "foo.conf",
		vendor: true,
	}

	prebuilt_etc {
		name: "prebuilt_recovery",
		src: "bar.conf",
		recovery: true,
	}

	prebuilt_etc {
		name: "prebuilt_recovery_indirect",
		src: "bar.conf",
		recovery: true,
	}
	`

	t.Run("prebuilt: vendor and recovery snapshot", func(t *testing.T) {
		result := prepareForPrebuiltEtcSnapshotTest.RunTestWithBp(t, testBp)

		checkIfSnapshotTaken(t, result, "vendor", "prebuilt_vendor")
		checkIfSnapshotTaken(t, result, "vendor", "prebuilt_vendor_indirect")
		checkIfSnapshotTaken(t, result, "recovery", "prebuilt_recovery")
		checkIfSnapshotTaken(t, result, "recovery", "prebuilt_recovery_indirect")
	})

	t.Run("prebuilt: directed snapshot", func(t *testing.T) {
		prepareForPrebuiltEtcDirectedSnapshotTest := android.GroupFixturePreparers(
			prepareForPrebuiltEtcSnapshotTest,
			android.FixtureModifyConfig(func(config android.Config) {
				config.TestProductVariables.DirectedVendorSnapshot = true
				config.TestProductVariables.VendorSnapshotModules = make(map[string]bool)
				config.TestProductVariables.VendorSnapshotModules["prebuilt_vendor"] = true
				config.TestProductVariables.DirectedRecoverySnapshot = true
				config.TestProductVariables.RecoverySnapshotModules = make(map[string]bool)
				config.TestProductVariables.RecoverySnapshotModules["prebuilt_recovery"] = true
			}),
		)

		result := prepareForPrebuiltEtcDirectedSnapshotTest.RunTestWithBp(t, testBp)

		checkIfSnapshotTaken(t, result, "vendor", "prebuilt_vendor")
		checkIfSnapshotNotTaken(t, result, "vendor", "prebuilt_vendor_indirect")
		checkIfSnapshotTaken(t, result, "recovery", "prebuilt_recovery")
		checkIfSnapshotNotTaken(t, result, "recovery", "prebuilt_recovery_indirect")
	})
}
+8 −8
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ import (

// Test that cc modules can link against vendor_available rust_ffi_static libraries.
func TestVendorLinkage(t *testing.T) {
	ctx := testRustVndk(t, `
	ctx := testRust(t, `
			cc_binary {
				name: "fizz_vendor",
				static_libs: ["libfoo_vendor"],
@@ -38,7 +38,7 @@ func TestVendorLinkage(t *testing.T) {
			}
		`)

	vendorBinary := ctx.ModuleForTests("fizz_vendor", "android_vendor.29_arm64_armv8-a").Module().(*cc.Module)
	vendorBinary := ctx.ModuleForTests("fizz_vendor", "android_vendor_arm64_armv8-a").Module().(*cc.Module)

	if !android.InList("libfoo_vendor.vendor", vendorBinary.Properties.AndroidMkStaticLibs) {
		t.Errorf("vendorBinary should have a dependency on libfoo_vendor: %#v", vendorBinary.Properties.AndroidMkStaticLibs)
@@ -46,8 +46,8 @@ func TestVendorLinkage(t *testing.T) {
}

// Test that variants which use the vndk emit the appropriate cfg flag.
func TestImageVndkCfgFlag(t *testing.T) {
	ctx := testRustVndk(t, `
func TestImageCfgFlag(t *testing.T) {
	ctx := testRust(t, `
			rust_ffi_static {
				name: "libfoo",
				crate_name: "foo",
@@ -57,7 +57,7 @@ func TestImageVndkCfgFlag(t *testing.T) {
			}
		`)

	vendor := ctx.ModuleForTests("libfoo", "android_vendor.29_arm64_armv8-a_static").Rule("rustc")
	vendor := ctx.ModuleForTests("libfoo", "android_vendor_arm64_armv8-a_static").Rule("rustc")

	if !strings.Contains(vendor.Args["rustcFlags"], "--cfg 'android_vndk'") {
		t.Errorf("missing \"--cfg 'android_vndk'\" for libfoo vendor variant, rustcFlags: %#v", vendor.Args["rustcFlags"])
@@ -69,7 +69,7 @@ func TestImageVndkCfgFlag(t *testing.T) {
		t.Errorf("unexpected \"--cfg 'android_product'\" for libfoo vendor variant, rustcFlags: %#v", vendor.Args["rustcFlags"])
	}

	product := ctx.ModuleForTests("libfoo", "android_product.29_arm64_armv8-a_static").Rule("rustc")
	product := ctx.ModuleForTests("libfoo", "android_product_arm64_armv8-a_static").Rule("rustc")
	if !strings.Contains(product.Args["rustcFlags"], "--cfg 'android_vndk'") {
		t.Errorf("missing \"--cfg 'android_vndk'\" for libfoo product variant, rustcFlags: %#v", product.Args["rustcFlags"])
	}
@@ -95,7 +95,7 @@ func TestImageVndkCfgFlag(t *testing.T) {

// Test that cc modules can link against vendor_ramdisk_available rust_ffi_static libraries.
func TestVendorRamdiskLinkage(t *testing.T) {
	ctx := testRustVndk(t, `
	ctx := testRust(t, `
			cc_library_static {
				name: "libcc_vendor_ramdisk",
				static_libs: ["libfoo_vendor_ramdisk"],
@@ -119,7 +119,7 @@ func TestVendorRamdiskLinkage(t *testing.T) {

// Test that prebuilt libraries cannot be made vendor available.
func TestForbiddenVendorLinkage(t *testing.T) {
	testRustVndkError(t, "Rust prebuilt modules not supported for non-system images.", `
	testRustError(t, "Rust prebuilt modules not supported for non-system images.", `
		rust_prebuilt_library {
			name: "librust_prebuilt",
			crate_name: "rust_prebuilt",
+7 −71
Original line number Diff line number Diff line
@@ -37,11 +37,7 @@ var prepareForRustTest = android.GroupFixturePreparers(

	genrule.PrepareForTestWithGenRuleBuildComponents,

	PrepareForTestWithRustIncludeVndk,
	android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
		variables.DeviceVndkVersion = StringPtr("current")
		variables.Platform_vndk_version = StringPtr("29")
	}),
	PrepareForIntegrationTestWithRust,
)

var rustMockedFiles = android.MockFS{
@@ -73,60 +69,21 @@ func testRust(t *testing.T, bp string) *android.TestContext {
	return result.TestContext
}

func testRustVndk(t *testing.T, bp string) *android.TestContext {
	return testRustVndkFs(t, bp, rustMockedFiles)
}

const (
	sharedVendorVariant        = "android_vendor.29_arm64_armv8-a_shared"
	rlibVendorVariant          = "android_vendor.29_arm64_armv8-a_rlib_rlib-std"
	rlibDylibStdVendorVariant  = "android_vendor.29_arm64_armv8-a_rlib_rlib-std"
	dylibVendorVariant         = "android_vendor.29_arm64_armv8-a_dylib"
	sharedVendorVariant        = "android_vendor_arm64_armv8-a_shared"
	rlibVendorVariant          = "android_vendor_arm64_armv8-a_rlib_rlib-std"
	rlibDylibStdVendorVariant  = "android_vendor_arm64_armv8-a_rlib_rlib-std"
	dylibVendorVariant         = "android_vendor_arm64_armv8-a_dylib"
	sharedRecoveryVariant      = "android_recovery_arm64_armv8-a_shared"
	rlibRecoveryVariant        = "android_recovery_arm64_armv8-a_rlib_dylib-std"
	rlibRlibStdRecoveryVariant = "android_recovery_arm64_armv8-a_rlib_rlib-std"
	dylibRecoveryVariant       = "android_recovery_arm64_armv8-a_dylib"
	binaryCoreVariant          = "android_arm64_armv8-a"
	binaryVendorVariant        = "android_vendor.29_arm64_armv8-a"
	binaryProductVariant       = "android_product.29_arm64_armv8-a"
	binaryVendorVariant        = "android_vendor_arm64_armv8-a"
	binaryProductVariant       = "android_product_arm64_armv8-a"
	binaryRecoveryVariant      = "android_recovery_arm64_armv8-a"
)

func testRustVndkFs(t *testing.T, bp string, fs android.MockFS) *android.TestContext {
	return testRustVndkFsVersions(t, bp, fs, "current", "current", "29")
}

func testRustVndkFsVersions(t *testing.T, bp string, fs android.MockFS, device_version, product_version, vndk_version string) *android.TestContext {
	skipTestIfOsNotSupported(t)
	result := android.GroupFixturePreparers(
		prepareForRustTest,
		fs.AddToFixture(),
		android.FixtureModifyProductVariables(
			func(variables android.FixtureProductVariables) {
				variables.DeviceVndkVersion = StringPtr(device_version)
				variables.Platform_vndk_version = StringPtr(vndk_version)
			},
		),
	).RunTestWithBp(t, bp)
	return result.TestContext
}

func testRustRecoveryFsVersions(t *testing.T, bp string, fs android.MockFS, device_version, vndk_version, recovery_version string) *android.TestContext {
	skipTestIfOsNotSupported(t)
	result := android.GroupFixturePreparers(
		prepareForRustTest,
		fs.AddToFixture(),
		android.FixtureModifyProductVariables(
			func(variables android.FixtureProductVariables) {
				variables.DeviceVndkVersion = StringPtr(device_version)
				variables.RecoverySnapshotVersion = StringPtr(recovery_version)
				variables.Platform_vndk_version = StringPtr(vndk_version)
			},
		),
	).RunTestWithBp(t, bp)
	return result.TestContext
}

// testRustCov returns a TestContext in which a basic environment has been
// setup. This environment explicitly enables coverage.
func testRustCov(t *testing.T, bp string) *android.TestContext {
@@ -158,27 +115,6 @@ func testRustError(t *testing.T, pattern string, bp string) {
		RunTestWithBp(t, bp)
}

// testRustVndkError is similar to testRustError, but can be used to test VNDK-related errors.
func testRustVndkError(t *testing.T, pattern string, bp string) {
	testRustVndkFsError(t, pattern, bp, rustMockedFiles)
}

func testRustVndkFsError(t *testing.T, pattern string, bp string, fs android.MockFS) {
	skipTestIfOsNotSupported(t)
	android.GroupFixturePreparers(
		prepareForRustTest,
		fs.AddToFixture(),
		android.FixtureModifyProductVariables(
			func(variables android.FixtureProductVariables) {
				variables.DeviceVndkVersion = StringPtr("current")
				variables.Platform_vndk_version = StringPtr("VER")
			},
		),
	).
		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(pattern)).
		RunTestWithBp(t, bp)
}

// testRustCtx is used to build a particular test environment. Unless your
// tests requires a specific setup, prefer the wrapping functions: testRust,
// testRustCov or testRustError.
+0 −4
Original line number Diff line number Diff line
@@ -43,10 +43,6 @@ var PrepareForTestWithRustDefaultModules = android.GroupFixturePreparers(
// Preparer that will allow use of all rust modules fully.
var PrepareForIntegrationTestWithRust = android.GroupFixturePreparers(
	PrepareForTestWithRustDefaultModules,
)

var PrepareForTestWithRustIncludeVndk = android.GroupFixturePreparers(
	PrepareForIntegrationTestWithRust,
	cc.PrepareForIntegrationTestWithCc,
)

Loading