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

Commit b2407fea authored by Satish Yalla's avatar Satish Yalla Committed by Automerger Merge Worker
Browse files

Merge "Revert "Implement detecting container violations."" into main am: f2d6e500

parents 30f37956 f2d6e500
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@ package android

import (
	"fmt"
	"reflect"
	"slices"
	"sort"
	"strconv"
@@ -146,17 +145,6 @@ func (i ApexInfo) InApexModule(apexModuleName string) bool {
	return false
}

// To satisfy the comparable interface
func (i ApexInfo) Equal(other any) bool {
	otherApexInfo, ok := other.(ApexInfo)
	return ok && i.ApexVariationName == otherApexInfo.ApexVariationName &&
		i.MinSdkVersion == otherApexInfo.MinSdkVersion &&
		i.Updatable == otherApexInfo.Updatable &&
		i.UsePlatformApis == otherApexInfo.UsePlatformApis &&
		reflect.DeepEqual(i.InApexVariants, otherApexInfo.InApexVariants) &&
		reflect.DeepEqual(i.InApexModules, otherApexInfo.InApexModules)
}

// ApexTestForInfo stores the contents of APEXes for which this module is a test - although this
// module is not part of the APEX - and thus has access to APEX internals.
type ApexTestForInfo struct {
+0 −65
Original line number Diff line number Diff line
@@ -15,10 +15,8 @@
package android

import (
	"fmt"
	"reflect"
	"slices"
	"strings"

	"github.com/google/blueprint"
)
@@ -397,40 +395,6 @@ func (c *ContainersInfo) UpdatableApex() bool {

var ContainersInfoProvider = blueprint.NewProvider[ContainersInfo]()

func satisfyAllowedExceptions(ctx ModuleContext, allowedExceptionLabels []exceptionHandleFuncLabel, m, dep Module) bool {
	for _, label := range allowedExceptionLabels {
		if exceptionHandleFunctionsTable[label](ctx, m, dep) {
			return true
		}
	}
	return false
}

func (c *ContainersInfo) GetViolations(mctx ModuleContext, m, dep Module, depInfo ContainersInfo) []string {
	var violations []string

	// Any containers that the module belongs to but the dependency does not belong to must be examined.
	_, containersUniqueToModule, _ := ListSetDifference(c.belongingContainers, depInfo.belongingContainers)

	// Apex container should be examined even if both the module and the dependency belong to
	// the apex container to check that the two modules belong to the same apex.
	if InList(ApexContainer, c.belongingContainers) && !InList(ApexContainer, containersUniqueToModule) {
		containersUniqueToModule = append(containersUniqueToModule, ApexContainer)
	}

	for _, containerUniqueToModule := range containersUniqueToModule {
		for _, restriction := range containerUniqueToModule.restricted {
			if InList(restriction.dependency, depInfo.belongingContainers) {
				if !satisfyAllowedExceptions(mctx, restriction.allowedExceptions, m, dep) {
					violations = append(violations, restriction.errorMessage)
				}
			}
		}
	}

	return violations
}

func generateContainerInfo(ctx ModuleContext) ContainersInfo {
	var containers []*container

@@ -472,32 +436,3 @@ func setContainerInfo(ctx ModuleContext) {
		SetProvider(ctx, ContainersInfoProvider, containersInfo)
	}
}

func checkContainerViolations(ctx ModuleContext) {
	if _, ok := ctx.Module().(InstallableModule); ok {
		containersInfo, _ := getContainerModuleInfo(ctx, ctx.Module())
		ctx.VisitDirectDepsIgnoreBlueprint(func(dep Module) {
			if !dep.Enabled(ctx) {
				return
			}

			// Pre-existing violating dependencies are tracked in containerDependencyViolationAllowlist.
			// If this dependency is allowlisted, do not check for violation.
			// If not, check if this dependency matches any restricted dependency and
			// satisfies any exception functions, which allows bypassing the
			// restriction. If all of the exceptions are not satisfied, throw an error.
			if depContainersInfo, ok := getContainerModuleInfo(ctx, dep); ok {
				if allowedViolations, ok := ContainerDependencyViolationAllowlist[ctx.ModuleName()]; ok && InList(dep.Name(), allowedViolations) {
					return
				} else {
					violations := containersInfo.GetViolations(ctx, ctx.Module(), dep, depContainersInfo)
					if len(violations) > 0 {
						errorMessage := fmt.Sprintf("%s cannot depend on %s. ", ctx.ModuleName(), dep.Name())
						errorMessage += strings.Join(violations, " ")
						ctx.ModuleErrorf(errorMessage)
					}
				}
			}
		})
	}
}
+0 −3
Original line number Diff line number Diff line
@@ -1778,9 +1778,6 @@ func (m *ModuleBase) GenerateBuildActions(blueprintCtx blueprint.ModuleContext)
	}

	setContainerInfo(ctx)
	if ctx.Config().Getenv("DISABLE_CONTAINER_CHECK") != "true" {
		checkContainerViolations(ctx)
	}

	ctx.licenseMetadataFile = PathForModuleOut(ctx, "meta_lic")

+0 −12
Original line number Diff line number Diff line
@@ -74,8 +74,6 @@ func TestValidationAcrossContainersExportedPass(t *testing.T) {
					apex_available: [
						"myapex",
					],
					sdk_version: "none",
					system_modules: "none",
				}`,
		},
		{
@@ -124,8 +122,6 @@ func TestValidationAcrossContainersExportedPass(t *testing.T) {
					apex_available: [
						"myapex",
					],
					sdk_version: "none",
					system_modules: "none",
				}`,
		},
		{
@@ -349,8 +345,6 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) {
					apex_available: [
						"myapex",
					],
					sdk_version: "none",
					system_modules: "none",
				}`,
			expectedError: `.*my_java_library_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`,
		},
@@ -398,8 +392,6 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) {
					apex_available: [
						"myapex",
					],
					sdk_version: "none",
					system_modules: "none",
				}`,
			expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`,
		},
@@ -701,8 +693,6 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) {
					apex_available: [
						"myapex",
					],
					sdk_version: "none",
					system_modules: "none",
				}`,
			expectedError: `.*my_android_app_foo/myapex depends on my_java_aconfig_library_foo/otherapex/production across containers`,
		},
