Add <vendor-ndk> tag to fwk manifest and device matrix
... in place of the old <vndk> tag. The format of this tag is:
- in framework manifest: a string (a number, or VERSION_CODE during
development):
<vendor-ndk>
<version>27</version>
</vendor-ndk>
<vendor-ndk>
<version>P</version>
</vendor-ndk>
- in device matrix: same format, but only one <vendor-ndk> tag.
<vendor-ndk>
<version>27</version>
</vendor-ndk>
Test: libvintf_test
Bug: 36400653
Change-Id: If235e257026d719838076bf0e0a2b42aa8524971
diff --git a/test/LibVintfTest.cpp b/test/LibVintfTest.cpp
index af2bc67..1c2536d 100644
--- a/test/LibVintfTest.cpp
+++ b/test/LibVintfTest.cpp
@@ -39,12 +39,13 @@
extern const XmlConverter<HalManifest> &gHalManifestConverter;
extern const XmlConverter<CompatibilityMatrix> &gCompatibilityMatrixConverter;
-#ifdef LIBVINTF_HOST
-static bool Contains(const std::string& str, const std::string& sub) {
+static bool In(const std::string& sub, const std::string& str) {
return str.find(sub) != std::string::npos;
}
-#define EXPECT_CONTAINS(str, sub) \
- EXPECT_TRUE(Contains((str), (sub))) << "Cannot find \"" << (sub) << "\" in \"" << (str) << "\""
+#define EXPECT_IN(sub, str) EXPECT_TRUE(In((sub), (str))) << (str);
+
+#ifdef LIBVINTF_HOST
+#define EXPECT_CONTAINS(str, sub) EXPECT_IN(sub, str);
#endif
struct LibVintfTest : public ::testing::Test {
@@ -2282,6 +2283,112 @@
"</compatibility-matrix>\n");
}
+TEST_F(LibVintfTest, VendorNdk) {
+ CompatibilityMatrix cm;
+ std::string error;
+ std::string xml;
+
+ xml =
+ "<compatibility-matrix version=\"1.0\" type=\"device\">\n"
+ " <vendor-ndk>\n"
+ " <version>P</version>\n"
+ " <library>libbase.so</library>\n"
+ " <library>libjpeg.so</library>\n"
+ " </vendor-ndk>\n"
+ "</compatibility-matrix>\n";
+ EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml))
+ << gCompatibilityMatrixConverter.lastError();
+ EXPECT_EQ(xml, gCompatibilityMatrixConverter(cm));
+
+ {
+ HalManifest manifest;
+ xml =
+ "<manifest version=\"1.0\" type=\"framework\">\n"
+ " <vendor-ndk>\n"
+ " <version>27</version>\n"
+ " <library>libbase.so</library>\n"
+ " <library>libjpeg.so</library>\n"
+ " </vendor-ndk>\n"
+ " <vendor-ndk>\n"
+ " <version>P</version>\n"
+ " <library>libbase.so</library>\n"
+ " <library>libjpeg.so</library>\n"
+ " <library>libtinyxml2.so</library>\n"
+ " </vendor-ndk>\n"
+ "</manifest>\n";
+
+ EXPECT_TRUE(gHalManifestConverter(&manifest, xml)) << gHalManifestConverter.lastError();
+ EXPECT_EQ(xml, gHalManifestConverter(manifest));
+ EXPECT_TRUE(manifest.checkCompatibility(cm, &error)) << error;
+ }
+
+ {
+ HalManifest manifest;
+ xml =
+ "<manifest version=\"1.0\" type=\"framework\">\n"
+ " <vendor-ndk>\n"
+ " <version>27</version>\n"
+ " <library>libbase.so</library>\n"
+ " <library>libjpeg.so</library>\n"
+ " </vendor-ndk>\n"
+ "</manifest>\n";
+
+ EXPECT_TRUE(gHalManifestConverter(&manifest, xml)) << gHalManifestConverter.lastError();
+ EXPECT_EQ(xml, gHalManifestConverter(manifest));
+ EXPECT_FALSE(manifest.checkCompatibility(cm, &error));
+ EXPECT_IN("Vndk version P is not supported.", error);
+ }
+
+ {
+ HalManifest manifest;
+ xml =
+ "<manifest version=\"1.0\" type=\"framework\">\n"
+ " <vendor-ndk>\n"
+ " <version>P</version>\n"
+ " <library>libbase.so</library>\n"
+ " </vendor-ndk>\n"
+ "</manifest>\n";
+
+ EXPECT_TRUE(gHalManifestConverter(&manifest, xml)) << gHalManifestConverter.lastError();
+ EXPECT_EQ(xml, gHalManifestConverter(manifest));
+ EXPECT_FALSE(manifest.checkCompatibility(cm, &error));
+ EXPECT_IN("Vndk libs incompatible for version P.", error);
+ EXPECT_IN("libjpeg.so", error);
+ }
+}
+
+TEST_F(LibVintfTest, MissingVendorNdkInMatrix) {
+ CompatibilityMatrix cm;
+ std::string xml;
+ std::string error;
+
+ xml = "<compatibility-matrix version=\"1.0\" type=\"device\"/>\n";
+ EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml))
+ << gCompatibilityMatrixConverter.lastError();
+
+ {
+ HalManifest manifest;
+ xml = "<manifest version=\"1.0\" type=\"framework\"/>\n";
+ EXPECT_TRUE(gHalManifestConverter(&manifest, xml)) << gHalManifestConverter.lastError();
+
+ EXPECT_TRUE(manifest.checkCompatibility(cm, &error)) << error;
+ }
+
+ {
+ HalManifest manifest;
+ xml =
+ "<manifest version=\"1.0\" type=\"framework\">\n"
+ " <vendor-ndk>\n"
+ " <version>P</version>\n"
+ " <library>libbase.so</library>\n"
+ " </vendor-ndk>\n"
+ "</manifest>\n";
+ EXPECT_TRUE(gHalManifestConverter(&manifest, xml)) << gHalManifestConverter.lastError();
+
+ EXPECT_TRUE(manifest.checkCompatibility(cm, &error)) << error;
+ }
+}
+
} // namespace vintf
} // namespace android