CompatMatrix::combine allow to use hal versions at higher FCM version.
Test: libvintf_test
Test: vintf_object_test
Test: vts_treble_vintf_test
Test: build compatibility matrix with device of target-level 2 (marlin),
audio 2.0 and 4.0 are now in "OR" relationship.
Bug: 74341777
Fixes: 70673533
Change-Id: I7e9eb09e846304d6cb6c0479c7e7dffaeffad9df
Merged-In: I7e9eb09e846304d6cb6c0479c7e7dffaeffad9df
diff --git a/test/LibVintfTest.cpp b/test/LibVintfTest.cpp
index 7fc4e2a..7c645c2 100644
--- a/test/LibVintfTest.cpp
+++ b/test/LibVintfTest.cpp
@@ -2209,6 +2209,56 @@
" <hal format=\"hidl\" optional=\"false\">\n"
" <name>android.hardware.foo</name>\n"
" <version>1.2-3</version>\n"
+ " <version>2.0-4</version>\n"
+ " <interface>\n"
+ " <name>IFoo</name>\n"
+ " <instance>default</instance>\n"
+ " </interface>\n"
+ " </hal>\n"
+ "</compatibility-matrix>\n");
+}
+
+TEST_F(LibVintfTest, AddOptionalHalMinorVersionDiffInstance) {
+ CompatibilityMatrix cm1;
+ CompatibilityMatrix cm2;
+ std::string error;
+ std::string xml;
+
+ xml =
+ "<compatibility-matrix version=\"1.0\" type=\"framework\" level=\"1\">\n"
+ " <hal format=\"hidl\" optional=\"false\">\n"
+ " <name>android.hardware.foo</name>\n"
+ " <version>1.0-1</version>\n"
+ " <interface>\n"
+ " <name>IFoo</name>\n"
+ " <instance>default</instance>\n"
+ " </interface>\n"
+ " </hal>\n"
+ "</compatibility-matrix>\n";
+ EXPECT_TRUE(gCompatibilityMatrixConverter(&cm1, xml))
+ << gCompatibilityMatrixConverter.lastError();
+
+ xml =
+ "<compatibility-matrix version=\"1.0\" type=\"framework\" level=\"2\">\n"
+ " <hal format=\"hidl\" optional=\"false\">\n"
+ " <name>android.hardware.foo</name>\n"
+ " <version>1.1-2</version>\n"
+ " <interface>\n"
+ " <name>IFoo</name>\n"
+ " <instance>custom</instance>\n"
+ " </interface>\n"
+ " </hal>\n"
+ "</compatibility-matrix>\n";
+ EXPECT_TRUE(gCompatibilityMatrixConverter(&cm2, xml))
+ << gCompatibilityMatrixConverter.lastError();
+
+ EXPECT_TRUE(addAllHalsAsOptional(&cm1, &cm2, &error)) << error;
+ xml = gCompatibilityMatrixConverter(cm1, SerializeFlag::HALS_ONLY);
+ EXPECT_EQ(xml,
+ "<compatibility-matrix version=\"1.0\" type=\"framework\" level=\"1\">\n"
+ " <hal format=\"hidl\" optional=\"false\">\n"
+ " <name>android.hardware.foo</name>\n"
+ " <version>1.0-1</version>\n"
" <interface>\n"
" <name>IFoo</name>\n"
" <instance>default</instance>\n"
@@ -2216,10 +2266,10 @@
" </hal>\n"
" <hal format=\"hidl\" optional=\"true\">\n"
" <name>android.hardware.foo</name>\n"
- " <version>2.0-4</version>\n"
+ " <version>1.1-2</version>\n"
" <interface>\n"
" <name>IFoo</name>\n"
- " <instance>default</instance>\n"
+ " <instance>custom</instance>\n"
" </interface>\n"
" </hal>\n"
"</compatibility-matrix>\n");