@@ -779,8 +769,6 @@ func TestValidationNotPropagateAcrossShared(t *testing.T) {
					apex_available: [
						"myapex",
					],
					sdk_version: "none",
					system_modules: "none",
				}`,
		},
	}
+4 −59
Original line number Diff line number Diff line
@@ -4929,7 +4929,6 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
		java_import {
			name: "libfoo",
			jars: ["libfoo.jar"],
			sdk_version: "core_current",
		}

		java_sdk_library_import {
@@ -4970,22 +4969,6 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
	t.Run("prebuilt with source preferred", func(t *testing.T) {

		bp := `
		apex {
			name: "myapex",
			key: "myapex.key",
			updatable: false,
			java_libs: [
				"libfoo",
				"libbar",
			],
		}

		apex_key {
			name: "myapex.key",
			public_key: "testkey.avbpubkey",
			private_key: "testkey.pem",
		}

		prebuilt_apex {
			name: "myapex",
			arch: {
@@ -5002,21 +4985,10 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
		java_import {
			name: "libfoo",
			jars: ["libfoo.jar"],
			apex_available: [
				"myapex",
			],
			compile_dex: true,
			sdk_version: "core_current",
		}

		java_library {
			name: "libfoo",
			srcs: ["foo/bar/MyClass.java"],
			apex_available: [
				"myapex",
			],
			compile_dex: true,
			sdk_version: "core_current",
		}

		java_sdk_library_import {
@@ -5024,21 +4996,12 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {
			public: {
				jars: ["libbar.jar"],
			},
			apex_available: [
				"myapex",
			],
			compile_dex: true,
		}

		java_sdk_library {
			name: "libbar",
			srcs: ["foo/bar/MyClass.java"],
			unsafe_ignore_missing_latest_api: true,
			apex_available: [
				"myapex",
			],
			compile_dex: true,
			sdk_version: "core_current",
		}
	`

@@ -5047,9 +5010,11 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {

		checkDexJarBuildPath(t, ctx, "prebuilt_libfoo")
		checkDexJarInstallPath(t, ctx, "prebuilt_libfoo")
		ensureNoSourceVariant(t, ctx, "libfoo")

		checkDexJarBuildPath(t, ctx, "prebuilt_libbar")
		checkDexJarInstallPath(t, ctx, "prebuilt_libbar")
		ensureNoSourceVariant(t, ctx, "libbar")
	})

	t.Run("prebuilt preferred with source", func(t *testing.T) {
@@ -5075,7 +5040,6 @@ func TestPrebuiltExportDexImplementationJars(t *testing.T) {

		java_library {
			name: "libfoo",
			sdk_version: "core_current",
		}

		java_sdk_library_import {
@@ -5202,7 +5166,6 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
			jars: ["libfoo.jar"],
			apex_available: ["myapex"],
			permitted_packages: ["foo"],
			sdk_version: "core_current",
		}

		java_sdk_library_import {
@@ -5357,14 +5320,12 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
			name: "libfoo",
			jars: ["libfoo.jar"],
			apex_available: ["myapex"],
			sdk_version: "core_current",
		}

		java_library {
			name: "libfoo",
			srcs: ["foo/bar/MyClass.java"],
			apex_available: ["myapex"],
			sdk_version: "core_current",
		}

		java_sdk_library_import {
@@ -5456,7 +5417,6 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
			jars: ["libfoo.jar"],
			apex_available: ["myapex"],
			permitted_packages: ["foo"],
			sdk_version: "core_current",
		}

		java_library {
@@ -5464,7 +5424,6 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
			srcs: ["foo/bar/MyClass.java"],
			apex_available: ["myapex"],
			installable: true,
			sdk_version: "core_current",
		}

		java_sdk_library_import {
@@ -5555,7 +5514,6 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
			name: "libfoo",
			jars: ["libfoo.jar"],
			apex_available: ["myapex"],
			sdk_version: "core_current",
		}

		java_library {
@@ -5564,7 +5522,6 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
			apex_available: ["myapex"],
			permitted_packages: ["foo"],
			installable: true,
			sdk_version: "core_current",
		}

		java_sdk_library_import {
@@ -5583,7 +5540,6 @@ func TestBootDexJarsFromSourcesAndPrebuilts(t *testing.T) {
			apex_available: ["myapex"],
			permitted_packages: ["bar"],
			compile_dex: true,
			sdk_version: "core_current",
		}
	`

@@ -6178,7 +6134,6 @@ func TestApexWithTestHelperApp(t *testing.T) {
			name: "TesterHelpAppFoo",
			srcs: ["foo/bar/MyClass.java"],
			apex_available: [ "myapex" ],
			sdk_version: "test_current",
		}

	`)
@@ -7781,7 +7736,7 @@ func TestSymlinksFromApexToSystem(t *testing.T) {
			srcs: ["foo/bar/MyClass.java"],
			sdk_version: "none",
			system_modules: "none",
			static_libs: ["myotherjar"],
			libs: ["myotherjar"],
			apex_available: [
				"myapex",
				"myapex.updatable",
@@ -8442,7 +8397,6 @@ func TestUpdatable_should_not_set_generate_classpaths_proto(t *testing.T) {
			apex_available: [
				"myapex",
			],
			sdk_version: "current",
		}

		systemserverclasspath_fragment {
@@ -9485,7 +9439,6 @@ func TestApexJavaCoverage(t *testing.T) {
			srcs: ["mybootclasspathlib.java"],
			apex_available: ["myapex"],
			compile_dex: true,
			sdk_version: "current",
		}

		systemserverclasspath_fragment {
@@ -9801,7 +9754,6 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) {
				unsafe_ignore_missing_latest_api: true,
				min_sdk_version: "31",
				static_libs: ["util"],
				sdk_version: "core_current",
			}

			java_library {
@@ -9810,7 +9762,6 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) {
				apex_available: ["myapex"],
				min_sdk_version: "31",
				static_libs: ["another_util"],
				sdk_version: "core_current",
			}

			java_library {
@@ -9818,7 +9769,6 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) {
                srcs: ["a.java"],
				min_sdk_version: "31",
				apex_available: ["myapex"],
				sdk_version: "core_current",
			}
		`)
	})
@@ -9874,7 +9824,7 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) {
	})

	t.Run("bootclasspath_fragment jar must set min_sdk_version", func(t *testing.T) {
		preparer.
		preparer.ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(`module "mybootclasspathlib".*must set min_sdk_version`)).
			RunTestWithBp(t, `
				apex {
					name: "myapex",
@@ -9905,8 +9855,6 @@ func TestSdkLibraryCanHaveHigherMinSdkVersion(t *testing.T) {
					apex_available: ["myapex"],
					compile_dex: true,
					unsafe_ignore_missing_latest_api: true,
					sdk_version: "current",
					min_sdk_version: "30",
				}
		`)
	})
@@ -10159,9 +10107,6 @@ func TestApexLintBcpFragmentSdkLibDeps(t *testing.T) {
			key: "myapex.key",
			bootclasspath_fragments: ["mybootclasspathfragment"],
			min_sdk_version: "29",
			java_libs: [
				"jacocoagent",
			],
		}
		apex_key {
			name: "myapex.key",
Loading