Changed the code test coverage checking to never register coverage counts for tests that are sometimes skipped. Removed now unwanted skip settings from the releasetest settings.

- Legacy-Id: 11453
This commit is contained in:
Henrik Levkowetz 2016-06-21 20:39:28 +00:00
parent bb1ef1a447
commit 6fa181763b
7 changed files with 40 additions and 9 deletions

View file

@ -13,6 +13,7 @@ import debug # pyflakes:ignore
from ietf.group.models import Role, Group
from ietf.group.utils import get_group_role_emails, get_child_group_role_emails, get_group_ad_emails
from ietf.group.factories import GroupFactory
from ietf.utils.test_utils import set_coverage_checking
from ietf.utils.test_data import make_test_data
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent
@ -64,6 +65,12 @@ class StreamTests(TestCase):
@skipIf(skip_dot_to_pdf, skip_message)
class GroupDocDependencyGraphTests(TestCase):
def setUp(self):
set_coverage_checking(False)
def tearDown(self):
set_coverage_checking(True)
def test_group_document_dependency_dotfile(self):
make_test_data()
for group in Group.objects.filter(Q(type="wg") | Q(type="rg")):

View file

@ -18,6 +18,7 @@ from ietf.person.models import Person, Email
from ietf.group.models import Group, Role, RoleName
from ietf.ietfauth.htpasswd import update_htpasswd_file
from ietf.mailinglists.models import Subscribed
from ietf.utils.decorators import skip_coverage
import ietf.ietfauth.views
@ -336,6 +337,7 @@ class IetfAuthTests(TestCase):
self.assertTrue(self.username_in_htpasswd_file("foo"))
@skipIf(skip_htpasswd_command, skip_message)
@skip_coverage
def test_htpasswd_file_with_htpasswd_binary(self):
# make sure we test both Python and call-out to binary
settings.USE_PYTHON_HTDIGEST = False

View file

@ -10,6 +10,7 @@ import debug # pyflakes:ignore
from ietf.group import colors
from ietf.meeting.test_data import make_meeting_test_data
from ietf.meeting.models import SchedTimeSessAssignment
from ietf.utils.test_utils import set_coverage_checking
from ietf import settings
skip_selenium = getattr(settings,'SKIP_SELENIUM',None)
@ -33,10 +34,14 @@ def condition_data():
@skipIf(skip_selenium, skip_message)
class ScheduleEditTests(StaticLiveServerTestCase):
def setUp(self):
set_coverage_checking(False)
condition_data()
self.driver = webdriver.PhantomJS(service_log_path=settings.TEST_GHOSTDRIVER_LOG_PATH)
self.driver.set_window_size(1024,768)
def tearDown(self):
set_coverage_checking(True)
def debugSnapshot(self,filename='debug_this.png'):
self.driver.execute_script("document.body.bgColor = 'white';")
self.driver.save_screenshot(filename)
@ -75,10 +80,14 @@ class ScheduleEditTests(StaticLiveServerTestCase):
@skipIf(skip_selenium, skip_message)
class InterimRequestTests(StaticLiveServerTestCase):
def setUp(self):
set_coverage_checking(False)
condition_data()
self.driver = webdriver.PhantomJS(service_log_path=settings.TEST_GHOSTDRIVER_LOG_PATH)
self.driver.set_window_size(1024,768)
def tearDown(self):
set_coverage_checking(True)
def absreverse(self,*args,**kwargs):
return '%s%s'%(self.live_server_url,urlreverse(*args,**kwargs))

View file

@ -28,14 +28,6 @@ class DisableMigrations(object):
MIGRATION_MODULES = DisableMigrations()
# Set the SKIP_* variables to True in order to disable tests which won't
# normally run on developer's laptop, in order to not create
# release-coverage.json data which sets people up for test suite failures on a
# clean checkout
SKIP_DOT_TO_PDF = True
SKIP_SELENIUM = True
DATABASES = {
'default': {
'NAME': 'test.db',

16
ietf/utils/decorators.py Normal file
View file

@ -0,0 +1,16 @@
# Copyright The IETF Trust 2016, All Rights Reserved
from decorator import decorator
from django.conf import settings
@decorator
def skip_coverage(f, *args, **kwargs):
if settings.TEST_CODE_COVERAGE_CHECKER:
checker = settings.TEST_CODE_COVERAGE_CHECKER
checker.collector.pause()
result = f(*args, **kwargs)
checker.collector.resume()
return result
else:
return f(*args, **kwargs)

View file

@ -222,7 +222,7 @@ class CoverageTest(TestCase):
# only running some tests, then of course the coverage is going to be low.
if self.runner.run_full_test_suite:
# Permit 0.02% variation in results -- otherwise small code changes become a pain
fudge_factor = 0.0002 # 0.02% -- a small change in the last digit we show
fudge_factor = 0.00005 # 0.005% -- a small change, less than the last digit we show
self.assertGreaterEqual(test_coverage, master_coverage - fudge_factor,
msg = "The %s coverage percentage is now lower (%.2f%%) than for version %s (%.2f%%)" %
( test, test_coverage*100, latest_coverage_version, master_coverage*100, ))

View file

@ -295,3 +295,8 @@ class TestCase(django.test.TestCase):
self.assertTrue(resp['Content-Type'].startswith('text/html'))
self.assertValidHTML(resp.content)
def set_coverage_checking(flag=True):
if flag:
settings.TEST_CODE_COVERAGE_CHECKER.collector.resume()
else:
settings.TEST_CODE_COVERAGE_CHECKER.collector.pause()