Skip to content

Commit

Permalink
steps: support version comparison
Browse files Browse the repository at this point in the history
Signed-off-by: Igor Gnatenko <ignatenko@redhat.com>
  • Loading branch information
Igor Gnatenko committed Feb 28, 2017
1 parent da68230 commit e8dc2b9
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 9 deletions.
2 changes: 1 addition & 1 deletion dnf-docker-test/features/steps/repo_steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
Name: {{ name }}
Summary: {{ summary|default("Empty") }}
Version: {{ version|default("1") }}
Release: {{ release|default("1") }}%{?dist}
Release: {{ release|default("1") }}
License: {{ license|default("Public Domain") }}
Expand Down
13 changes: 11 additions & 2 deletions dnf-docker-test/features/steps/rpm_steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,21 @@ def step_rpmdb_changes_are(ctx):
.. code-block:: gherkin
Scenario: Detect reinstalled package
Given saved rpmdb
When I successfully run "dnf -y reinstall util-linux"
When I save rpmdb
And I successfully run "dnf -y reinstall util-linux"
Then rpmdb changes are
| State | Packages |
| reinstalled | util-linux |
.. code-block:: gherkin
Scenario: Detect exact version
When I save rpmdb
And I successfully run "dnf -y update util-linux"
Then rpmdb changes are
| State | Packages |
| updated | util-linux/2.29.0 |
.. _automatic rules:
**Automatic rules which are additionally applied**:
Expand Down
32 changes: 26 additions & 6 deletions dnf-docker-test/features/steps/rpm_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import collections
import enum
import functools
import logging

import rpm

Expand Down Expand Up @@ -47,17 +48,36 @@ def hdr2nevra(hdr):
"""
return hdr["nevra"].decode() if hdr else None

def find_pkg(pkgs, name):
def find_pkg(pkgs, pkg):
"""
:param list(rpm.hdr) pkgs: List of RPM Headers
:param str name: Package name to find
:param str pkg: Package to find
:return: First found RPM header
:rtype: rpm.hdr or None
"""
try:
return next(pkg for pkg in pkgs if pkg.name == name.encode())
except StopIteration:
return None
epoch = version = release = None
if "/" in pkg:
name, evr = pkg.split("/")
if ":" in evr:
epoch = evr.split(":", 1)[0]
evr = evr[len(epoch) + 1:]
if "-" in evr:
version, release = evr.split("-")
else:
version = evr
else:
name = pkg

for p in pkgs:
if p.name != name:
continue
if (epoch is None or p.epoch == epoch) and \
(version is None or p.version == version) and \
(release is None or p.release == release):
return p
else:
logging.warning("Similar package to {!r}: {!r}".format(pkg, hdr2nevra(p)))
return None

def analyze_state(pre, post):
"""
Expand Down

0 comments on commit e8dc2b9

Please sign in to comment.