Skip to content

Commit

Permalink
Added missing test file
Browse files Browse the repository at this point in the history
  • Loading branch information
midnightercz committed Feb 24, 2020
1 parent c9ab695 commit e39b247
Showing 1 changed file with 301 additions and 0 deletions.
301 changes: 301 additions & 0 deletions tests/test_iib_ops.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,301 @@
import contextlib
import mock
import pkg_resources
import pytest
import os

from pubtools.iib.utils import setup_entry_point_cli
from pubtools.iib.iib_ops import _iib_op_main

import pushcollector


from iiblib.iibclient import IIBBuildDetailsModel
from pubtools.pulplib import ContainerImageRepository
from more_executors.futures import f_return

from utils import FakeTaskManager, FakeCollector


fake_tm = FakeTaskManager()


@contextlib.contextmanager
def setup_entry_point_py(entry_tuple, environ_vars):
orig_environ = os.environ.copy()
try:
for key in environ_vars:
os.environ[key] = environ_vars[key]
entry_point_func = pkg_resources.load_entry_point(*entry_tuple)
yield entry_point_func
finally:
os.environ.update(orig_environ)


@pytest.fixture
def fixture_iib_client():
with mock.patch("iiblib.iibclient.IIBClient") as iibc_patched:
iibc_patched.return_value.add_bundles.side_effect = lambda *args, **kwargs:\
IIBBuildDetailsModel.from_dict(fake_tm.setup_task(*args, **kwargs))
iibc_patched.return_value.remove_operators.side_effect = lambda *args, **kwargs:\
IIBBuildDetailsModel.from_dict(fake_tm.setup_task(*args, **kwargs))
iibc_patched.return_value.get_build.side_effect = fake_tm.get_task
iibc_patched.return_value.wait_for_build.side_effect = lambda build_details:\
IIBBuildDetailsModel.from_dict(fake_tm.get_task(build_details.id))
yield iibc_patched


@pytest.fixture
def fixture_pushcollector():
fake_collector = FakeCollector()
pushcollector.Collector.register_backend("pubtools-ibb-test", lambda: fake_collector)
pushcollector.Collector.set_default_backend("pubtools-ibb-test")
yield fake_collector

#with mock.patch("pushcollector.Collector.update_push_items") as mocked_update_push_items:
# yield mocked_update_push_items


@pytest.fixture
def fixture_iib_krb_auth():
with mock.patch("iiblib.iibclient.IIBKrbAuth") as iib_krbauth_patched:
iib_krbauth_patched.return_value = mock.MagicMock(name="MockedIIBKrbAuth")
yield iib_krbauth_patched


@pytest.fixture
def fixture_pulp_client():
with mock.patch("pubtools.pulplib.Client") as pulpc_patched:
yield pulpc_patched


@pytest.fixture
def fixture_pulplib_repo_publish():
with mock.patch("pubtools.pulplib.ContainerImageRepository.publish") as repo_publish_patched:
repo_publish_patched.return_value = f_return()
yield repo_publish_patched


@pytest.fixture
def fixture_pulplib_repo_sync():
with mock.patch("pubtools.pulplib.ContainerImageRepository.sync") as repo_sync_patched:
yield repo_sync_patched


@pytest.fixture
def fixture_container_image_repo():
repo = ContainerImageRepository(id='redhat-operators')
repo.__dict__["_client"] = fixture_pulp_client
return repo


@pytest.fixture
def fixture_common_iib_op_args():
return ["--pulp-url", "pulp-url",
"--pulp-user", "pulp-user",
"--pulp-insecure",
"--iib-server", "iib-server",
"--index-image", "index-image",
"--binary-image", "binary-image",
"--arch", "arch"]


def test_add_bundles_cli(fixture_iib_client, fixture_pulp_client, fixture_iib_krb_auth,
fixture_pulplib_repo_publish, fixture_pulplib_repo_sync,
fixture_container_image_repo, fixture_common_iib_op_args,
fixture_pushcollector):

