diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..c6ca2415d7b5123bf117be1496190c79666a34c5 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,27 @@ +before_script: + - apt-get -q update + - env DEBIAN_FRONTEND=noninteractive apt-get -q -y install --no-install-recommends aspcud apt-cudf + - env DEBIAN_FRONTEND=noninteractive apt-get -q -y --solver aspcud -o APT::Solver::Strict-Pinning=0 -o Debug::pkgProblemResolver=yes install --no-install-recommends + python-sqlalchemy python-pylons python-debian python-babel iso-codes gnupg python-apt python-lxml python-coverage + +.test_template: &test + script: + - mkdir -p /tmp/debexpo/pub + - python2.7 setup.py develop + - python2.7 setup.py compile_catalog + - python2.7 setup.py nosetests --with-coverage --cover-erase --cover-html + artifacts: + paths: + - cover/ + +unstable: + <<: *test + image: debian:unstable + +#testing: +# <<: *test +# image: debian:testing + +stable-bpo: + <<: *test + image: debian:stable-backports diff --git a/debexpo/config/routing.py b/debexpo/config/routing.py index 09237d609301bfcc253f8db88bf92b748b45738e..1c379f6c4796b7b9004586aa85ca1cc40a338c28 100644 --- a/debexpo/config/routing.py +++ b/debexpo/config/routing.py @@ -89,7 +89,6 @@ def make_map(config): #map.connect('packages_filter_feed', '/packages/{filter}/{id}/feed', controller='packages', action='feed') #map.connect('packages_feed', '/packages/feed', controller='packages', action='feed') map.connect('qa', '/qa', controller='index', action='qa') - #map.connect('register', '/register/{action}/{id}', controller='register', action='index', id=None) # LEGACY ROUTE. CAN BE REMOVED LATER map.connect('/upload/{email}/{password}/{filename}', controller='upload', diff --git a/debexpo/controllers/register.py b/debexpo/controllers/register.py index e545306d6efbe27276087299fd540c9c31f521a5..e6ffcc62b9abf2f245c3937d6802492f268fa23e 100644 --- a/debexpo/controllers/register.py +++ b/debexpo/controllers/register.py @@ -60,18 +60,6 @@ class RegisterController(BaseController): """ c.config = config - def index(self): - """ - Entry point to controller. Displays the index page. - """ - log.debug('Main register form requested') - - if config['debexpo.debian_specific'] != 'true': - log.error('debexpo.debian_specific is !true; redirecting to maintainer form') - redirect(url(action='maintainer')) - - return render('/register/index.mako') - def _send_activate_email(self, key, recipient): """ Sends an activation email to the potential new user. diff --git a/debexpo/lib/base.py b/debexpo/lib/base.py index 33d9a7de997b1325d9b587917c80d96145bcc26b..6fa53caf7475741afc75c8136d1d460bb1a9a22d 100644 --- a/debexpo/lib/base.py +++ b/debexpo/lib/base.py @@ -117,7 +117,7 @@ class BaseController(WSGIController): # Set language according to what the browser requested try: languages = request.languages - except AttributeError: + except (AttributeError, TypeError): log.debug("Working around Pylons request.languages bug") languages = [] diff --git a/debexpo/lib/changes.py b/debexpo/lib/changes.py index 8571498940fa14294d528e547fac7187105d3cab..5999fe5b42c39988737d98c1543267f74faac3b2 100644 --- a/debexpo/lib/changes.py +++ b/debexpo/lib/changes.py @@ -69,12 +69,13 @@ class Changes(object): if filename: self._data = deb822.Changes(file(filename)) + self.basename = os.path.basename(filename) + if len(self._data) == 0: + raise Exception('Changes file {} could not be parsed'.format(self.basename)) else: self._data = deb822.Changes(string) - - if len(self._data) == 0: - raise Exception('Changes file could not be parsed.') - self.basename = os.path.basename(filename) + if len(self._data) == 0: + raise Exception('Changes file could not be parsed.') def get_filename(self): """ diff --git a/debexpo/lib/email.py b/debexpo/lib/email.py index 543a7388cf253e3d4b0d6ea822c502317843af93..224fecd18568ccece61a33677bdd8977daf2179d 100644 --- a/debexpo/lib/email.py +++ b/debexpo/lib/email.py @@ -146,6 +146,17 @@ class Email(object): pylons.url._pop_object() + if 'debexpo.testsmtp' in pylons.config: + self._save_as_file(recipients, message) + else: + self._send_as_mail(recipients, message) + + def _save_as_file(self, recipients, message): + log.debug('Save email as file to %s' % self.server) + with open(pylons.config['debexpo.testsmtp'], 'a') as email: + email.write(message) + + def _send_as_mail(self, recipients, message): log.debug('Starting SMTP session to %s' % self.server) session = smtplib.SMTP(self.server) diff --git a/debexpo/lib/filesystem.py b/debexpo/lib/filesystem.py index bc5d556a7adf32b0973b10434eef5da30e567363..8b5425f2472f600fc47b90e259c5e06004ccac75 100644 --- a/debexpo/lib/filesystem.py +++ b/debexpo/lib/filesystem.py @@ -208,6 +208,8 @@ class CheckFiles(object): ```package``` package object whose files are supposed to be removed """ files = self.find_files_for_package(package, absolute_path=True) + if not files: + return path = os.path.dirname(files[0]) for file in files: if os.path.exists(file): diff --git a/debexpo/lib/utils.py b/debexpo/lib/utils.py index a630fa9407a2265432d41652ad56d67cd39c983c..162b134512067742ce0db236f1ac8e182ba1607a 100644 --- a/debexpo/lib/utils.py +++ b/debexpo/lib/utils.py @@ -59,9 +59,9 @@ def parse_section(section): component, thesection = section.split('/', 1) if component not in ("main", "contrib", "non-free"): log.warning("Parsing weird component %s, assuming main" % component) - return main, section.replace('/', '_') + return ['main', section.replace('/', '_')] else: - return component, thesection + return [component, thesection] else: return ['main', section] diff --git a/debexpo/templates/register/index.mako b/debexpo/templates/register/index.mako deleted file mode 100644 index ba74a9547550bcc83a5cf1e4d3c63910ae76a0d7..0000000000000000000000000000000000000000 --- a/debexpo/templates/register/index.mako +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- - -<%inherit file="../base.mako"/> - -

