[Libosinfo] [osinfo-db-tools PATCH 6/7] tests: Add osinfo-db-{export, import} tests

Fabiano Fidêncio fidencio at redhat.com
Fri Apr 5 11:33:18 UTC 2019


Add a set of functional tests to ensure osinfo-db-export and
osinfo-db-import work as expected. The covered scenearios are:
- osinfo-db-export DIR
  - It's a negative test
- osinfo-db-export --system and osinfo-db-import --system
- osinfo-db-export --local FILENAME
- osinfo-db-import --local FILENAME
- cat FILENAME | osinfo-db-import -
- cat FILENAME | osinfo-db-import
- osinfo-db-export --user --license LICENSE --version VERSION
  VERSIONED_FILENAME
- osinfo-db-import --root / --user VERSIONED_FILENAME
- osinfo-db-import --user URL
- osinfo-db-import --latest

The last two tests are only enabled when OSINFO_DB_TOOLS_NETWORK_TESTS
is set.

Last but not least, differently than the tests for osinfo-db-path and
osinfo-db-validate, those tests pretty much only make sense when taken
as pairs. So, we export a db, import it back and ensure the content is
the same.

https://gitlab.com/libosinfo/osinfo-db-tools/issues/2

Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
 tests/Makefile.am                     |   1 +
 tests/test_osinfo_db_export_import.py | 263 ++++++++++++++++++++++++++
 2 files changed, 264 insertions(+)
 create mode 100755 tests/test_osinfo_db_export_import.py

diff --git a/tests/Makefile.am b/tests/Makefile.am
index fb7dfab..f9755a0 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -5,6 +5,7 @@ test_helpers = \
 	$(NULL)
 
 test_programs = \
+	test_osinfo_db_export_import.py \
 	test_osinfo_db_path.py \
 	test_osinfo_db_validate.py \
 	$(NULL)