repo = fixture_container_image_repo
fixture_pulp_client.return_value.search_repository.return_value = [repo]
fixture_pulp_client.return_value.get_repository.return_value = repo

with setup_entry_point_cli(
("pubtools_iib", "console_scripts", "pubtools-iib-add-bundles"),
"pubtools-iib-add-bundle",
fixture_common_iib_op_args + ["--bundle", "bundle1"],
{"PULP_PASSWORD": "pulp-password"},
) as entry_func:
entry_func()
fixture_iib_client.assert_called_once_with("iib-server",
fixture_iib_krb_auth.return_value)
fixture_iib_client.return_value.add_bundles.assert_called_once_with(
"index-image",
"binary-image",
["bundle1"],
["arch"])
fixture_pulplib_repo_sync.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'

fixture_pulplib_repo_publish.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'

assert fixture_pushcollector.items == [
{'state': 'PENDING', 'origin': 'bundle1', 'filename': 'operator-bundle1'},
{'state': 'PUSHED', 'origin': 'bundle1', 'filename': 'operator-bundle1'}]


def test_add_bundles_cli_error(fixture_iib_client, fixture_pulp_client, fixture_iib_krb_auth,
fixture_pulplib_repo_publish, fixture_pulplib_repo_sync,
fixture_container_image_repo, fixture_common_iib_op_args,
fixture_pushcollector):

repo = fixture_container_image_repo
fixture_pulp_client.return_value.search_repository.return_value = [repo]
fixture_pulp_client.return_value.get_repository.return_value = repo
fixture_iib_client.return_value.add_bundles.side_effect = lambda *args, **kwargs:\
IIBBuildDetailsModel.from_dict(fake_tm.setup_task(
*args,
**dict(list(kwargs.items()) + [("state_seq", ('in_progress', 'error'))])))

with setup_entry_point_cli(
("pubtools_iib", "console_scripts", "pubtools-iib-add-bundles"),
"pubtools-iib-add-bundle",
fixture_common_iib_op_args + ["--bundle", "bundle1"],
{"PULP_PASSWORD": "pulp-password"},
) as entry_func:
try:
entry_func()
assert False, "Should have raised SystemError"
except SystemExit:
pass

assert fixture_pushcollector.items == [
{'state': 'PENDING', 'origin': 'bundle1', 'filename': 'operator-bundle1'},
{'state': 'NOTPUSHED', 'origin': 'bundle1', 'filename': 'operator-bundle1'}]


def test_add_bundles_py(fixture_iib_client, fixture_pulp_client, fixture_iib_krb_auth,
fixture_pulplib_repo_publish, fixture_pulplib_repo_sync,
fixture_container_image_repo, fixture_common_iib_op_args):

repo = fixture_container_image_repo
fixture_pulp_client.return_value.search_repository.return_value = [repo]
fixture_pulp_client.return_value.get_repository.return_value = repo
with setup_entry_point_py(
("pubtools_iib", "console_scripts", "pubtools-iib-add-bundles"),
{"PULP_PASSWORD": "pulp-password"},
) as entry_func:
retval = entry_func(
['cmd'] + fixture_common_iib_op_args + ["--bundle", "bundle1"],
)

assert isinstance(retval, IIBBuildDetailsModel)

fixture_iib_client.assert_called_once_with("iib-server",
fixture_iib_krb_auth.return_value)
fixture_iib_client.return_value.add_bundles.assert_called_once_with(
"index-image",
"binary-image",
["bundle1"],
["arch"])
fixture_pulplib_repo_sync.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'

fixture_pulplib_repo_publish.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'


def test_remove_operators_cli(fixture_iib_client, fixture_pulp_client, fixture_iib_krb_auth,
fixture_pulplib_repo_publish, fixture_pulplib_repo_sync,
fixture_container_image_repo, fixture_common_iib_op_args,
fixture_pushcollector):