${ _('Sign up for your own account at %s') % c.config['debexpo.sitename'] }

- -

- ${ _('What type of account would you like to apply for?') } -

- -

${ _('Package Maintainer') }

- -

- ${ _('''A package maintainer is a person who takes care of Debian packages. - If you create Debian packages from certain pieces of (so called - "upstream") software then you are a maintainer. You do not need to be - an official Debian Developer (DD) or Debian Maintainer (DM).''') } -

- -

${ _('Sponsor') }

- -

- ${ _('''Uploading new packages into Debian is only possible if you - are a Debian Developer (DD) or Debian Maintainer (DM). If you want - to help package maintainers to get their packages into Debian you - can be a sponsor and check and upload packages on their behalf.''')} -

diff --git a/debexpo/tests/functional/test_index.py b/debexpo/tests/functional/test_index.py index 6f3f45fc1a595b5a9af08471a4a2bb9972d9e239..6b4a7a58cbf34a73c3b9085b626d9b3798b346ab 100644 --- a/debexpo/tests/functional/test_index.py +++ b/debexpo/tests/functional/test_index.py @@ -24,19 +24,12 @@ class TestIndexController(TestController): def test_index(self): # test a normal index page testurl = url(controller='index', action='index') + pylons.test.pylonsapp.config['debexpo.sitename'] = 'test index' response = self.app.get(testurl) - self.assertEquals(response.status_int, 200) - - testtext = '

A test front page

' - pylons.test.pylonsapp.config['debexpo.html.frontpage'] = \ - self._generate_temppage('front.html', testtext) - - response = self.app.get(testurl) + testtext = '

Welcome to test index

' self.assertEquals(response.status_int, 200) self.assertTrue(testtext in response) - del pylons.test.pylonsapp.config['debexpo.html.frontpage'] - def test_contact(self): response = self.app.get(url(controller='index', action='contact')) self.assertEquals(response.status_int, 200) @@ -44,29 +37,14 @@ class TestIndexController(TestController): def test_intro_maintainers(self): testurl = url('intro-maintainers') response = self.app.get(testurl) - self.assertEquals(response.status_int, 200) - - testtext = '

A maintainer intro page

' - pylons.test.pylonsapp.config['debexpo.html.maintainer_intro'] = \ - self._generate_temppage('maintainer_intro.html', testtext) - - response = self.app.get(testurl) + testtext = "{}".format('

