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

Commit c888460e authored by Yu Liu's avatar Yu Liu
Browse files

Support rust in aconfig mode validation.

Bug: 323071835
Test: Unit tests
Change-Id: I6de2a6fe1618e21c9aab728e6d77c6b0c6ce33df
parent b9ae285b
Loading
Loading
Loading
Loading
+151 −0
Original line number Diff line number Diff line
@@ -193,6 +193,70 @@ func TestValidationAcrossContainersExportedPass(t *testing.T) {
					mode: "exported",
				}`,
		},
		{
			name: "Rust lib passes for exported containers cross",
			bp: apex_default_bp + `
			apex {
				name: "myapex",
				manifest: ":myapex.manifest",
				androidManifest: ":myapex.androidmanifest",
				key: "myapex.key",
				native_shared_libs: ["libmy_rust_library"],
				binaries: ["my_rust_binary"],
				updatable: false,
			}
			rust_library {
				name: "libflags_rust", // test mock
				crate_name: "flags_rust",
				srcs: ["lib.rs"],
				apex_available: ["myapex"],
			}
			rust_library {
				name: "liblazy_static", // test mock
				crate_name: "lazy_static",
				srcs: ["src/lib.rs"],
				apex_available: ["myapex"],
			}
			rust_ffi_shared {
				name: "libmy_rust_library",
				srcs: ["src/lib.rs"],
				rustlibs: ["libmy_rust_aconfig_library_foo"],
				crate_name: "my_rust_library",
				apex_available: ["myapex"],
			}
			rust_binary {
				name: "my_rust_binary",
				srcs: ["foo/bar/MyClass.rs"],
				rustlibs: ["libmy_rust_aconfig_library_bar"],
				apex_available: ["myapex"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_foo",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["foo.aconfig"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_bar",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["bar.aconfig"],
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_foo",
				aconfig_declarations: "my_aconfig_declarations_foo",
				crate_name: "my_rust_aconfig_library_foo",
				apex_available: ["myapex"],
				mode: "exported",
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_bar",
				aconfig_declarations: "my_aconfig_declarations_bar",
				crate_name: "my_rust_aconfig_library_bar",
				apex_available: ["myapex"],
				mode: "exported",
			}`,
		},
	}
	for _, test := range testCases {
		t.Run(test.name, func(t *testing.T) {
@@ -393,6 +457,93 @@ func TestValidationAcrossContainersNotExportedFail(t *testing.T) {
				}`,
			expectedError: `.*my_cc_binary_foo/myapex depends on my_cc_aconfig_library_foo/otherapex/production across containers`,
		},
		{
			name: "Rust lib fails for non-exported containers cross",
			bp: apex_default_bp + `
			apex {
				name: "myapex",
				manifest: ":myapex.manifest",
				androidManifest: ":myapex.androidmanifest",
				key: "myapex.key",
				native_shared_libs: ["libmy_rust_library"],
				updatable: false,
			}
			rust_library {
				name: "libflags_rust", // test mock
				crate_name: "flags_rust",
				srcs: ["lib.rs"],
				apex_available: ["myapex"],
			}
			rust_library {
				name: "liblazy_static", // test mock
				crate_name: "lazy_static",
				srcs: ["src/lib.rs"],
				apex_available: ["myapex"],
			}
			rust_ffi_shared {
				name: "libmy_rust_library",
				srcs: ["src/lib.rs"],
				rustlibs: ["libmy_rust_aconfig_library_foo"],
				crate_name: "my_rust_library",
				apex_available: ["myapex"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_foo",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["foo.aconfig"],
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_foo",
				aconfig_declarations: "my_aconfig_declarations_foo",
				crate_name: "my_rust_aconfig_library_foo",
				apex_available: ["myapex"],
			}`,
			expectedError: `.*libmy_rust_aconfig_library_foo/myapex depends on libmy_rust_aconfig_library_foo/otherapex/production across containers`,
		},
		{
			name: "Rust binary fails for non-exported containers cross",
			bp: apex_default_bp + `
			apex {
				name: "myapex",
				manifest: ":myapex.manifest",
				androidManifest: ":myapex.androidmanifest",
				key: "myapex.key",
				binaries: ["my_rust_binary"],
				updatable: false,
			}
			rust_library {
				name: "libflags_rust", // test mock
				crate_name: "flags_rust",
				srcs: ["lib.rs"],
				apex_available: ["myapex"],
			}
			rust_library {
				name: "liblazy_static", // test mock
				crate_name: "lazy_static",
				srcs: ["src/lib.rs"],
				apex_available: ["myapex"],
			}
			rust_binary {
				name: "my_rust_binary",
				srcs: ["foo/bar/MyClass.rs"],
				rustlibs: ["libmy_rust_aconfig_library_bar"],
				apex_available: ["myapex"],
			}
			aconfig_declarations {
				name: "my_aconfig_declarations_bar",
				package: "com.example.package",
				container: "otherapex",
				srcs: ["bar.aconfig"],
			}
			rust_aconfig_library {
				name: "libmy_rust_aconfig_library_bar",
				aconfig_declarations: "my_aconfig_declarations_bar",
				crate_name: "my_rust_aconfig_library_bar",
				apex_available: ["myapex"],
			}`,
			expectedError: `.*libmy_rust_aconfig_library_bar/myapex depends on libmy_rust_aconfig_library_bar/otherapex/production across containers`,
		},
		{
			name: "Aconfig validation propagate along sourceOrOutputDependencyTag",
			bp: apex_default_bp + `
+6 −0
Original line number Diff line number Diff line
@@ -1063,6 +1063,12 @@ func (d dependencyTag) LicenseAnnotations() []android.LicenseAnnotation {
	return nil
}

func (d dependencyTag) PropagateAconfigValidation() bool {
	return d == rlibDepTag || d == sourceDepTag
}

var _ android.PropagateAconfigValidationDependencyTag = dependencyTag{}

var _ android.LicenseAnnotationsDependencyTag = dependencyTag{}

var (