packages feed

bdcs-api-0.1.0: tests/mkTestRPMs.py

#!/usr/bin/python3
# Copyright (C) 2017 Red Hat, Inc.
#
# This file is part of bdcs-api.
#
# bdcs-api is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# bdcs-api is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with bdcs-api.  If not, see <http://www.gnu.org/licenses/>.

# This utility is used to create the fake rpms used for ServerSpec.h API testing
# It depends on rpmfluff from https://pagure.io/rpmfluff

from contextlib import contextmanager
import os
import shutil
import tempfile

from rpmfluff import SimpleRpmBuild, expectedArch

# helpers for creating RPMs to test with
@contextmanager
def in_tempdir(prefix='tmp'):
    oldcwd = os.getcwd()
    tmpdir = tempfile.mkdtemp(prefix=prefix)
    os.chdir(tmpdir)
    yield
    os.chdir(oldcwd)
    shutil.rmtree(tmpdir)

def make_fake_rpm(outdir, name, epoch, version, release, requires=None, provides=None):
    p = SimpleRpmBuild(name, version, release)
    if epoch:
        p.epoch = epoch
    if requires:
        p.add_requires(requires)
    if provides:
        p.add_provides(provides)

    with in_tempdir("bdcs-test-rpms."):
        p.make()
        rpmfile = p.get_built_rpm(expectedArch)
        shutil.move(rpmfile, os.path.join(outdir, os.path.basename(rpmfile)))


def main(outdir):
    # Build 4 test packages for use with the API ServerSpec.hs tests
    pkgs = [["bdcs-fake-bart",  0, "1.3.1", "12", "bdcs-fake-homer", None],
            ["bdcs-fake-lisa",  3, "1.0.0", "1",  "music", None],
            ["bdcs-fake-homer", 0, "2.0.1", "4",  None, None],
            ["bdcs-fake-sax",   0, "3.8.1", "1",  None, "music"],
           ]
    for args in pkgs:
        make_fake_rpm(outdir, *args)

if __name__ == "__main__":
    main(os.path.abspath("./tests/mddb/"))