Introduction for maintainers: How will my', + ' package get into Debian

') self.assertEquals(response.status_int, 200) self.assertTrue(testtext in response) - del pylons.test.pylonsapp.config['debexpo.html.maintainer_intro'] - def test_intro_sponsors(self): - testurl = url('intro-sponsors') - response = self.app.get(testurl) - self.assertEquals(response.status_int, 200) - - testtext = '

A sponsor intro page

' - pylons.test.pylonsapp.config['debexpo.html.sponsors_intro'] = \ - self._generate_temppage('sponsor_intro.html', testtext) - + testurl = url('sponsors') response = self.app.get(testurl) + testtext = '

The sponsoring process

' self.assertEquals(response.status_int, 200) self.assertTrue(testtext in response) - - del pylons.test.pylonsapp.config['debexpo.html.sponsors_intro'] diff --git a/debexpo/tests/functional/test_my.py b/debexpo/tests/functional/test_my.py index 9e1f145389a2a99477e248d60915bb113845ee77..336eea96eac29648cb55782594c255e14ed44e7b 100644 --- a/debexpo/tests/functional/test_my.py +++ b/debexpo/tests/functional/test_my.py @@ -4,6 +4,9 @@ from debexpo.model import meta from debexpo.model.users import User from debexpo.model.user_countries import UserCountry import md5 +import tempfile +import os +import shutil class TestMyController(TestController): _GPGKEY = """-----BEGIN PGP PUBLIC KEY BLOCK----- @@ -39,7 +42,15 @@ ABRL0EeYuGCJYJRQsw8e8JuRSaVGwfotqkIHtQ== """ _GPG_ID = '2048R/6758261E' + def _setup_gpg_env(self): + self.homedir = tempfile.mkdtemp() + os.environ['GNUPGHOME'] = self.homedir + + def _cleanup_gpg_env(self): + shutil.rmtree(self.homedir) + def setUp(self): + self._setup_gpg_env() self._setup_models() self._setup_example_user() self._setup_example_countries() @@ -47,6 +58,7 @@ ABRL0EeYuGCJYJRQsw8e8JuRSaVGwfotqkIHtQ== def tearDown(self): self._remove_example_user() self._remove_example_countries() + self._cleanup_gpg_env() def test_index(self): response = self.app.get(url(controller='my', action='index')) diff --git a/debexpo/tests/functional/test_package.py b/debexpo/tests/functional/test_package.py index 18d7648b94a139bdf2bd605411845a7ef11c51fa..1febfb7d6c5dc71f3d194adeb1008b0a08efbd11 100644 --- a/debexpo/tests/functional/test_package.py +++ b/debexpo/tests/functional/test_package.py @@ -8,6 +8,7 @@ from debexpo.model.package_versions import PackageVersion from debexpo.model.source_packages import SourcePackage from debexpo.model.package_subscriptions import PackageSubscription from datetime import datetime +import pylons.test class TestPackageController(TestController): @@ -47,6 +48,8 @@ class TestPackageController(TestController): self._remove_example_user() def test_index(self): + user = meta.session.query(User).filter( + User.email=='email@example.com').one() response = self.app.get(url(controller='package', action='index')) self.assertEquals(response.status_int, 302) self.assertTrue(response.location.endswith( @@ -60,8 +63,8 @@ class TestPackageController(TestController): packagename='testpackage')) self.assertEquals(response.status_int, 200) self.assertEquals(len(response.lxml.xpath( - '//a[@href="%s"]' % url( - 'packages-uploader', + '//a[@href="%s"]' % url(controller='packages', + action='uploader', id='email@example.com'))), 1) response = self.app.post(url('login'), self._AUTHDATA) response = self.app.get(url(controller='package', action='index', @@ -70,22 +73,13 @@ class TestPackageController(TestController): self.assertEquals(len(response.lxml.xpath( '//a[@href="%s"]' % url( controller='package', action='delete', - packagename='testpackage'))), 1) + packagename='testpackage', + key=user.get_upload_key()))), 1) self.assertEquals(len(response.lxml.xpath( '//form[@action="%s"]' % url( controller='package', action='comment', packagename='testpackage'))), 1) - def test_rfs(self): - response = self.app.get(url(controller='package', action='rfs')) - self.assertEquals(response.status_int, 302) - self.assertTrue(response.location.endswith( - url(controller='packages', action='index', packagename=None))) - response = self.app.get(url(controller='package', action='rfs', - packagename='testpackage')) - self.assertEquals(response.status_int, 200) - self.assertTrue('Subject: RFS: testpackage' in response) - def test_subscribe(self): response = self.app.get(url(controller='package', action='subscribe', packagename='testpackage')) @@ -157,31 +151,35 @@ class TestPackageController(TestController): self.assertEquals(subs, None) def test_delete(self): - response = self.app.get(url(controller='package', action='delete', - packagename='testpackage')) + user = meta.session.query(User).filter( + User.email=='email@example.com').one() + response = self.app.get(url( + controller='package', action='delete', packagename='testpackage', + key=user.get_upload_key())) self.assertEquals(response.status_int, 302) self.assertTrue(response.location.endswith(url('login'))) self.app.post(url('login'), self._AUTHDATA) - response = self.app.get(url(controller='package', action='delete', - packagename='testpackage')) + response = self.app.get(url( + controller='package', action='delete', packagename='testpackage', + key=user.get_upload_key())) self.assertEquals(response.status_int, 302) self.assertTrue(response.location.endswith( - url(controller='packages', action='index', filter='my'))) + url(controller='packages', action='my'))) package = meta.session.query(Package).filter( Package.name=='testpackage').first() self.assertEquals(package, None) def test_comment(self): - response = self.app.get(url(controller='package', action='comment', - packagename='testpackage')) + response = self.app.post( + url(controller='package', action='comment', + packagename='testpackage'), + {'package_version': 1, + 'text': 'This is a test comment', + 'outcome': constants.PACKAGE_COMMENT_OUTCOME_UNREVIEWED, + 'commit': 'submit'}) self.assertEquals(response.status_int, 302) self.assertTrue(response.location.endswith(url('login'))) self.app.post(url('login'), self._AUTHDATA) - response = self.app.get(url(controller='package', action='comment', - packagename='testpackage')) - self.assertEquals(response.status_int, 200) - self.assertEquals(4, len(response.lxml.xpath( - '//span[@class="error-message"]'))) response = self.app.post( url(controller='package', action='comment', packagename='testpackage'), @@ -200,6 +198,7 @@ class TestPackageController(TestController): constants.PACKAGE_COMMENT_STATUS_NOT_UPLOADED) meta.session.delete(comment) # test with a subscriber + pylons.test.pylonsapp.config['debexpo.testsmtp'] = '/tmp/debexpo.msg' user = meta.session.query(User).filter(User.email=='email@example.com').one() packsub = PackageSubscription( package='testpackage', diff --git a/debexpo/tests/functional/test_packages.py b/debexpo/tests/functional/test_packages.py index e3f094db435a6deed0dd2eae8ba537bc24ecacb6..0c8d1ccf82774dbd89d37b96caf09cd4c6109eed 100644 --- a/debexpo/tests/functional/test_packages.py +++ b/debexpo/tests/functional/test_packages.py @@ -2,6 +2,13 @@ from debexpo.tests import * class TestPackagesController(TestController): + def setUp(self): + self._setup_models() + self._setup_example_user() + + def tearDown(self): + self._remove_example_user() + def test_index(self): response = self.app.get(url(controller='packages', action='index')) self.assertEquals(200, response.status_int) diff --git a/debexpo/tests/functional/test_ppa.py b/debexpo/tests/functional/test_ppa.py deleted file mode 100644 index fc4a31219eabea46dd57822035ef23905e169e26..0000000000000000000000000000000000000000 --- a/debexpo/tests/functional/test_ppa.py +++ /dev/null @@ -1,7 +0,0 @@ -from debexpo.tests import * - -class TestPpaController(TestController): - - def test_index(self): - response = self.app.get(url(controller='ppa', action='index')) - # Test response... diff --git a/debexpo/tests/functional/test_register.py b/debexpo/tests/functional/test_register.py index 0a2359e001e949bb8134c734b940711899955d3a..f68f5508cbaa8fe8145cf540a1a4b6ced3d0a34d 100644 --- a/debexpo/tests/functional/test_register.py +++ b/debexpo/tests/functional/test_register.py @@ -1,19 +1,25 @@ from debexpo.tests import TestController, url from debexpo.model import meta from debexpo.model.users import User +import pylons.test class TestRegisterController(TestController): + def setUp(self): + self._setup_models() + def test_maintainer_signup(self, actually_delete_it=True): count = meta.session.query(User).filter(User.email=='mr_me@example.com').count() self.assertEquals(count, 0) - self.app.post(url(controller='register', action='maintainer'), + pylons.test.pylonsapp.config['debexpo.testsmtp'] = '/tmp/debexpo.msg' + self.app.post(url(controller='register', action='register'), {'name': 'Mr. Me', 'password': 'password', 'password_confirm': 'password', 'commit': 'yes', - 'email': 'mr_me@example.com'}) + 'email': 'mr_me@example.com', + 'sponsor': '0'}) count = meta.session.query(User).filter(User.email=='mr_me@example.com').count() self.assertEquals(count, 1) @@ -28,12 +34,13 @@ class TestRegisterController(TestController): def test_maintainer_signup_with_duplicate_name(self): self.test_maintainer_signup(actually_delete_it=False) - self.app.post(url(controller='register', action='maintainer'), + self.app.post(url(controller='register', action='register'), {'name': 'Mr. Me', 'password': 'password', 'password_confirm': 'password', 'commit': 'yes', - 'email': 'mr_me_again@example.com'}) + 'email': 'mr_me_again@example.com', + 'sponsor': '0'}) count = meta.session.query(User).filter(User.email=='mr_me_again@example.com').count() self.assertEquals(count, 0) diff --git a/debexpo/tests/functional/test_upload.py b/debexpo/tests/functional/test_upload.py index e1c8cc8efb2d093cd2fe847ddd7f18798590ac3c..52b29d29d1b9b0c0e73835a9b1c91ea0a6987dc8 100644 --- a/debexpo/tests/functional/test_upload.py +++ b/debexpo/tests/functional/test_upload.py @@ -50,10 +50,6 @@ class TestUploadController(TestController): """ TestController.__init__(self, *args, **kwargs) - # Keep this so tests don't have to constantly create it. - self.user_upload_key = 'upload_key' - self.email = 'email@example.com' - def setUp(self): self._setup_models() self._setup_example_user() @@ -66,56 +62,16 @@ class TestUploadController(TestController): Tests whether requests where method != PUT are rejected with error code 405. """ response = self.app.get(url(controller='upload', action='index', - email=self.email, password=self.user_upload_key, filename='testname.dsc'), expect_errors=True) self.assertEqual(response.status_int, 405) - def testNoAuthorization(self): - """ - Tests whether requests where the "Authorization" header is missing are rejected with - error code 401 and whether the "WWW-Authenticate" header is sent in the response with - the correct "realm" syntax. - """ - response = self.app.put( - url(controller='upload', action='index', - filename='testname.dsc', email='email', password='pass'), expect_errors=True) - - self.assertEqual(response.status_int, 403) - - def testFalseAuthentication(self): - """ - Tests whether false authentication details returns a 403 error code. - """ - response = self.app.put(url(controller='upload', action='index', - filename='testname.dsc', email=self.email, - password='wrong'), - expect_errors=True) - - self.assertEqual(response.status_int, 403) - - def testTrueAuthentication(self): - """ - Tests whether true authentication details returns a nicer error code. - """ - response = self.app.put(url(controller='upload', action='index', - filename='testname.dsc', email=self.email, - password=self.user_upload_key), - expect_errors=False) - - self.assertNotEqual(response.status_int, 403) - app_config = pylons.test.pylonsapp.config - - if os.path.isfile(os.path.join(app_config['debexpo.upload.incoming'], 'testfile1.dsc')): - os.remove(os.path.join(app_config['debexpo.upload.incoming'], 'testfile1.dsc')) - def testExtensionNotAllowed(self): """ Tests whether uploads of an unknown file extensions are rejected with error code 403. """ response = self.app.put(url(controller='upload', action='index', - filename='testname.unknown', email=self.email, - password=self.user_upload_key), + filename='testname.unknown'), expect_errors=True) self.assertEqual(response.status_int, 403) @@ -126,19 +82,46 @@ class TestUploadController(TestController): """ response = self.app.put(url( controller='upload', action='index', - filename='testfile2.dsc', - email=self.email, - password=self.user_upload_key), + filename='testfile2.dsc'), params='contents', expect_errors=False) self.assertEqual(response.status_int, 200) app_config = pylons.test.pylonsapp.config self.assertTrue(os.path.isfile(os.path.join(app_config['debexpo.upload.incoming'], + 'pub', 'testfile2.dsc'))) self.assertEqual(file(os.path.join(app_config['debexpo.upload.incoming'], + 'pub', 'testfile2.dsc')).read(), 'contents') - if os.path.isfile(os.path.join(app_config['debexpo.upload.incoming'], 'testfile2.dsc')): - os.remove(os.path.join(app_config['debexpo.upload.incoming'], 'testfile2.dsc')) + if os.path.isfile(os.path.join(app_config['debexpo.upload.incoming'], + 'pub', 'testfile2.dsc')): + os.remove(os.path.join(app_config['debexpo.upload.incoming'], + 'pub', 'testfile2.dsc')) + + def testDuplicatedUpload(self): + """ + Tests whether a re-uploads of the same file failed with error code 403. + """ + response = self.app.put(url( + controller='upload', action='index', + filename='testfile.dsc'), + params='contents', expect_errors=False) + + self.assertEqual(response.status_int, 200) + + response = self.app.put(url( + controller='upload', action='index', + filename='testfile.dsc'), + params='contents', expect_errors=True) + + self.assertEqual(response.status_int, 403) + + app_config = pylons.test.pylonsapp.config + + if os.path.isfile(os.path.join(app_config['debexpo.upload.incoming'], + 'pub', 'testfile.dsc')): + os.remove(os.path.join(app_config['debexpo.upload.incoming'], + 'pub', 'testfile.dsc')) diff --git a/debexpo/tests/test_utils.py b/debexpo/tests/test_utils.py index 71d08b5f56c9036a9e99375948b778b7c33ce367..8e37067a2784afa783bdfb7d9b32a2025b061daf 100644 --- a/debexpo/tests/test_utils.py +++ b/debexpo/tests/test_utils.py @@ -39,6 +39,7 @@ from unittest import TestCase from debexpo.lib.utils import * from debexpo.lib.changes import Changes +from debexpo.lib.filesystem import CheckFiles class TestUtilsController(TestCase): @@ -46,7 +47,7 @@ class TestUtilsController(TestCase): """ Tests debexpo.lib.utils.allowed_upload. """ - t = allowed_upload + t = CheckFiles().allowed_upload self.assertTrue(t('foo_version.orig.tar.gz')) self.assertTrue(t('foo_version.tar.gz')) @@ -64,7 +65,7 @@ class TestUtilsController(TestCase): t = parse_section self.assertEqual(t('section'), ['main', 'section']) - self.assertEqual(t('component/section'), ['component', 'section']) + self.assertEqual(t('contrib/section'), ['contrib', 'section']) def testGetPackageDir(self): """ diff --git a/development.ini b/development.ini index 1c9b69dec9c703a85f13dcdd6f3bd800222ce7f6..a43360dc88fb1d14b8dadfe3e642ee084909347e 100644 --- a/development.ini +++ b/development.ini @@ -109,6 +109,8 @@ debexpo.cronjob_delay = 60 # NNTP server to connect to fetch mailing list comments/changes debexpo.nntp_server = news.gmane.org +debexpo.enable_experimental_code = false + # Logging configuration [loggers] keys = root, debexpo diff --git a/setup.py b/setup.py index bab43e721cd7830cbb443deba39d3d6204e6d9e1..6a4d05bb05504e411eb1d88263029372e006cb77 100644 --- a/setup.py +++ b/setup.py @@ -38,5 +38,8 @@ setup( debexpo-importer = debexpo.bin.debexpo_importer:main debexpo-worker = debexpo.bin.debexpo_worker debexpo-user-importer = debexpo.bin.user_importer:main + + [nose.plugins] + pylons = pylons.test:PylonsPlugin """, ) diff --git a/test.ini b/test.ini index 2a9a438e8a3a95947143f4c66384d2ed2f00c0c3..8170a9af81e2e90fad2697fb78ad44df0bc8036b 100644 --- a/test.ini +++ b/test.ini @@ -62,6 +62,12 @@ debexpo.gpg_path = /usr/bin/gpg # Server debexpo is being run on including http:// and excluding trailing slash debexpo.server = http://localhost:5000 +debexpo.sitetitle = Testing + +debexpo.gpg_keyring = /tmp/keyring + +debexpo.enable_experimental_code = False + [loggers] keys = root, debexpo