Blame tests/test_utils.py

Packit Service 39273c
#
Packit Service 39273c
# Copyright (C) 2013  Red Hat, Inc.
Packit Service 39273c
#
Packit Service 39273c
# This copyrighted material is made available to anyone wishing to use,
Packit Service 39273c
# modify, copy, or redistribute it subject to the terms and conditions of
Packit Service 39273c
# the GNU General Public License v.2, or (at your option) any later version.
Packit Service 39273c
# This program is distributed in the hope that it will be useful, but WITHOUT
Packit Service 39273c
# ANY WARRANTY expressed or implied, including the implied warranties of
Packit Service 39273c
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
Packit Service 39273c
# Public License for more details.  You should have received a copy of the
Packit Service 39273c
# GNU General Public License along with this program; if not, write to the
Packit Service 39273c
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
Packit Service 39273c
# 02110-1301, USA.  Any Red Hat trademarks that are incorporated in the
Packit Service 39273c
# source code or documentation are not subject to the GNU General Public
Packit Service 39273c
# License and may only be used or replicated with the express permission of
Packit Service 39273c
# Red Hat, Inc.
Packit Service 39273c
#
Packit Service 39273c
# Red Hat Author(s): Vratislav Podzimek <vpodzime@redhat.com>
Packit Service 39273c
#
Packit Service 39273c
Packit Service 39273c
"""Module with unit tests for the common.py module"""
Packit Service 39273c
Packit Service 39273c
import mock
Packit Service 39273c
import os
Packit Service 39273c
from collections import namedtuple
Packit Service 39273c
Packit Service 39273c
import pytest
Packit Service 39273c
Packit Service 39273c
from org_fedora_oscap import utils
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
@pytest.fixture()
Packit Service 39273c
def mock_os():
Packit Service 39273c
    mock_os = mock.Mock()
Packit Service 39273c
    mock_os.makedirs = mock.Mock()
Packit Service 39273c
    mock_os.path = mock.Mock()
Packit Service 39273c
    mock_os.path.isdir = mock.Mock()
Packit Service 39273c
    return mock_os
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def mock_utils_os(mock_os, monkeypatch):
Packit Service 39273c
    utils_module_symbols = utils.__dict__
Packit Service 39273c
Packit Service 39273c
    monkeypatch.setitem(utils_module_symbols, "os", mock_os)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_existing_dir(mock_os, monkeypatch):
Packit Service 39273c
    mock_utils_os(mock_os, monkeypatch)
Packit Service 39273c
    mock_os.path.isdir.return_value = True
Packit Service 39273c
Packit Service 39273c
    utils.ensure_dir_exists("/tmp/test_dir")
Packit Service 39273c
Packit Service 39273c
    mock_os.path.isdir.assert_called_with("/tmp/test_dir")
Packit Service 39273c
    assert not mock_os.makedirs.called
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_nonexisting_dir(mock_os, monkeypatch):
Packit Service 39273c
    mock_utils_os(mock_os, monkeypatch)
Packit Service 39273c
    mock_os.path.isdir.return_value = False
Packit Service 39273c
Packit Service 39273c
    utils.ensure_dir_exists("/tmp/test_dir")
Packit Service 39273c
Packit Service 39273c
    mock_os.path.isdir.assert_called_with("/tmp/test_dir")
Packit Service 39273c
    mock_os.makedirs.assert_called_with("/tmp/test_dir")
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_no_dir(mock_os, monkeypatch):
Packit Service 39273c
    mock_utils_os(mock_os, monkeypatch)
Packit Service 39273c
    # shouldn't raise an exception
Packit Service 39273c
    utils.ensure_dir_exists("")
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_relative_relative():
Packit Service 39273c
    assert utils.join_paths("foo", "blah") == "foo/blah"
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_relative_absolute():
Packit Service 39273c
    assert utils.join_paths("foo", "/blah") == "foo/blah"
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_absolute_relative():
Packit Service 39273c
    assert utils.join_paths("/foo", "blah") == "/foo/blah"
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_absolute_absolute():
Packit Service 39273c
    assert utils.join_paths("/foo", "/blah") == "/foo/blah"
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_dict():
Packit Service 39273c
    dct = {"a": 1, "b": 2}
Packit Service 39273c
Packit Service 39273c
    mapped_dct = utils.keep_type_map(str.upper, dct)
Packit Service 39273c
    assert list(mapped_dct.keys()) == ["A", "B"]
Packit Service 39273c
    assert isinstance(mapped_dct, dict)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_list():
Packit Service 39273c
    lst = [1, 2, 4, 5]
Packit Service 39273c
Packit Service 39273c
    mapped_lst = utils.keep_type_map(lambda x: x ** 2, lst)
Packit Service 39273c
    assert mapped_lst == [1, 4, 16, 25]
Packit Service 39273c
    assert isinstance(mapped_lst, list)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_tuple():
Packit Service 39273c
    tpl = (1, 2, 4, 5)
Packit Service 39273c
Packit Service 39273c
    mapped_tpl = utils.keep_type_map(lambda x: x ** 2, tpl)
Packit Service 39273c
    assert mapped_tpl == (1, 4, 16, 25)
Packit Service 39273c
    assert isinstance(mapped_tpl, tuple)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_namedtuple():
Packit Service 39273c
    NT = namedtuple("TestingNT", ["a", "b"])
Packit Service 39273c
    ntpl = NT(2, 4)
Packit Service 39273c
Packit Service 39273c
    mapped_tpl = utils.keep_type_map(lambda x: x ** 2, ntpl)
Packit Service 39273c
    assert mapped_tpl == NT(4, 16)
Packit Service 39273c
    assert isinstance(mapped_tpl, tuple)
Packit Service 39273c
    assert isinstance(mapped_tpl, NT)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_set():
Packit Service 39273c
    st = {1, 2, 4, 5}
Packit Service 39273c
Packit Service 39273c
    mapped_st = utils.keep_type_map(lambda x: x ** 2, st)
Packit Service 39273c
    assert mapped_st == {1, 4, 16, 25}
Packit Service 39273c
    assert isinstance(mapped_st, set)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_str():
Packit Service 39273c
    stri = "abcd"
Packit Service 39273c
Packit Service 39273c
    mapped_stri = utils.keep_type_map(lambda c: chr((ord(c) + 2) % 256), stri)
Packit Service 39273c
    assert mapped_stri == "cdef"
Packit Service 39273c
    assert isinstance(mapped_stri, str)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_gen():
Packit Service 39273c
    generator = (el for el in (1, 2, 4, 5))
Packit Service 39273c
Packit Service 39273c
    mapped_generator = utils.keep_type_map(lambda x: x ** 2, generator)
Packit Service 39273c
    assert tuple(mapped_generator) == (1, 4, 16, 25)
Packit Service 39273c
Packit Service 39273c
    # any better test for this?
Packit Service 39273c
    assert "__next__" in dir(mapped_generator)
Packit Service 39273c
Packit Service 39273c
Packit Service 39273c
def test_hash():
Packit Service 39273c
    file_hash = '87fcda7d9e7a22412e95779e2f8e70f929106c7b27a94f5f8510553ebf4624a6'
Packit Service 39273c
    hash_obj = utils.get_hashing_algorithm(file_hash)
Packit Service 39273c
    assert hash_obj.name == "sha256"
Packit Service 39273c
Packit Service 39273c
    filepath = os.path.join(os.path.dirname(__file__), 'data', 'file')
Packit Service 39273c
    computed_hash = utils.get_file_fingerprint(filepath, hash_obj)
Packit Service 39273c
Packit Service 39273c
    assert file_hash == computed_hash