csomh / source-git / rpm

Forked from source-git/rpm 4 years ago
Clone
Blob Blame History Raw

AT_BANNER([RPM dependency matching])

RPMPY_TEST([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]))
],
[]
)