--- /dev/null
+import infra
+import subprocess
+import json
+
+class CpeIdTest(infra.basetest.BRConfigTest):
+ config = ""
+ br2_external = [infra.filepath("tests/core/cpeid-br2-external")]
+
+ def get_vars(self, var):
+ cmd = ["make", "--no-print-directory", "-C", self.b.builddir,
+ "VARS=%s%%" % var, "printvars"]
+ lines = subprocess.check_output(cmd).splitlines()
+ return dict([str(x, "utf-8").split("=") for x in lines])
+
+ def get_json(self, pkg):
+ cmd = ["make", "--no-print-directory", "-C", self.b.builddir,
+ "%s-show-info" % pkg]
+ return json.loads(subprocess.check_output(cmd))
+
+ def test_pkg1(self):
+ # this package has no CPE ID information, it should not have
+ # any CPE_ID variable defined.
+ pkg_vars = self.get_vars("CPE_ID_PKG1_CPE_ID")
+ cpe_vars = ["CPE_ID_VALID", "CPE_ID_NAME", "CPE_ID_VERSION", "CPE_ID_VERSION_MINOR",
+ "CPE_ID_PREFIX", "CPE_ID"]
+ for v in cpe_vars:
+ self.assertNotIn("CPE_ID_PKG1_%s" % v, pkg_vars)
+ pkg_json = self.get_json("cpe-id-pkg1")
+ self.assertNotIn("cpe-id", pkg_json['cpe-id-pkg1'])
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG1_CPE_ID")
+ for v in cpe_vars:
+ self.assertNotIn("HOST_CPE_ID_PKG1_%s" % v, pkg_vars)
+ pkg_json = self.get_json("host-cpe-id-pkg1")
+ self.assertNotIn("cpe-id", pkg_json['host-cpe-id-pkg1'])
+
+ def test_pkg2(self):
+ # this package has no CPE ID information, it should not have
+ # any CPE_ID variable defined.
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG2_CPE_ID")
+ cpe_vars = ["CPE_ID_VALID", "CPE_ID_NAME", "CPE_ID_VERSION", "CPE_ID_VERSION_MINOR",
+ "CPE_ID_PREFIX", "CPE_ID"]
+ for v in cpe_vars:
+ self.assertNotIn("HOST_CPE_ID_PKG2_%s" % v, pkg_vars)
+ pkg_json = self.get_json("host-cpe-id-pkg2")
+ self.assertNotIn("cpe-id", pkg_json['host-cpe-id-pkg2'])
+
+ def test_pkg3(self):
+ # this package has just <pkg>_CPE_ID_VALID defined, so verify
+ # it has the default CPE_ID value, and that inheritance of the
+ # values for the host package is working
+ pkg_vars = self.get_vars("CPE_ID_PKG3_CPE_ID")
+ self.assertEqual(pkg_vars["CPE_ID_PKG3_CPE_ID"],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["CPE_ID_PKG3_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("cpe-id-pkg3")
+ self.assertEqual(pkg_json['cpe-id-pkg3']['cpe-id'],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG3_CPE_ID")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG3_CPE_ID"],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG3_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("host-cpe-id-pkg3")
+ self.assertEqual(pkg_json['host-cpe-id-pkg3']['cpe-id'],
+ "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*")
+
+ def test_pkg4(self):
+ # this package defines
+ # <pkg>_CPE_ID_{VENDOR,NAME,VERSION,VERSION_MINOR,PREFIX},
+ # make sure we get the computed <pkg>_CPE_ID, and that it is
+ # inherited by the host variant
+ pkg_vars = self.get_vars("CPE_ID_PKG4_CPE_ID")
+ self.assertEqual(pkg_vars["CPE_ID_PKG4_CPE_ID"],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["CPE_ID_PKG4_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("cpe-id-pkg4")
+ self.assertEqual(pkg_json['cpe-id-pkg4']['cpe-id'],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG4_CPE_ID")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG4_CPE_ID"],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG4_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("host-cpe-id-pkg4")
+ self.assertEqual(pkg_json['host-cpe-id-pkg4']['cpe-id'],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+
+ def test_pkg5(self):
+ # this package defines
+ # <pkg>_CPE_ID_{VENDOR,NAME,VERSION,VERSION_MINOR,PREFIX} and
+ # HOST_<pkg>_CPE_ID_{VENDOR,NAME,VERSION,VERSION_MINOR,PREFIX}
+ # separately, with different values. Make sure we get the
+ # right <pkg>_CPE_ID and HOST_<pkg>_CPE_ID values.
+ pkg_vars = self.get_vars("CPE_ID_PKG5_CPE_ID")
+ self.assertEqual(pkg_vars["CPE_ID_PKG5_CPE_ID"],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["CPE_ID_PKG5_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("cpe-id-pkg5")
+ self.assertEqual(pkg_json['cpe-id-pkg5']['cpe-id'],
+ "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*")
+
+ pkg_vars = self.get_vars("HOST_CPE_ID_PKG5_CPE_ID")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG5_CPE_ID"],
+ "cpe:2.5:a:baz:fuz:43:b3:*:*:*:*:*:*")
+ self.assertEqual(pkg_vars["HOST_CPE_ID_PKG5_CPE_ID_VALID"], "YES")
+ pkg_json = self.get_json("host-cpe-id-pkg5")
+ self.assertEqual(pkg_json['host-cpe-id-pkg5']['cpe-id'],
+ "cpe:2.5:a:baz:fuz:43:b3:*:*:*:*:*:*")