1import infra 2import subprocess 3import json 4 5 6class CpeIdTest(infra.basetest.BRConfigTest): 7 config = "" 8 br2_external = [infra.filepath("tests/core/cpeid-br2-external")] 9 10 def get_vars(self, var): 11 cmd = ["make", "--no-print-directory", "-C", self.b.builddir, 12 "VARS=%s%%" % var, "printvars"] 13 lines = subprocess.check_output(cmd).splitlines() 14 return dict([str(x, "utf-8").split("=") for x in lines]) 15 16 def get_json(self, pkg): 17 cmd = ["make", "--no-print-directory", "-C", self.b.builddir, 18 "%s-show-info" % pkg] 19 return json.loads(subprocess.check_output(cmd)) 20 21 def test_pkg1(self): 22 # this package has no CPE ID information, it should not have 23 # any CPE_ID variable defined. 24 pkg_vars = self.get_vars("CPE_ID_PKG1_CPE_ID") 25 cpe_vars = ["CPE_ID_VALID", "CPE_ID_PRODUCT", "CPE_ID_VERSION", "CPE_ID_UPDATE", 26 "CPE_ID_PREFIX", "CPE_ID"] 27 for v in cpe_vars: 28 self.assertNotIn("CPE_ID_PKG1_%s" % v, pkg_vars) 29 pkg_json = self.get_json("cpe-id-pkg1") 30 self.assertNotIn("cpe-id", pkg_json['cpe-id-pkg1']) 31 32 pkg_vars = self.get_vars("HOST_CPE_ID_PKG1_CPE_ID") 33 for v in cpe_vars: 34 self.assertNotIn("HOST_CPE_ID_PKG1_%s" % v, pkg_vars) 35 pkg_json = self.get_json("host-cpe-id-pkg1") 36 self.assertNotIn("cpe-id", pkg_json['host-cpe-id-pkg1']) 37 38 def test_pkg2(self): 39 # this package has no CPE ID information, it should not have 40 # any CPE_ID variable defined. 41 pkg_vars = self.get_vars("HOST_CPE_ID_PKG2_CPE_ID") 42 cpe_vars = ["CPE_ID_VALID", "CPE_ID_PRODUCT", "CPE_ID_VERSION", "CPE_ID_UPDATE", 43 "CPE_ID_PREFIX", "CPE_ID"] 44 for v in cpe_vars: 45 self.assertNotIn("HOST_CPE_ID_PKG2_%s" % v, pkg_vars) 46 pkg_json = self.get_json("host-cpe-id-pkg2") 47 self.assertNotIn("cpe-id", pkg_json['host-cpe-id-pkg2']) 48 49 def test_pkg3(self): 50 # this package has just <pkg>_CPE_ID_VENDOR defined, so verify 51 # it has the default CPE_ID value, and that inheritance of the 52 # values for the host package is working 53 pkg_vars = self.get_vars("CPE_ID_PKG3_CPE_ID") 54 self.assertEqual(pkg_vars["CPE_ID_PKG3_CPE_ID"], 55 "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*") 56 self.assertEqual(pkg_vars["CPE_ID_PKG3_CPE_ID_VALID"], "YES") 57 pkg_json = self.get_json("cpe-id-pkg3") 58 self.assertEqual(pkg_json['cpe-id-pkg3']['cpe-id'], 59 "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*") 60 61 pkg_vars = self.get_vars("HOST_CPE_ID_PKG3_CPE_ID") 62 self.assertEqual(pkg_vars["HOST_CPE_ID_PKG3_CPE_ID"], 63 "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*") 64 self.assertEqual(pkg_vars["HOST_CPE_ID_PKG3_CPE_ID_VALID"], "YES") 65 pkg_json = self.get_json("host-cpe-id-pkg3") 66 self.assertEqual(pkg_json['host-cpe-id-pkg3']['cpe-id'], 67 "cpe:2.3:a:cpe-id-pkg3_project:cpe-id-pkg3:67:*:*:*:*:*:*:*") 68 69 def test_pkg4(self): 70 # this package defines 71 # <pkg>_CPE_ID_{VENDOR,PRODUCT,VERSION,UPDATE,PREFIX}, 72 # make sure we get the computed <pkg>_CPE_ID, and that it is 73 # inherited by the host variant 74 pkg_vars = self.get_vars("CPE_ID_PKG4_CPE_ID") 75 self.assertEqual(pkg_vars["CPE_ID_PKG4_CPE_ID"], 76 "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*") 77 self.assertEqual(pkg_vars["CPE_ID_PKG4_CPE_ID_VALID"], "YES") 78 pkg_json = self.get_json("cpe-id-pkg4") 79 self.assertEqual(pkg_json['cpe-id-pkg4']['cpe-id'], 80 "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*") 81 82 pkg_vars = self.get_vars("HOST_CPE_ID_PKG4_CPE_ID") 83 self.assertEqual(pkg_vars["HOST_CPE_ID_PKG4_CPE_ID"], 84 "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*") 85 self.assertEqual(pkg_vars["HOST_CPE_ID_PKG4_CPE_ID_VALID"], "YES") 86 pkg_json = self.get_json("host-cpe-id-pkg4") 87 self.assertEqual(pkg_json['host-cpe-id-pkg4']['cpe-id'], 88 "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*") 89 90 def test_pkg5(self): 91 # this package defines 92 # <pkg>_CPE_ID_{VENDOR,PRODUCT,VERSION,UPDATE,PREFIX} and 93 # HOST_<pkg>_CPE_ID_{VENDOR,PRODUCT,VERSION,UPDATE,PREFIX} 94 # separately, with different values. Make sure we get the 95 # right <pkg>_CPE_ID and HOST_<pkg>_CPE_ID values. 96 pkg_vars = self.get_vars("CPE_ID_PKG5_CPE_ID") 97 self.assertEqual(pkg_vars["CPE_ID_PKG5_CPE_ID"], 98 "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*") 99 self.assertEqual(pkg_vars["CPE_ID_PKG5_CPE_ID_VALID"], "YES") 100 pkg_json = self.get_json("cpe-id-pkg5") 101 self.assertEqual(pkg_json['cpe-id-pkg5']['cpe-id'], 102 "cpe:2.4:a:foo:bar:42:b2:*:*:*:*:*:*") 103 104 pkg_vars = self.get_vars("HOST_CPE_ID_PKG5_CPE_ID") 105 self.assertEqual(pkg_vars["HOST_CPE_ID_PKG5_CPE_ID"], 106 "cpe:2.5:a:baz:fuz:43:b3:*:*:*:*:*:*") 107 self.assertEqual(pkg_vars["HOST_CPE_ID_PKG5_CPE_ID_VALID"], "YES") 108 pkg_json = self.get_json("host-cpe-id-pkg5") 109 self.assertEqual(pkg_json['host-cpe-id-pkg5']['cpe-id'], 110 "cpe:2.5:a:baz:fuz:43:b3:*:*:*:*:*:*") 111