diff options
author | Yifan Hong | 2017-08-23 16:46:44 -0500 |
---|---|---|
committer | Yifan Hong | 2017-08-24 12:16:04 -0500 |
commit | 45e5f72a1433f385afcda5ebf28c38a4010f8fda (patch) | |
tree | 7d0803c3f6242ab0c205c88298c214345e57ebb7 | |
parent | 734a3394faffd042b99c520963f78d3084f2e56e (diff) | |
download | platform-system-libvintf-45e5f72a1433f385afcda5ebf28c38a4010f8fda.tar.gz platform-system-libvintf-45e5f72a1433f385afcda5ebf28c38a4010f8fda.tar.xz platform-system-libvintf-45e5f72a1433f385afcda5ebf28c38a4010f8fda.zip |
Add tests for kernel config fragments in fwk comp mat.
Test: libvintf_test
Bug: 64124223
Change-Id: I04f3332c84ec9e9c025079f6f83e2573dab27a81
Merged-In: I04f3332c84ec9e9c025079f6f83e2573dab27a81
-rw-r--r-- | test/main.cpp | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/test/main.cpp b/test/main.cpp index d8cfaf3..94a4d8e 100644 --- a/test/main.cpp +++ b/test/main.cpp | |||
@@ -100,6 +100,7 @@ public: | |||
100 | bool isValid(const ManifestHal &mh) { | 100 | bool isValid(const ManifestHal &mh) { |
101 | return mh.isValid(); | 101 | return mh.isValid(); |
102 | } | 102 | } |
103 | std::vector<MatrixKernel>& getKernels(CompatibilityMatrix& cm) { return cm.framework.mKernels; } | ||
103 | 104 | ||
104 | std::map<std::string, HalInterface> testHalInterfaces() { | 105 | std::map<std::string, HalInterface> testHalInterfaces() { |
105 | HalInterface intf; | 106 | HalInterface intf; |
@@ -709,6 +710,12 @@ TEST_F(LibVintfTest, RuntimeInfo) { | |||
709 | } | 710 | } |
710 | 711 | ||
711 | { | 712 | { |
713 | MatrixKernel kernel(KernelVersion{3, 18, 60}, KernelConfigs(configs)); | ||
714 | CompatibilityMatrix cm = testMatrix(std::move(kernel)); | ||
715 | EXPECT_FALSE(ki.checkCompatibility(cm)) << "Kernel version shouldn't match"; | ||
716 | } | ||
717 | |||
718 | { | ||
712 | MatrixKernel kernel(KernelVersion{3, 18, 22}, KernelConfigs(configs)); | 719 | MatrixKernel kernel(KernelVersion{3, 18, 22}, KernelConfigs(configs)); |
713 | CompatibilityMatrix cm = testMatrix(std::move(kernel)); | 720 | CompatibilityMatrix cm = testMatrix(std::move(kernel)); |
714 | EXPECT_TRUE(ki.checkCompatibility(cm, &error)) << error; | 721 | EXPECT_TRUE(ki.checkCompatibility(cm, &error)) << error; |
@@ -1534,6 +1541,366 @@ TEST_F(LibVintfTest, NetutilsWrapperManifest) { | |||
1534 | #endif // LIBVINTF_HOST | 1541 | #endif // LIBVINTF_HOST |
1535 | } | 1542 | } |
1536 | 1543 | ||
1544 | TEST_F(LibVintfTest, KernelConfigConditionTest) { | ||
1545 | std::string xml = | ||
1546 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1547 | " <kernel version=\"3.18.22\"/>\n" | ||
1548 | " <kernel version=\"3.18.22\">\n" | ||
1549 | " <conditions>\n" | ||
1550 | " <config>\n" | ||
1551 | " <key>CONFIG_ARM</key>\n" | ||
1552 | " <value type=\"tristate\">y</value>\n" | ||
1553 | " </config>\n" | ||
1554 | " </conditions>\n" | ||
1555 | " <config>\n" | ||
1556 | " <key>CONFIG_FOO</key>\n" | ||
1557 | " <value type=\"tristate\">y</value>\n" | ||
1558 | " </config>\n" | ||
1559 | " </kernel>\n" | ||
1560 | " <sepolicy>\n" | ||
1561 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1562 | " <sepolicy-version>25.0</sepolicy-version>\n" | ||
1563 | " </sepolicy>\n" | ||
1564 | " <avb>\n" | ||
1565 | " <vbmeta-version>2.1</vbmeta-version>\n" | ||
1566 | " </avb>\n" | ||
1567 | "</compatibility-matrix>\n"; | ||
1568 | |||
1569 | CompatibilityMatrix cm; | ||
1570 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1571 | << gCompatibilityMatrixConverter.lastError(); | ||
1572 | const auto& kernels = getKernels(cm); | ||
1573 | ASSERT_GE(kernels.size(), 2u); | ||
1574 | ASSERT_TRUE(kernels[0].conditions().empty()); | ||
1575 | const auto& kernel = kernels[1]; | ||
1576 | const auto& cond = kernel.conditions(); | ||
1577 | ASSERT_FALSE(cond.empty()); | ||
1578 | EXPECT_EQ("CONFIG_ARM", cond.begin()->first); | ||
1579 | EXPECT_EQ(KernelConfigTypedValue(Tristate::YES), cond.begin()->second); | ||
1580 | EXPECT_FALSE(kernel.configs().empty()); | ||
1581 | |||
1582 | EXPECT_EQ(xml, gCompatibilityMatrixConverter(cm)); | ||
1583 | } | ||
1584 | |||
1585 | TEST_F(LibVintfTest, KernelConfigConditionEmptyTest) { | ||
1586 | std::string xml = | ||
1587 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1588 | " <kernel version=\"4.4.0\"/>\n" | ||
1589 | " <kernel version=\"3.18.22\">\n" | ||
1590 | " <conditions>\n" | ||
1591 | " <config>\n" | ||
1592 | " <key>CONFIG_ARM</key>\n" | ||
1593 | " <value type=\"tristate\">y</value>\n" | ||
1594 | " </config>\n" | ||
1595 | " </conditions>\n" | ||
1596 | " </kernel>\n" | ||
1597 | "</compatibility-matrix>\n"; | ||
1598 | |||
1599 | CompatibilityMatrix cm; | ||
1600 | EXPECT_FALSE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1601 | << "Should not accept first kernel version with non-empty conditions"; | ||
1602 | EXPECT_EQ( | ||
1603 | "First <kernel> for version 3.18 must have empty <conditions> " | ||
1604 | "for backwards compatibility.", | ||
1605 | gCompatibilityMatrixConverter.lastError()); | ||
1606 | } | ||
1607 | |||
1608 | TEST_F(LibVintfTest, KernelConfigConditionMatch) { | ||
1609 | RuntimeInfo runtime = testRuntimeInfo(); | ||
1610 | std::string error; | ||
1611 | std::string xml; | ||
1612 | CompatibilityMatrix cm; | ||
1613 | |||
1614 | xml = | ||
1615 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1616 | " <kernel version=\"3.18.22\"/>\n" | ||
1617 | " <kernel version=\"3.18.22\">\n" | ||
1618 | " <conditions>\n" | ||
1619 | " <config>\n" | ||
1620 | " <key>CONFIG_64BIT</key>\n" | ||
1621 | " <value type=\"tristate\">y</value>\n" | ||
1622 | " </config>\n" | ||
1623 | " </conditions>\n" | ||
1624 | " <config>\n" | ||
1625 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1626 | " <value type=\"int\">24</value>\n" | ||
1627 | " </config>\n" | ||
1628 | " </kernel>\n" | ||
1629 | " <sepolicy>\n" | ||
1630 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1631 | " </sepolicy>\n" | ||
1632 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1633 | "</compatibility-matrix>\n"; | ||
1634 | |||
1635 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1636 | << gCompatibilityMatrixConverter.lastError(); | ||
1637 | EXPECT_TRUE(runtime.checkCompatibility(cm, &error)) << error; | ||
1638 | |||
1639 | xml = | ||
1640 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1641 | " <kernel version=\"3.18.22\"/>\n" | ||
1642 | " <kernel version=\"3.18.22\">\n" | ||
1643 | " <conditions>\n" | ||
1644 | " <config>\n" | ||
1645 | " <key>CONFIG_64BIT</key>\n" | ||
1646 | " <value type=\"tristate\">y</value>\n" | ||
1647 | " </config>\n" | ||
1648 | " </conditions>\n" | ||
1649 | " <config>\n" | ||
1650 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1651 | " <value type=\"int\">26</value>\n" | ||
1652 | " </config>\n" | ||
1653 | " </kernel>\n" | ||
1654 | " <sepolicy>\n" | ||
1655 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1656 | " </sepolicy>\n" | ||
1657 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1658 | "</compatibility-matrix>\n"; | ||
1659 | |||
1660 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1661 | << gCompatibilityMatrixConverter.lastError(); | ||
1662 | EXPECT_FALSE(runtime.checkCompatibility(cm, &error)) | ||
1663 | << "conditions met, so CONFIG_ARCH_MMAP_RND_BITS should not match"; | ||
1664 | |||
1665 | xml = | ||
1666 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1667 | " <kernel version=\"3.18.22\"/>\n" | ||
1668 | " <kernel version=\"3.18.22\">\n" | ||
1669 | " <conditions>\n" | ||
1670 | " <config>\n" | ||
1671 | " <key>CONFIG_64BIT</key>\n" | ||
1672 | " <value type=\"tristate\">n</value>\n" | ||
1673 | " </config>\n" | ||
1674 | " </conditions>\n" | ||
1675 | " <config>\n" | ||
1676 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1677 | " <value type=\"int\">26</value>\n" | ||
1678 | " </config>\n" | ||
1679 | " </kernel>\n" | ||
1680 | " <sepolicy>\n" | ||
1681 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1682 | " </sepolicy>\n" | ||
1683 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1684 | "</compatibility-matrix>\n"; | ||
1685 | |||
1686 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1687 | << gCompatibilityMatrixConverter.lastError(); | ||
1688 | EXPECT_TRUE(runtime.checkCompatibility(cm, &error)) << error; | ||
1689 | xml = | ||
1690 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1691 | " <kernel version=\"3.18.22\"/>\n" | ||
1692 | " <kernel version=\"3.18.22\">\n" | ||
1693 | " <conditions>\n" | ||
1694 | " <config>\n" | ||
1695 | " <key>CONFIG_64BIT</key>\n" | ||
1696 | " <value type=\"tristate\">y</value>\n" | ||
1697 | " </config>\n" | ||
1698 | " <config>\n" | ||
1699 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1700 | " <value type=\"int\">24</value>\n" | ||
1701 | " </config>\n" | ||
1702 | " </conditions>\n" | ||
1703 | " <config>\n" | ||
1704 | " <key>CONFIG_ILLEGAL_POINTER_VALUE</key>\n" | ||
1705 | " <value type=\"int\">0xdead000000000000</value>\n" | ||
1706 | " </config>\n" | ||
1707 | " </kernel>\n" | ||
1708 | " <sepolicy>\n" | ||
1709 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1710 | " </sepolicy>\n" | ||
1711 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1712 | "</compatibility-matrix>\n"; | ||
1713 | |||
1714 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1715 | << gCompatibilityMatrixConverter.lastError(); | ||
1716 | EXPECT_TRUE(runtime.checkCompatibility(cm, &error)); | ||
1717 | |||
1718 | xml = | ||
1719 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1720 | " <kernel version=\"3.18.22\"/>\n" | ||
1721 | " <kernel version=\"3.18.22\">\n" | ||
1722 | " <conditions>\n" | ||
1723 | " <config>\n" | ||
1724 | " <key>CONFIG_64BIT</key>\n" | ||
1725 | " <value type=\"tristate\">y</value>\n" | ||
1726 | " </config>\n" | ||
1727 | " <config>\n" | ||
1728 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1729 | " <value type=\"int\">24</value>\n" | ||
1730 | " </config>\n" | ||
1731 | " </conditions>\n" | ||
1732 | " <config>\n" | ||
1733 | " <key>CONFIG_ILLEGAL_POINTER_VALUE</key>\n" | ||
1734 | " <value type=\"int\">0xbeaf000000000000</value>\n" | ||
1735 | " </config>\n" | ||
1736 | " </kernel>\n" | ||
1737 | " <sepolicy>\n" | ||
1738 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1739 | " </sepolicy>\n" | ||
1740 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1741 | "</compatibility-matrix>\n"; | ||
1742 | |||
1743 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1744 | << gCompatibilityMatrixConverter.lastError(); | ||
1745 | EXPECT_FALSE(runtime.checkCompatibility(cm, &error)) | ||
1746 | << "conditions have 'and' relationship, so CONFIG_ILLEGAL_POINTER_VALUE should not match"; | ||
1747 | |||
1748 | xml = | ||
1749 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1750 | " <kernel version=\"3.18.22\"/>\n" | ||
1751 | " <kernel version=\"3.18.22\">\n" | ||
1752 | " <conditions>\n" | ||
1753 | " <config>\n" | ||
1754 | " <key>CONFIG_64BIT</key>\n" | ||
1755 | " <value type=\"tristate\">y</value>\n" | ||
1756 | " </config>\n" | ||
1757 | " <config>\n" | ||
1758 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1759 | " <value type=\"int\">26</value>\n" | ||
1760 | " </config>\n" | ||
1761 | " </conditions>\n" | ||
1762 | " <config>\n" | ||
1763 | " <key>CONFIG_ILLEGAL_POINTER_VALUE</key>\n" | ||
1764 | " <value type=\"int\">0xbeaf000000000000</value>\n" | ||
1765 | " </config>\n" | ||
1766 | " </kernel>\n" | ||
1767 | " <sepolicy>\n" | ||
1768 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1769 | " </sepolicy>\n" | ||
1770 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1771 | "</compatibility-matrix>\n"; | ||
1772 | |||
1773 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1774 | << gCompatibilityMatrixConverter.lastError(); | ||
1775 | EXPECT_TRUE(runtime.checkCompatibility(cm, &error)) << error; | ||
1776 | |||
1777 | xml = | ||
1778 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1779 | " <kernel version=\"3.18.22\">\n" | ||
1780 | " <config>\n" | ||
1781 | " <key>CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES</key>\n" | ||
1782 | " <value type=\"string\"/>\n" | ||
1783 | " </config>\n" | ||
1784 | " </kernel>\n" | ||
1785 | " <kernel version=\"3.18.22\">\n" | ||
1786 | " <conditions>\n" | ||
1787 | " <config>\n" | ||
1788 | " <key>CONFIG_64BIT</key>\n" | ||
1789 | " <value type=\"tristate\">y</value>\n" | ||
1790 | " </config>\n" | ||
1791 | " </conditions>\n" | ||
1792 | " <config>\n" | ||
1793 | " <key>CONFIG_ILLEGAL_POINTER_VALUE</key>\n" | ||
1794 | " <value type=\"int\">0xdead000000000000</value>\n" | ||
1795 | " </config>\n" | ||
1796 | " </kernel>\n" | ||
1797 | " <kernel version=\"3.18.22\">\n" | ||
1798 | " <conditions>\n" | ||
1799 | " <config>\n" | ||
1800 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1801 | " <value type=\"int\">24</value>\n" | ||
1802 | " </config>\n" | ||
1803 | " </conditions>\n" | ||
1804 | " <config>\n" | ||
1805 | " <key>CONFIG_ANDROID_BINDER_DEVICES</key>\n" | ||
1806 | " <value type=\"string\">binder,hwbinder</value>\n" | ||
1807 | " </config>\n" | ||
1808 | " </kernel>\n" | ||
1809 | " <sepolicy>\n" | ||
1810 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1811 | " </sepolicy>\n" | ||
1812 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1813 | "</compatibility-matrix>\n"; | ||
1814 | |||
1815 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1816 | << gCompatibilityMatrixConverter.lastError(); | ||
1817 | EXPECT_TRUE(runtime.checkCompatibility(cm, &error)) << error; | ||
1818 | |||
1819 | xml = | ||
1820 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1821 | " <kernel version=\"3.18.22\">\n" | ||
1822 | " <config>\n" | ||
1823 | " <key>CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES</key>\n" | ||
1824 | " <value type=\"string\"/>\n" | ||
1825 | " </config>\n" | ||
1826 | " </kernel>\n" | ||
1827 | " <kernel version=\"3.18.22\">\n" | ||
1828 | " <conditions>\n" | ||
1829 | " <config>\n" | ||
1830 | " <key>CONFIG_64BIT</key>\n" | ||
1831 | " <value type=\"tristate\">y</value>\n" | ||
1832 | " </config>\n" | ||
1833 | " </conditions>\n" | ||
1834 | " <config>\n" | ||
1835 | " <key>CONFIG_ILLEGAL_POINTER_VALUE</key>\n" | ||
1836 | " <value type=\"int\">0xbeaf000000000000</value>\n" | ||
1837 | " </config>\n" | ||
1838 | " </kernel>\n" | ||
1839 | " <kernel version=\"3.18.22\">\n" | ||
1840 | " <conditions>\n" | ||
1841 | " <config>\n" | ||
1842 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1843 | " <value type=\"int\">24</value>\n" | ||
1844 | " </config>\n" | ||
1845 | " </conditions>\n" | ||
1846 | " <config>\n" | ||
1847 | " <key>CONFIG_ANDROID_BINDER_DEVICES</key>\n" | ||
1848 | " <value type=\"string\">binder,hwbinder</value>\n" | ||
1849 | " </config>\n" | ||
1850 | " </kernel>\n" | ||
1851 | " <sepolicy>\n" | ||
1852 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1853 | " </sepolicy>\n" | ||
1854 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1855 | "</compatibility-matrix>\n"; | ||
1856 | |||
1857 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1858 | << gCompatibilityMatrixConverter.lastError(); | ||
1859 | EXPECT_FALSE(runtime.checkCompatibility(cm, &error)) << "all fragments should be used."; | ||
1860 | |||
1861 | xml = | ||
1862 | "<compatibility-matrix version=\"1.0\" type=\"framework\">\n" | ||
1863 | " <kernel version=\"3.18.22\">\n" | ||
1864 | " <config>\n" | ||
1865 | " <key>CONFIG_BUILD_ARM64_APPENDED_DTB_IMAGE_NAMES</key>\n" | ||
1866 | " <value type=\"string\"/>\n" | ||
1867 | " </config>\n" | ||
1868 | " </kernel>\n" | ||
1869 | " <kernel version=\"3.18.22\">\n" | ||
1870 | " <conditions>\n" | ||
1871 | " <config>\n" | ||
1872 | " <key>CONFIG_64BIT</key>\n" | ||
1873 | " <value type=\"tristate\">y</value>\n" | ||
1874 | " </config>\n" | ||
1875 | " </conditions>\n" | ||
1876 | " <config>\n" | ||
1877 | " <key>CONFIG_ILLEGAL_POINTER_VALUE</key>\n" | ||
1878 | " <value type=\"int\">0xdead000000000000</value>\n" | ||
1879 | " </config>\n" | ||
1880 | " </kernel>\n" | ||
1881 | " <kernel version=\"3.18.22\">\n" | ||
1882 | " <conditions>\n" | ||
1883 | " <config>\n" | ||
1884 | " <key>CONFIG_ARCH_MMAP_RND_BITS</key>\n" | ||
1885 | " <value type=\"int\">24</value>\n" | ||
1886 | " </config>\n" | ||
1887 | " </conditions>\n" | ||
1888 | " <config>\n" | ||
1889 | " <key>CONFIG_ANDROID_BINDER_DEVICES</key>\n" | ||
1890 | " <value type=\"string\">binder</value>\n" | ||
1891 | " </config>\n" | ||
1892 | " </kernel>\n" | ||
1893 | " <sepolicy>\n" | ||
1894 | " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n" | ||
1895 | " </sepolicy>\n" | ||
1896 | " <avb><vbmeta-version>2.1</vbmeta-version></avb>\n" | ||
1897 | "</compatibility-matrix>\n"; | ||
1898 | |||
1899 | EXPECT_TRUE(gCompatibilityMatrixConverter(&cm, xml)) | ||
1900 | << gCompatibilityMatrixConverter.lastError(); | ||
1901 | EXPECT_FALSE(runtime.checkCompatibility(cm, &error)) << "all fragments should be used"; | ||
1902 | } | ||
1903 | |||
1537 | // Run KernelConfigParserInvalidTest on processComments = {true, false} | 1904 | // Run KernelConfigParserInvalidTest on processComments = {true, false} |
1538 | class KernelConfigParserInvalidTest : public ::testing::TestWithParam<bool> {}; | 1905 | class KernelConfigParserInvalidTest : public ::testing::TestWithParam<bool> {}; |
1539 | 1906 | ||