AT_BANNER([RPM dependency matching]) RPMPY_CHECK([provide - require pairs],[ # ((provides), (requires), match) expected values tests = [ # Different names never match (('b',), ('a',), 0), (('b',), ('a', '=', '1.2'), 0), (('b',), ('a', '>=', '1.2'), 0), (('b',), ('a', '<=', '1.2'), 0), (('b',), ('a', '<', '1.2'), 0), (('b',), ('a', '>', '1.2'), 0), (('b',), ('a', '<>', '1.2'), 0), # Unversioned provide matches all versions (('a',), ('a',), 1), (('a',), ('a', '=', '1.2'), 1), (('a',), ('a', '>=', '1.2'), 1), (('a',), ('a', '<=', '1.2'), 1), (('a',), ('a', '<', '1.2'), 1), (('a',), ('a', '>', '1.2'), 1), (('a',), ('a', '<>', '1.2'), 1), # Unversioned require matches all versions (('a', '=', '1.2'), ('a',), 1), (('a', '<', '1.2'), ('a',), 1), (('a', '>', '1.2'), ('a',), 1), (('a', '<=', '1.2'), ('a',), 1), (('a', '>=', '1.2'), ('a',), 1), (('a', '<>', '1.2'), ('a',), 1), # Simple, obvious version comparisons (('a', '=', '1.2'), ('a', '=', '1.2'), 1), (('a', '=', '1.2'), ('a', '>=', '1.2'), 1), (('a', '=', '1.2'), ('a', '<=', '1.2'), 1), (('a', '=', '1.2'), ('a', '<', '1.2'), 0), (('a', '=', '1.2'), ('a', '>', '1.2'), 0), (('a', '=', '1.2'), ('a', '<>', '1.2'), 0), (('a', '=', '1.2'), ('a', '=', '1.3'), 0), (('a', '=', '1.2'), ('a', '>=', '1.3'), 0), (('a', '=', '1.2'), ('a', '<=', '1.3'), 1), (('a', '=', '1.2'), ('a', '<', '1.3'), 1), (('a', '=', '1.2'), ('a', '>', '1.3'), 0), (('a', '=', '1.2'), ('a', '<>', '1.3'), 1), # Simple, obvious version-release comparisons (('a', '=', '1.2-1'), ('a', '=', '1.2-1'), 1), (('a', '=', '1.2-1'), ('a', '>=', '1.2-1'), 1), (('a', '=', '1.2-1'), ('a', '<=', '1.2-1'), 1), (('a', '=', '1.2-1'), ('a', '<', '1.2-1'), 0), (('a', '=', '1.2-1'), ('a', '>', '1.2-1'), 0), (('a', '=', '1.2-1'), ('a', '<>', '1.2-1'), 0), (('a', '=', '1.2-1'), ('a', '=', '1.2-2'), 0), (('a', '=', '1.2-1'), ('a', '>=', '1.2-2'), 0), (('a', '=', '1.2-1'), ('a', '<=', '1.2-2'), 1), (('a', '=', '1.2-1'), ('a', '<', '1.2-2'), 1), (('a', '=', '1.2-1'), ('a', '>', '1.2-2'), 0), (('a', '=', '1.2-1'), ('a', '<>', '1.2-2'), 1), (('a', '=', '1.3-1'), ('a', '=', '1.2-2'), 0), (('a', '=', '1.3-1'), ('a', '>=', '1.2-2'), 1), (('a', '=', '1.3-1'), ('a', '<=', '1.2-2'), 0), (('a', '=', '1.3-1'), ('a', '<', '1.2-2'), 0), (('a', '=', '1.3-1'), ('a', '>', '1.2-2'), 1), (('a', '=', '1.3-1'), ('a', '<>', '1.2-2'), 1), # Zero epoch is same as no epoch (('a', '=', '0:1.2'), ('a', '=', '1.2'), 1), (('a', '=', '0:1.2'), ('a', '>=', '1.2'), 1), (('a', '=', '0:1.2'), ('a', '<=', '1.2'), 1), (('a', '=', '0:1.2'), ('a', '<', '1.2'), 0), (('a', '=', '0:1.2'), ('a', '>', '1.2'), 0), (('a', '=', '0:1.2'), ('a', '<>', '1.2'), 0), (('a', '=', '1.2'), ('a', '=', '0:1.2'), 1), (('a', '=', '1.2'), ('a', '>=', '0:1.2'), 1), (('a', '=', '1.2'), ('a', '<=', '0:1.2'), 1), (('a', '=', '1.2'), ('a', '<', '0:1.2'), 0), (('a', '=', '1.2'), ('a', '>', '0:1.2'), 0), (('a', '=', '1.2'), ('a', '<>', '0:1.2'), 0), # Non-zero epochs (('a', '=', '1:1.2'), ('a', '=', '1.2'), 0), (('a', '=', '1:1.2'), ('a', '>=', '1.2'), 1), (('a', '=', '1:1.2'), ('a', '<=', '1.2'), 0), (('a', '=', '1:1.2'), ('a', '<', '1.2'), 0), (('a', '=', '1:1.2'), ('a', '>', '1.2'), 1), (('a', '=', '1:1.2'), ('a', '<>', '1.2'), 1), (('a', '=', '1.2'), ('a', '=', '1:1.2'), 0), (('a', '=', '1.2'), ('a', '>=', '1:1.2'), 0), (('a', '=', '1.2'), ('a', '<=', '1:1.2'), 1), (('a', '=', '1.2'), ('a', '<', '1:1.2'), 1), (('a', '=', '1.2'), ('a', '>', '1:1.2'), 0), (('a', '=', '1.2'), ('a', '<>', '1:1.2'), 1), (('a', '=', '2:1.2'), ('a', '=', '2:1.2'), 1), (('a', '=', '2:1.2'), ('a', '>=', '2:1.2'), 1), (('a', '=', '2:1.2'), ('a', '<=', '2:1.2'), 1), (('a', '=', '2:1.2'), ('a', '<', '2:1.2'), 0), (('a', '=', '2:1.2'), ('a', '>', '2:1.2'), 0), (('a', '=', '2:1.2'), ('a', '<>', '2:1.2'), 0), # Simple, obvious version comparisons with provide ranges (('a', '>', '1.2'), ('a', '=', '1.2'), 0), (('a', '>', '1.2'), ('a', '>=', '1.2'), 1), (('a', '>', '1.2'), ('a', '<=', '1.2'), 0), (('a', '>', '1.2'), ('a', '<', '1.2'), 0), (('a', '>', '1.2'), ('a', '>', '1.2'), 1), (('a', '>', '1.2'), ('a', '<>', '1.2'), 1), (('a', '<', '1.2'), ('a', '=', '1.2'), 0), (('a', '<', '1.2'), ('a', '>=', '1.2'), 0), (('a', '<', '1.2'), ('a', '<=', '1.2'), 1), (('a', '<', '1.2'), ('a', '<', '1.2'), 1), (('a', '<', '1.2'), ('a', '>', '1.2'), 0), (('a', '<', '1.2'), ('a', '<>', '1.2'), 1), (('a', '>=', '1.2'), ('a', '=', '1.2'), 1), (('a', '>=', '1.2'), ('a', '>=', '1.2'), 1), (('a', '>=', '1.2'), ('a', '<=', '1.2'), 1), (('a', '>=', '1.2'), ('a', '<', '1.2'), 0), (('a', '>=', '1.2'), ('a', '>', '1.2'), 1), (('a', '>=', '1.2'), ('a', '<>', '1.2'), 1), (('a', '<=', '1.2'), ('a', '=', '1.2'), 1), (('a', '<=', '1.2'), ('a', '>=', '1.2'), 1), (('a', '<=', '1.2'), ('a', '<=', '1.2'), 1), (('a', '<=', '1.2'), ('a', '<', '1.2'), 1), (('a', '<=', '1.2'), ('a', '>', '1.2'), 0), (('a', '<=', '1.2'), ('a', '<>', '1.2'), 1), (('a', '<>', '1.2'), ('a', '=', '1.2'), 0), (('a', '<>', '1.2'), ('a', '>=', '1.2'), 1), (('a', '<>', '1.2'), ('a', '<=', '1.2'), 1), (('a', '<>', '1.2'), ('a', '<', '1.2'), 1), (('a', '<>', '1.2'), ('a', '>', '1.2'), 1), (('a', '<>', '1.2'), ('a', '<>', '1.2'), 1), # Missing release should be considered "any release will do" # but this is not always so (the cases with "???") (('a', '=', '1.2-1'), ('a', '=', '1.2'), 1), (('a', '=', '1.2-1'), ('a', '>=', '1.2'), 1), (('a', '=', '1.2-1'), ('a', '<=', '1.2'), 1), (('a', '=', '1.2-1'), ('a', '<', '1.2'), 0), (('a', '=', '1.2-1'), ('a', '>', '1.2'), 0), (('a', '=', '1.2-1'), ('a', '<>', '1.2'), 0), (('a', '>', '1.2-1'), ('a', '=', '1.2'), 1), (('a', '>', '1.2-1'), ('a', '>=', '1.2'), 1), (('a', '>', '1.2-1'), ('a', '<=', '1.2'), 1), (('a', '>', '1.2-1'), ('a', '<', '1.2'), 0), (('a', '>', '1.2-1'), ('a', '>', '1.2'), 1), (('a', '>', '1.2-1'), ('a', '<>', '1.2'), 1), (('a', '<', '1.2-1'), ('a', '=', '1.2'), 1), (('a', '<', '1.2-1'), ('a', '>=', '1.2'), 1), (('a', '<', '1.2-1'), ('a', '<=', '1.2'), 1), (('a', '<', '1.2-1'), ('a', '<', '1.2'), 1), (('a', '<', '1.2-1'), ('a', '>', '1.2'), 0), (('a', '<', '1.2-1'), ('a', '<>', '1.2'), 1), (('a', '>=', '1.2-1'), ('a', '=', '1.2'), 1), (('a', '>=', '1.2-1'), ('a', '>=', '1.2'), 1), (('a', '>=', '1.2-1'), ('a', '<=', '1.2'), 1), (('a', '>=', '1.2-1'), ('a', '<', '1.2'), 0), (('a', '>=', '1.2-1'), ('a', '>', '1.2'), 1), (('a', '>=', '1.2-1'), ('a', '<>', '1.2'), 1), (('a', '<=', '1.2-1'), ('a', '=', '1.2'), 1), (('a', '<=', '1.2-1'), ('a', '>=', '1.2'), 1), (('a', '<=', '1.2-1'), ('a', '<=', '1.2'), 1), (('a', '<=', '1.2-1'), ('a', '<', '1.2'), 1), (('a', '<=', '1.2-1'), ('a', '>', '1.2'), 0), (('a', '<=', '1.2-1'), ('a', '<>', '1.2'), 1), (('a', '<>', '1.2-1'), ('a', '=', '1.2'), 1), (('a', '<>', '1.2-1'), ('a', '>=', '1.2'), 1), (('a', '<>', '1.2-1'), ('a', '<=', '1.2'), 1), (('a', '<>', '1.2-1'), ('a', '<', '1.2'), 1), (('a', '<>', '1.2-1'), ('a', '>', '1.2'), 1), (('a', '<>', '1.2-1'), ('a', '<>', '1.2'), 1), (('a', '=', '1.2'), ('a', '=', '1.2-1'), 1), (('a', '=', '1.2'), ('a', '>=', '1.2-1'), 1), (('a', '=', '1.2'), ('a', '<=', '1.2-1'), 1), (('a', '=', '1.2'), ('a', '<', '1.2-1'), 1), (('a', '=', '1.2'), ('a', '>', '1.2-1'), 1), (('a', '=', '1.2'), ('a', '<>', '1.2-1'), 1), (('a', '>', '1.2'), ('a', '=', '1.2-1'), 0), (('a', '>', '1.2'), ('a', '>=', '1.2-1'), 1), (('a', '>', '1.2'), ('a', '<=', '1.2-1'), 0), (('a', '>', '1.2'), ('a', '<', '1.2-1'), 0), (('a', '>', '1.2'), ('a', '>', '1.2-1'), 1), (('a', '>', '1.2'), ('a', '<>', '1.2-1'), 1), (('a', '<', '1.2'), ('a', '=', '1.2-1'), 0), (('a', '<', '1.2'), ('a', '>=', '1.2-1'), 0), (('a', '<', '1.2'), ('a', '<=', '1.2-1'), 1), (('a', '<', '1.2'), ('a', '<', '1.2-1'), 1), (('a', '<', '1.2'), ('a', '>', '1.2-1'), 0), (('a', '<', '1.2'), ('a', '<>', '1.2-1'), 1), (('a', '>=', '1.2'), ('a', '=', '1.2-1'), 1), (('a', '>=', '1.2'), ('a', '>=', '1.2-1'), 1), (('a', '>=', '1.2'), ('a', '<=', '1.2-1'), 1), (('a', '>=', '1.2'), ('a', '<', '1.2-1'), 1), (('a', '>=', '1.2'), ('a', '>', '1.2-1'), 1), (('a', '>=', '1.2'), ('a', '<>', '1.2-1'), 1), (('a', '<=', '1.2'), ('a', '=', '1.2-1'), 1), (('a', '<=', '1.2'), ('a', '>=', '1.2-1'), 1), (('a', '<=', '1.2'), ('a', '<=', '1.2-1'), 1), (('a', '<=', '1.2'), ('a', '<', '1.2-1'), 1), (('a', '<=', '1.2'), ('a', '>', '1.2-1'), 1), (('a', '<=', '1.2'), ('a', '<>', '1.2-1'), 1), (('a', '<>', '1.2'), ('a', '=', '1.2-1'), 0), (('a', '<>', '1.2'), ('a', '>=', '1.2-1'), 1), (('a', '<>', '1.2'), ('a', '<=', '1.2-1'), 1), (('a', '<>', '1.2'), ('a', '<', '1.2-1'), 1), (('a', '<>', '1.2'), ('a', '>', '1.2-1'), 1), (('a', '<>', '1.2'), ('a', '<>', '1.2-1'), 1), ] ms = ['no match', 'match'] myprint() # dumb kludge to fixup expected output for p, r, res in tests: d1 = rpm.ds(p, 'provides') d2 = rpm.ds(r, 'requires') match = d1.Compare(d2) if match != res: myprint('FAILED: %s with %s: %s' % (d1.DNEVR(), d2.DNEVR(),ms[res])) ], [] )