Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit bf311c8767831f4453256ba07f0a4400b3489716
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Tue Mar 24 16:28:11 2015 +0100
[backend] tests cleanup
---------------------------------------------------------------
backend/backend/daemons/vm_master.py | 4 +++-
backend/backend/mockremote/builder.py | 6 +++---
backend/backend/vm_manage/spawn.py | 2 +-
backend/conf/copr-be.conf.example | 2 +-
backend/copr-backend.spec | 9 +++++----
backend/run/copr_get_vm_info.py | 3 +++
backend/tests/mockremote/test_builder.py | 21 +++++++++++++++++----
backend/tests/run/test_copr_prune_results.py | 6 ++----
8 files changed, 35 insertions(+), 18 deletions(-)
diff --git a/backend/backend/daemons/vm_master.py b/backend/backend/daemons/vm_master.py
index 0fa49f2..ad1fd70 100644
--- a/backend/backend/daemons/vm_master.py
+++ b/backend/backend/daemons/vm_master.py
@@ -84,6 +84,8 @@ class VmMaster(Process):
self.vmm.start_vm_check(vmd.vm_name)
def try_spawn_one(self, group):
+ # TODO: add setting "max_vm_in_ready_state", when this number reached,
do not spawn more VMS, min value = 1
+
max_vm_total = self.opts.build_groups[group]["max_vm_total"]
active_vmd_list = self.vmm.get_vm_by_group_and_state_list(
group, [VmStates.GOT_IP, VmStates.READY, VmStates.IN_USE,
VmStates.CHECK_HEALTH])
@@ -92,7 +94,7 @@ class VmMaster(Process):
total_vm_estimation = len(active_vmd_list) + self.vmm.spawner.children_number
if total_vm_estimation >= max_vm_total:
self.log("Skip spawn: max total vm reached for group {}: vm count: {},
spawn process: {}"
- .format(group, len(active_vmd_list),
self.opts.build_groups[group]["max_vm_total"]))
+ .format(group, len(active_vmd_list),
self.vmm.spawner.children_number))
return
last_vm_spawn_start = self.vmm.rc.hget(KEY_VM_POOL_INFO.format(group=group),
"last_vm_spawn_start")
if last_vm_spawn_start:
diff --git a/backend/backend/mockremote/builder.py
b/backend/backend/mockremote/builder.py
index 064c7fb..a22f2a3 100644
--- a/backend/backend/mockremote/builder.py
+++ b/backend/backend/mockremote/builder.py
@@ -354,10 +354,10 @@ class Builder(object):
def check(self):
# do check of host
try:
+ # requires name resolve facility
socket.gethostbyname(self.hostname)
- except socket.gaierror:
- raise BuilderError("{0} could not be resolved".format(
- self.hostname))
+ except IOError:
+ raise BuilderError("{0} could not be
resolved".format(self.hostname))
try:
# check_for_ans_error(res, self.hostname)
diff --git a/backend/backend/vm_manage/spawn.py b/backend/backend/vm_manage/spawn.py
index 77658be..38a6e64 100644
--- a/backend/backend/vm_manage/spawn.py
+++ b/backend/backend/vm_manage/spawn.py
@@ -143,7 +143,7 @@ class Spawner(Executor):
def start_spawn(self, group):
self.recycle()
- spawn_playbook = None
+ # spawn_playbook = None
try:
spawn_playbook = self.opts.build_groups[group]["spawn_playbook"]
except KeyError:
diff --git a/backend/conf/copr-be.conf.example b/backend/conf/copr-be.conf.example
index 70e78ac..4a34206 100644
--- a/backend/conf/copr-be.conf.example
+++ b/backend/conf/copr-be.conf.example
@@ -41,7 +41,7 @@ group0_archs=i386,x86_64
group0_spawn_playbook=/srv/copr-work/provision/builderpb-PC.yml
group0_terminate_playbook=/srv/copr-work/provision/terminatepb-PC.yml
group0_max_workers=8
-
+group0_max_vm_total=2
# That variables will be send to
# terminate_playbook ansible script.
diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec
index 45e5fff..e6a2b5c 100644
--- a/backend/copr-backend.spec
+++ b/backend/copr-backend.spec
@@ -20,15 +20,14 @@ BuildArch: noarch
BuildRequires: asciidoc
BuildRequires: libxslt
BuildRequires: util-linux
+BuildRequires: yum-utils
BuildRequires: python-setuptools
BuildRequires: python-requests
BuildRequires: python2-devel
BuildRequires: python-copr
BuildRequires: systemd
BuildRequires: redis
-%if 0%{?rhel} < 7 && 0%{?rhel} > 0
-BuildRequires: python-argparse
-%endif
+
#for doc package
BuildRequires: epydoc
BuildRequires: graphviz
@@ -48,6 +47,7 @@ BuildRequires: ansible >= 1.2
BuildRequires: python-IPy
BuildRequires: python-paramiko
BuildRequires: python-psutil
+# BuildRequires: python-ipdb
BuildRequires: wget
Requires: obs-signd
@@ -75,6 +75,7 @@ Requires: fedmsg
Requires: gawk
Requires: crontabs
Requires: python-paramiko
+# Requires: python-ipdb
# Requires: logstash
Requires(post): systemd
@@ -166,7 +167,7 @@ cp -a conf/playbooks %{buildroot}%{_pkgdocdir}/
redis-server --port 7777 &> /dev/null &
PYTHONPATH=backend:run:$PYTHONPATH python -B -m pytest \
- -s --cov-report term-missing --cov ./backend --cov ./run ./tests/
+ -s -v --cov-report term-missing --cov ./backend --cov ./run ./tests/
kill %1
diff --git a/backend/run/copr_get_vm_info.py b/backend/run/copr_get_vm_info.py
index 3d80611..bf9f3e6 100644
--- a/backend/run/copr_get_vm_info.py
+++ b/backend/run/copr_get_vm_info.py
@@ -1,5 +1,8 @@
# coding: utf-8
+import sys
+sys.path.append("/usr/share/copr/")
+
from backend.helpers import BackendConfigReader
from backend.vm_manage.manager import VmManager
diff --git a/backend/tests/mockremote/test_builder.py
b/backend/tests/mockremote/test_builder.py
index 8a414f9..f2da9b3 100644
--- a/backend/tests/mockremote/test_builder.py
+++ b/backend/tests/mockremote/test_builder.py
@@ -3,6 +3,7 @@ import copy
from collections import defaultdict
from pprint import pprint
+import socket
from bunch import Bunch
from backend.exceptions import BuilderError, BuilderTimeOutError, AnsibleCallError,
AnsibleResponseError, VmError
@@ -35,6 +36,13 @@ from backend.mockremote.builder import Builder
MODULE_REF = "backend.mockremote.builder"
+
+(a)pytest.yield_fixture
+def mc_socket():
+ with mock.patch("{}.socket".format(MODULE_REF)) as handle:
+ yield handle
+
+
def noop(*args, **kwargs):
pass
@@ -301,7 +309,8 @@ class TestBuilder(object):
results = {"contacted": {}, "dark": {}}
assert {} == builder_module.get_ans_results(results, self.BUILDER_HOSTNAME)
- def test_check_hostname_check(self):
+ def test_check_hostname_check(self, mc_socket):
+ mc_socket.gethostbyname.side_effect = socket.gaierror()
builder = self.get_test_builder()
for name in ["*", "256.0.0.1"]:
with pytest.raises(BuilderError):
@@ -309,8 +318,9 @@ class TestBuilder(object):
builder.hostname = name
builder.check()
- def test_check_missing_required_binaries(self):
+ def test_check_missing_required_binaries(self, mc_socket):
builder = self.get_test_builder()
+ self.stage = 0
def ans_run():
self.stage_ctx[self.stage]["conn"] = copy.deepcopy(builder.conn)
@@ -326,11 +336,12 @@ class TestBuilder(object):
builder.check()
# import ipdb; ipdb.set_trace()
+ # pprint(self.stage_ctx)
assert "/bin/rpm -q mock rsync" in
self.stage_ctx[0]["conn"].module_args
assert "does not have mock or rsync installed" in err.value.msg
- def test_check_missing_mockchain_or_mock_config(self):
+ def test_check_missing_mockchain_or_mock_config(self, mc_socket):
builder = self.get_test_builder()
def ans_run():
@@ -346,13 +357,14 @@ class TestBuilder(object):
with pytest.raises(BuilderError) as err:
builder.check()
+ # pprint(self.stage_ctx)
assert "/usr/bin/test -f /usr/bin/mockchain" in
self.stage_ctx[1]["conn"].module_args
# assert "/usr/bin/test -f
/etc/mock/{}.cfg".format(self.BUILDER_CHROOT) in \
# self.stage_ctx[1]["conn"].module_args
assert "missing mockchain binary" in err.value.msg
- def test_check_missing_mock_config(self):
+ def test_check_missing_mock_config(self, mc_socket):
builder = self.get_test_builder()
ret_map = {
@@ -370,6 +382,7 @@ class TestBuilder(object):
with pytest.raises(BuilderError) as err:
builder.check()
+ # pprint(self.stage_ctx)
assert "/usr/bin/test -f /usr/bin/mockchain" in
self.stage_ctx[1]["conn"].module_args
assert "/usr/bin/test -f /etc/mock/{}.cfg".format(self.BUILDER_CHROOT)
in \
self.stage_ctx[2]["conn"].module_args
diff --git a/backend/tests/run/test_copr_prune_results.py
b/backend/tests/run/test_copr_prune_results.py
index 25c4b80..1a4be8c 100644
--- a/backend/tests/run/test_copr_prune_results.py
+++ b/backend/tests/run/test_copr_prune_results.py
@@ -78,7 +78,7 @@ class TestPruneResults(object):
self.prj = "foox"
self.chroots = ["fedora-20-i386", "fedora-20-x86_64"]
self.opts = Bunch(
- days=14,
+ prune_days=14,
find_obsolete_script=os.path.abspath(
os.path.join(os.path.dirname(__file__), os.pardir, os.pardir,
@@ -113,7 +113,7 @@ class TestPruneResults(object):
def make_temp_dir(self):
root_tmp_dir = tempfile.gettempdir()
- subdir = "test_action_{}".format(self.test_time)
+ subdir = "test_prune_old_{}".format(self.test_time)
self.tmp_dir_name = os.path.join(root_tmp_dir, subdir)
os.mkdir(self.tmp_dir_name)
@@ -300,7 +300,6 @@ class TestPruneResults(object):
assert mc_cru.called
-
def test_prune_project_skip_when_acr_disabled(self, test_pruner, mc_cru, mc_gacs):
self.pruner.prune_failed_builds = MagicMock()
self.pruner.prune_obsolete_success_builds = MagicMock()
@@ -318,7 +317,6 @@ class TestPruneResults(object):
self.pruner.run()
-
def test_main(self, mc_pruner, mc_bcr):
prune_main()
assert mc_pruner.called