Skip to content

Commit 91931bb

Browse files
committed
[RFE enablerepo 1/2] Add scanclienablerepo actor
The actor produce CustomTargetRepository messages for repoids obtained from the cmdline when user use the --enablerepo option. The values are stored inside LEAPP_ENABLE_REPOS envar now, which is stored inside the configuration of the actor.
1 parent db0025a commit 91931bb

File tree

3 files changed

+104
-0
lines changed

3 files changed

+104
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from leapp.actors import Actor
2+
from leapp.libraries.actor import library
3+
from leapp.models import CustomTargetRepository
4+
from leapp.tags import FactsPhaseTag, IPUWorkflowTag
5+
6+
7+
class ScanCLIenablrepo(Actor):
8+
"""
9+
Produce CustomTargetRepository based on the LEAPP_ENABLE_REPOS in config.
10+
"""
11+
12+
name = 'scanclienablerepo'
13+
consumes = ()
14+
produces = (CustomTargetRepository)
15+
tags = (FactsPhaseTag, IPUWorkflowTag)
16+
17+
def process(self):
18+
library.process()
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from leapp.libraries.stdlib import api
2+
from leapp.libraries.common import config
3+
from leapp.models import CustomTargetRepository
4+
5+
6+
def process():
7+
if not config.get_env('LEAPP_ENABLE_REPOS'):
8+
return
9+
api.current_logger().info('The --enablerepo option has been used,')
10+
for repoid in config.get_env('LEAPP_ENABLE_REPOS').split(','):
11+
api.produce(CustomTargetRepository(repoid=repoid))
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
from collections import namedtuple
2+
import os
3+
4+
import pytest
5+
6+
from leapp.libraries.actor import library
7+
from leapp.libraries.common.config import architecture
8+
from leapp.libraries.common.testutils import produce_mocked
9+
from leapp.libraries.stdlib import api
10+
from leapp.models import CustomTargetRepository
11+
from leapp import models
12+
13+
14+
class CurrentActorMocked(object):
15+
def __init__(self, kernel='3.10.0-957.43.1.el7.x86_64', release_id='rhel',
16+
src_ver='7.6', dst_ver='8.1', arch=architecture.ARCH_X86_64,
17+
envars=None):
18+
19+
if envars:
20+
envarsList = [models.EnvVar(name=key, value=value) for key, value in envars.items()]
21+
else:
22+
envarsList = []
23+
24+
version = namedtuple('Version', ['source', 'target'])(src_ver, dst_ver)
25+
os_release = namedtuple('OS_release', ['release_id', 'version_id'])(release_id, src_ver)
26+
args = (version, kernel, os_release, arch, envarsList)
27+
conf_fields = ['version', 'kernel', 'os_release', 'architecture', 'leapp_env_vars']
28+
self.configuration = namedtuple('configuration', conf_fields)(*args)
29+
self._common_folder = '../../files'
30+
31+
def __call__(self):
32+
return self
33+
34+
def get_common_folder_path(self, folder):
35+
return os.path.join(self._common_folder, folder)
36+
37+
38+
class LoggerMocked(object):
39+
def __init__(self):
40+
self.infomsg = None
41+
self.debugmsg = None
42+
43+
def info(self, msg):
44+
self.infomsg = msg
45+
46+
def debug(self, msg):
47+
self.debugmsg = msg
48+
49+
def __call__(self):
50+
return self
51+
52+
53+
def test_no_enabledrepos(monkeypatch):
54+
monkeypatch.setattr(api, 'produce', produce_mocked())
55+
monkeypatch.setattr(api, 'current_logger', LoggerMocked())
56+
monkeypatch.setattr(api, 'current_actor', CurrentActorMocked())
57+
library.process()
58+
assert not api.current_logger.infomsg
59+
assert not api.produce.called
60+
61+
62+
@pytest.mark.parametrize('envars,result', [
63+
({'LEAPP_ENABLE_REPOS': 'repo1'}, [CustomTargetRepository(repoid='repo1')]),
64+
({'LEAPP_ENABLE_REPOS': 'repo1,repo2'}, [CustomTargetRepository(repoid='repo1'),
65+
CustomTargetRepository(repoid='repo2')]),
66+
])
67+
def test_enabledrepos(monkeypatch, envars, result):
68+
monkeypatch.setattr(api, 'produce', produce_mocked())
69+
monkeypatch.setattr(api, 'current_logger', LoggerMocked())
70+
monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(envars=envars))
71+
library.process()
72+
assert api.current_logger.infomsg
73+
assert api.produce.called == len(result)
74+
for i in result:
75+
assert i in api.produce.model_instances

0 commit comments

Comments
 (0)