repo = fixture_container_image_repo
fixture_pulp_client.return_value.search_repository.return_value = [repo]
fixture_pulp_client.return_value.get_repository.return_value = repo
fixture_iib_client.return_value.remove_operators.side_effect = lambda *args, **kwargs:\
IIBBuildDetailsModel.from_dict(fake_tm.setup_task(
*args,
**dict(list(kwargs.items()) + [("op_type", "remove")])))
with setup_entry_point_cli(
("pubtools_iib", "console_scripts", "pubtools-iib-remove-operators"),
"pubtools-iib-remove-operators",
fixture_common_iib_op_args + ["--operator", "op1"],
{"PULP_PASSWORD": "pulp-password"},
) as entry_func:
entry_func()
fixture_iib_client.assert_called_once_with("iib-server",
fixture_iib_krb_auth.return_value)
fixture_iib_client.return_value.remove_operators.assert_called_once_with(
"index-image",
"binary-image",
["op1"],
["arch"])
fixture_pulplib_repo_sync.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'

fixture_pulplib_repo_publish.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'

assert fixture_pushcollector.items == [
{'state': 'PENDING', 'origin': '', 'filename': 'operator-op1'},
{'state': 'DELETED', 'origin': '', 'filename': 'operator-op1'}]


def test_remove_operators_cli_error(fixture_iib_client, fixture_pulp_client, fixture_iib_krb_auth,
fixture_pulplib_repo_publish, fixture_pulplib_repo_sync,
fixture_container_image_repo, fixture_common_iib_op_args,
fixture_pushcollector):

repo = fixture_container_image_repo
fixture_pulp_client.return_value.search_repository.return_value = [repo]
fixture_pulp_client.return_value.get_repository.return_value = repo
fixture_iib_client.return_value.remove_operators.side_effect = lambda *args, **kwargs:\
IIBBuildDetailsModel.from_dict(fake_tm.setup_task(
*args,
**dict(list(kwargs.items()) + [("state_seq", ('in_progress', 'error')),
("op_type", "remove")])))
with setup_entry_point_cli(
("pubtools_iib", "console_scripts", "pubtools-iib-remove-operators"),
"pubtools-iib-remove-operators",
fixture_common_iib_op_args + ["--operator", "op1"],
{"PULP_PASSWORD": "pulp-password"},
) as entry_func:
try:
entry_func()
assert False, "Should have raised SystemError"
except SystemExit:
pass

assert fixture_pushcollector.items == [
{'state': 'PENDING', 'origin': '', 'filename': 'operator-op1'},
{'state': 'NOTPUSHED', 'origin': '', 'filename': 'operator-op1'}]


def test_remove_operators_py(fixture_iib_client, fixture_pulp_client, fixture_iib_krb_auth,
fixture_pulplib_repo_publish, fixture_pulplib_repo_sync,
fixture_container_image_repo, fixture_common_iib_op_args):

repo = fixture_container_image_repo
fixture_pulp_client.return_value.search_repository.return_value = [repo]
fixture_pulp_client.return_value.get_repository.return_value = repo
with setup_entry_point_py(
("pubtools_iib", "console_scripts", "pubtools-iib-remove-operators"),
{"PULP_PASSWORD": "pulp-password"},
) as entry_func:
retval = entry_func(
['cmd'] + fixture_common_iib_op_args + ["--operator", "op1"],
)

assert isinstance(retval, IIBBuildDetailsModel)

fixture_iib_client.assert_called_once_with("iib-server",
fixture_iib_krb_auth.return_value)
fixture_iib_client.return_value.remove_operators.assert_called_once_with(
"index-image",
"binary-image",
["op1"],
["arch"])
fixture_pulplib_repo_sync.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'

fixture_pulplib_repo_publish.assert_called_once()
assert fixture_pulplib_repo_sync.mock_calls[0].args[0].feed == 'index_image'


def test_invalid_op(fixture_common_iib_op_args):
try:
_iib_op_main((), 'invalid-op')
assert False, "Should have raised"
except ValueError:
pass

0 comments on commit e39b247

Please sign in to comment.