require 'helper' # CPE examples borrowed from CPE Spec document ver. 2.2: # http://cpe.mitre.org/specification/ class TestCPE < Test::Unit::TestCase def setup @valid = "cpe:/o:microsoft:windows_xp:::pro" @invalid = ["cpe::", "cpe://redhat:enterprise_linux:3::as", "cpe:/o:redhat:Enterprise Linux:3::", ":/o:redhat:enterprise_linux:3", 4] end def test_parse_valid cpe = CPE.parse(@valid) assert_equal("/o", cpe.part) assert_equal("microsoft", cpe.vendor) assert_equal("windows_xp", cpe.product) assert_equal("", cpe.version) assert_equal("", cpe.update) assert_equal("pro", cpe.edition) assert_equal("", cpe.language) end def test_parse_invalid @invalid.each do |cpe| assert_raises(ArgumentError) { CPE.parse(cpe) } end assert_raises(ArgumentError) { CPE.parse(1) } end def test_generation cpe = CPE.new(part: CPE::OS, vendor: "microsoft", product: "windows_xp", edition: "pro") assert_equal("cpe:/o:microsoft:windows_xp:::pro:", cpe.generate) cpe = CPE.new(part: CPE::Application, vendor: "ACME", product: "Product", version: "1.0", update: "update2", edition: "-", language: "en-us") assert_equal("cpe:/a:acme:product:1.0:update2:-:en-us", cpe.generate) cpe = CPE.new(part: CPE::Hardware, vendor: "cisco", product: "router", version: 3825) assert_equal("cpe:/h:cisco:router:3825:::", cpe.generate) assert_nothing_raised { CPE.parse(File.open('test/data/cpe-test-valid')) } assert_raises(ArgumentError) { CPE.parse(File.open('test/data/cpe-test-invalid')) } assert_raises(ArgumentError) { CPE.new(:part => 2) } assert_nothing_raised { CPE.new } assert_raises(KeyError) { CPE.new.generate } assert_raises(KeyError) { CPE.new(part: CPE::OS).generate } assert_raises(KeyError) { CPE.new(vendor: "redhat").generate } assert_nothing_raised { CPE.new(vendor: "redhat", part: CPE::OS).generate } end def test_equality cpe_a = CPE.new(part: CPE::OS, vendor: "redhat", product: "enterprise_linux", version: 3) cpe_b = CPE.parse("cpe:/o:redhat:enterprise_linux:3") cpe_c = CPE.parse(File.open('test/data/cpe-test-valid')) assert_equal cpe_a, cpe_b assert_equal cpe_a, cpe_c end end