def test_load_and_write_cond(self): """compdesc.load returns a component with packages""" os.system(''' cat >a.xml <<EOF <?xml version="1.0" encoding="utf-8"?> <component> <contents> <deb> <cond><![CDATA[ apache (>>2) ]]></cond> <deb ref="sha-1:aaa"> <cond>apache</cond> </deb> </deb> </contents> </component> EOF cp a.xml b.xml ''') desc = ComponentDescriptor('a.xml') desc.write() self.assert_equals_long(open('b.xml').read(), open('a.xml').read()) condition = desc.contents[0].reference.condition a = MockPackage('apache', '2-1', deb, 'sha-1:aaa') b = MockPackage('apache', '1.3', deb, 'sha-1:bbb') assert condition.evaluate(a) assert not condition.evaluate(b)
def test_write_relation(self): os.system(''' cat >a.xml <<EOF <?xml version="1.0" encoding="utf-8"?> <component> <contents> <deb> <version>2.0.53</version> <version-lt>2.0.53</version-lt> <version-lt-eq>2.0.53</version-lt-eq> <version-gt>2.0.53</version-gt> <version-gt-eq>2.0.53</version-gt-eq> </deb> <dsc> <version>2.0.53</version> <version-lt>2.0.53</version-lt> </dsc> <rpm> <version>2.0.53-0</version> <version-lt>2.0.53-0</version-lt> </rpm> <srpm> <version>2.0.53-0</version> <version-lt>2.0.53-0</version-lt> </srpm> </contents> </component> EOF cp a.xml b.xml ''') desc = ComponentDescriptor('a.xml') desc.write() self.assert_equals_long(open('b.xml').read(), open('a.xml').read())
def test_read_write_and_or(self): os.system(''' cat >a.xml <<EOF <?xml version="1.0" encoding="utf-8"?> <component> <contents> <deb> <or> <and> <name>a</name> <arch>b</arch> </and> <name>c</name> </or> <my.some>value</my.some> </deb> </contents> </component> EOF cp a.xml b.xml ''') desc = ComponentDescriptor('a.xml') deb_ref = desc.contents[0] expected = rules.ac([ rules.oc([ rules.ac([ rules.rc(eq, 'pdk', 'name', 'a'), rules.rc(eq, 'pdk', 'arch', 'b') ]), rules.rc(eq, 'pdk', 'name', 'c') ]), rules.rc(eq, 'my', 'some', 'value') ]) expected = PhantomConditionWrapper(expected, deb, None) self.assert_equals_long(expected, deb_ref.reference.condition) desc.write() self.assert_equals_long(open('b.xml').read(), open('a.xml').read())
def test_load_and_use_star_cond(self): """compdesc.load returns a component with packages""" os.system(''' cat >a.xml <<EOF <?xml version="1.0" encoding="utf-8"?> <component> <contents> <dsc> <name>apache</name> <dsc ref="sha-1:ccc"> <name>apache</name> </dsc> <deb ref="sha-1:aaa"> <name>apache</name> </deb> <deb ref="sha-1:bbb"> <name>apache-common</name> </deb> </dsc> <dsc> <cond><![CDATA[ * apache (>=2) ]]></cond> </dsc> <src> <cond><![CDATA[ * apache (>=2) ]]></cond> </src> <bin> <cond><![CDATA[ * apache-common (>=2) ]]></cond> </bin> </contents> </component> EOF cp a.xml b.xml ''') desc = ComponentDescriptor('a.xml') desc.write() self.assert_equals_long(open('b.xml').read(), open('a.xml').read()) condition = desc.contents[1].rule.condition a = MockPackage('apache', '2', deb, 'sha-1:aaa') b = MockPackage('apache-commmon', '2', deb, 'sha-1:bbb') c = MockPackage('apache', '2', dsc, 'sha-1:ccc') a.complement = [c] b.complement = [c] c.complement = [a, b] assert condition.evaluate(a) assert condition.evaluate(b) assert not condition.evaluate(c) src_condition = desc.contents[2].rule.condition assert src_condition.evaluate(a) assert src_condition.evaluate(b) assert not src_condition.evaluate(c)
def test_empty_meta_element(self): open('test.xml', 'w').write('''<?xml version="1.0"?> <component> <meta/> </component> ''') desc = ComponentDescriptor('test.xml') desc.write() expected = '''<?xml version="1.0" encoding="utf-8"?> <component> </component> ''' self.assert_equals_long(expected, open('test.xml').read())
def test_conditional_include(self): os.system(''' cat >b.xml <<EOF <?xml version="1.0" encoding="utf-8"?> <component> <contents> <deb ref="sha-1:aaa"> <name>apache</name> </deb> <deb ref="sha-1:bbb"> <name>libc6</name> </deb> <deb ref="sha-1:ccc"> <name>ls</name> </deb> </contents> </component> EOF ''') os.system(''' cat >a.xml <<EOF <?xml version="1.0" encoding="utf-8"?> <component> <contents> <component> <file>b.xml</file> <limit>apache</limit> <exclude>ls</exclude> </component> </contents> </component> EOF cp a.xml c.xml ''') apache = MockPackage('apache', '1', deb, 'sha-1:aaa', arch = 'i386') libc = MockPackage('libc6', '1', deb, 'sha-1:bbb', arch = 'i386') ls = MockPackage('ls', '1', deb, 'sha-1:ccc', arch = 'i386') cache = ShamCache() cache.add(apache) cache.add(libc) cache.add(ls) desc_a = ComponentDescriptor('a.xml') desc_a.write() self.assert_equals_long(open('c.xml').read(), open('a.xml').read()) component_a = desc_a.load(cache) assert isinstance(component_a, Component) expected = [ apache ] actual = list(component_a.iter_packages()) self.assert_equal(expected, actual)
def test_dont_mutate_meta(self): """Make sure the load method does not mutate the meta info in the descriptor. """ open('test.xml', 'w').write('''<?xml version="1.0"?> <component> <meta> <predicate>object</predicate> </meta> <contents> <dsc> <name>a</name> <meta> <c>d</c> </meta> </dsc> <deb ref="sha-1:aaa"> <meta> <necessity>mandatory</necessity> </meta> </deb> </contents> </component> ''') desc = ComponentDescriptor('test.xml') cache = ShamCache() cache.add(MockPackage('a', '1', deb, 'sha-1:aaa')) desc.load(cache) desc.write() expected = '''<?xml version="1.0" encoding="utf-8"?> <component> <meta> <predicate>object</predicate> </meta> <contents> <dsc> <name>a</name> <meta> <c>d</c> </meta> </dsc> <deb ref="sha-1:aaa"> <meta> <necessity>mandatory</necessity> </meta> </deb> </contents> </component> ''' self.assert_equals_long(expected, open('test.xml').read())
def test_occupied_meta_element(self): open('test.xml', 'w').write('''<?xml version="1.0"?> <component> <meta> <key>value</key> </meta> <contents> <deb ref="sha-1:aaa"> <meta> <other-key>other-value</other-key> <link> <vuln>22</vuln> </link> <unlink> <vuln>20</vuln> </unlink> </meta> </deb> </contents> </component> ''') desc = ComponentDescriptor('test.xml') desc.write() expected = '''<?xml version="1.0" encoding="utf-8"?> <component> <meta> <key>value</key> </meta> <contents> <deb ref="sha-1:aaa"> <meta> <other-key>other-value</other-key> <link> <vuln>22</vuln> </link> <unlink> <vuln>20</vuln> </unlink> </meta> </deb> </contents> </component> ''' self.assert_equals_long(expected, open('test.xml').read())
def test_dont_lose_entities(self): """Make sure the write method handles entities.""" open('test.xml', 'w').write('''<?xml version="1.0"?> <component> <meta> <predicate>object</predicate> </meta> <contents> <dsc> <name>a</name> <meta> <c>d</c> </meta> </dsc> <deb ref="sha-1:aaa"> <meta> <necessity>mandatory</necessity> </meta> </deb> </contents> <entities> <test id="1"> <a>b</a> <c>d</c> <e>f</e> </test> </entities> </component> ''') desc = ComponentDescriptor('test.xml') cache = ShamCache() cache.add(MockPackage('a', '1', deb, 'sha-1:aaa')) desc.load(cache) desc.write() expected = '''<?xml version="1.0" encoding="utf-8"?> <component> <meta> <predicate>object</predicate> </meta> <contents> <dsc> <name>a</name> <meta> <c>d</c> </meta> </dsc> <deb ref="sha-1:aaa"> <meta> <necessity>mandatory</necessity> </meta> </deb> </contents> <entities> <test id="1"> <a>b</a> <c>d</c> <e>f</e> </test> </entities> </component> ''' self.assert_equals_long(expected, open('test.xml').read())