diff --git a/tests/test_osinfo_db_export_import.py b/tests/test_osinfo_db_export_import.py
new file mode 100755
index 0000000..b2a83f6
--- /dev/null
+++ b/tests/test_osinfo_db_export_import.py
@@ -0,0 +1,263 @@
+#!/usr/bin/env python3
+#
+# This work is licensed under the GNU GPLv2 or later.
+# See the COPYING file in the top-level directory.
+
+import filecmp
+import json
+import os
+import pytest
+import requests
+import shutil
+import sys
+import time
+import util
+
+
+def test_negative_osinfo_db_export_path():
+    """
+    Test osinfo-db-export dir fails
+    """
+    cmd = [util.Tools.db_export, util.Data.positive]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 1
+
+
+def test_osinfo_db_export_import_system():
+    """
+    Test osinfo-db-export --system and osinfo-db-import --system
+    """
+    default_filename = "osinfo-db-%s.tar.xz" % time.strftime("%Y%m%d")
+
+    os.environ["OSINFO_SYSTEM_DIR"] = util.Data.positive
+    cmd = [util.Tools.db_export, util.ToolsArgs.SYSTEM]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+    assert os.path.isfile(default_filename)
+
+    tempdir = util.tempdir()
+    os.environ["OSINFO_SYSTEM_DIR"] = tempdir
+    cmd = [util.Tools.db_import, util.ToolsArgs.SYSTEM, default_filename]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+    dcmp = filecmp.dircmp(util.Data.positive, tempdir)
+    assert len(dcmp.right_only) == 1
+    assert "VERSION" in dcmp.right_only
+    assert dcmp.left_only == []
+    assert dcmp.diff_files == []
+    shutil.rmtree(tempdir)
+    os.unlink(default_filename)
+
+
+ at pytest.fixture
+def osinfo_db_export_local():
+    filename = "foobar.tar.xz"
+
+    os.environ["OSINFO_LOCAL_DIR"] = util.Data.positive
+    cmd = [util.Tools.db_export, util.ToolsArgs.LOCAL, filename]
+    return filename, util.get_returncode(cmd)
+
+
+
+ at pytest.mark.usefixtures("osinfo_db_export_local")
+def test_osinfo_db_export_local(osinfo_db_export_local):
+    """
+    Test osinfo-db-export --local FILENAME
+    """
+    filename, returncode = osinfo_db_export_local
+
+    assert returncode == 0
+    assert os.path.isfile(filename)
+
+
+
+ at pytest.mark.usefixtures("osinfo_db_export_local")
+def test_osinfo_db_import_local_file(osinfo_db_export_local):
+    """
+    Test osinfo-db-import --local FILENAME
+    """
+    filename, _ = osinfo_db_export_local
+
+    tempdir = util.tempdir()
+    os.environ["OSINFO_LOCAL_DIR"] = tempdir
+    cmd = [util.Tools.db_import, util.ToolsArgs.LOCAL, filename]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+    dcmp = filecmp.dircmp(util.Data.positive, tempdir)
+    assert len(dcmp.right_only) == 1
+    assert "VERSION" in dcmp.right_only
+    assert dcmp.left_only == []
+    assert dcmp.diff_files == []
+    shutil.rmtree(tempdir)
+    os.unlink(filename)
+
+
+ at pytest.mark.usefixtures("osinfo_db_export_local")
+def test_osinfo_db_import_local_dash(osinfo_db_export_local):
+    """
+    Test cat FILENAME | osinfo-db-import -
+    """
+    filename, _ = osinfo_db_export_local
+
+    tempdir = util.tempdir()
+    os.environ["OSINFO_LOCAL_DIR"] = tempdir
+    cmd = ["cat", filename]
+    cmd2 = [util.Tools.db_import, util.ToolsArgs.LOCAL, "-"]
+    returncode = util.get_returncode(cmd, cmd2)
+    assert returncode == 0
+    dcmp = filecmp.dircmp(util.Data.positive, tempdir)
+    assert len(dcmp.right_only) == 1
+    assert "VERSION" in dcmp.right_only
+    assert dcmp.left_only == []
+    assert dcmp.diff_files == []
+    shutil.rmtree(tempdir)
+    os.unlink(filename)
+
+
+ at pytest.mark.usefixtures("osinfo_db_export_local")
+def test_osinfo_db_import_local_no_file(osinfo_db_export_local):
+    """
+    Test cat FILENAME | osinfo-db-import
+    """
+    filename, _ = osinfo_db_export_local
+
+    tempdir = util.tempdir()
+    os.environ["OSINFO_LOCAL_DIR"] = tempdir
+    cmd1 = ["cat", filename]
+    cmd2 = [util.Tools.db_import, util.ToolsArgs.LOCAL]
+    returncode = util.get_returncode(cmd1, cmd2)
+    assert returncode == 0
+    dcmp = filecmp.dircmp(util.Data.positive, tempdir)
+    assert len(dcmp.right_only) == 1
+    assert "VERSION" in dcmp.right_only
+    assert dcmp.left_only == []
+    assert dcmp.diff_files == []
+    shutil.rmtree(tempdir)
+    os.unlink(filename)
+
+
+ at pytest.fixture
+def osinfo_db_export_user_license_version():
+    version = "foobar"
+    versioned_filename = "osinfo-db-%s.tar.xz" % version
+
+    os.environ["OSINFO_USER_DIR"] = util.Data.positive
+    cmd = [util.Tools.db_export, util.ToolsArgs.USER,
+            util.ToolsArgs.LICENSE, util.Data.license,
+            util.ToolsArgs.VERSION, version]
+    return versioned_filename, version, util.get_returncode(cmd)
+
+
+
+ at pytest.mark.usefixtures("osinfo_db_export_user_license_version")
+def test_osinfo_db_export_user_license_version(
+        osinfo_db_export_user_license_version):
+    """
+    Test osinfo-db-export --user --license LICENSE --version VERSION
+    """
+    filename, _, returncode = osinfo_db_export_user_license_version
+
+    assert returncode == 0
+    assert os.path.isfile(filename)
+
+
+ at pytest.mark.usefixtures("osinfo_db_export_user_license_version")
+def test_osinfo_db_import_root_user_versioned_file(
+        osinfo_db_export_user_license_version):
+    """
+    Test osinfo-db-import --root / --user VERSIONED_FILE
+    """
+    filename, version, returncode = osinfo_db_export_user_license_version
+
+    tempdir = util.tempdir()
+    os.environ["OSINFO_USER_DIR"] = tempdir
+    cmd = [util.Tools.db_import, util.ToolsArgs.ROOT, "/",
+            util.ToolsArgs.USER, filename]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+    dcmp = filecmp.dircmp(util.Data.positive, tempdir)
+    assert len(dcmp.right_only) == 2
+    assert "VERSION" in dcmp.right_only
+    with open(os.path.join(tempdir, "VERSION")) as out:
+        content = out.read()
+        assert content == version
+    assert "LICENSE" in dcmp.right_only
+    fcmp = filecmp.cmp(os.path.join(tempdir, "LICENSE"), util.Data.license)
+    assert fcmp is True
+    assert dcmp.left_only == []
+    assert dcmp.diff_files == []
+    shutil.rmtree(tempdir)
+    os.unlink(filename)
+
+
+ at pytest.mark.skipif(os.environ.get("OSINFO_DB_TOOLS_NETWORK_TESTS") is None,
+        reason="Network related tests are not enabled")
+def test_osinfo_db_import_url():
+    """
+    Test osinfo-db-import URL
+    """
+    url = "https://releases.pagure.org/libosinfo/osinfo-db-20190304.tar.xz"
+
+    tempdir = util.tempdir()
+    os.environ["OSINFO_USER_DIR"] = tempdir
+    cmd = [util.Tools.db_import, util.ToolsArgs.USER, url]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+
+    test_file = "downloaded.tar.xz"
+    tempdir2 = util.tempdir()
+    req = requests.get(url)
+    open(test_file, "wb").write(req.content)
+    assert os.path.isfile(test_file)
+
+    cmd = [util.Tools.db_import, util.ToolsArgs.DIR, tempdir2, test_file]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+
+    dcmp = filecmp.dircmp(tempdir, tempdir2)
+    assert dcmp.right_only == []
+    assert dcmp.left_only == []
+    assert dcmp.diff_files == []
+    shutil.rmtree(tempdir)
+    shutil.rmtree(tempdir2)
+    os.unlink(test_file)
+
+
+ at pytest.mark.skipif(os.environ.get("OSINFO_DB_TOOLS_NETWORK_TESTS") is None,
+        reason="Network related tests are not enabled")
+def test_osinfo_db_import_latest():
+    """
+    Test osinfo-dbimport --latest
+    """
+    tempdir = util.tempdir()
+    os.environ["OSINFO_USER_DIR"] = tempdir
+    cmd = [util.Tools.db_import, util.ToolsArgs.LATEST]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+
+    latest_url = "https://db.libosinfo.org/latest.json"
+    req = requests.get(latest_url)
+    data = json.loads(req.content)
+    url = data["release"]["archive"]
+
+    test_file = "downloaded.tar.xz"
+    tempdir2 = util.tempdir()
+    req = requests.get(url)
+    open(test_file, "wb").write(req.content)
+    assert os.path.isfile(test_file)
+
+    cmd = [util.Tools.db_import, util.ToolsArgs.DIR, tempdir2, test_file]
+    returncode = util.get_returncode(cmd)
+    assert returncode == 0
+
+    dcmp = filecmp.dircmp(tempdir, tempdir2)
+    assert dcmp.right_only == []
+    assert dcmp.left_only == []
+    assert dcmp.diff_files == []
+    shutil.rmtree(tempdir)
+    shutil.rmtree(tempdir2)
+    os.unlink(test_file)
+
+
+if __name__ == "__main__":
+    exit(pytest.main(sys.argv))
-- 
2.21.0




More information about the Libosinfo mailing list