From 76b0c958a5e92e25779c60b5f5f9af8a6e7440c8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 05 2018 16:53:36 +0000 Subject: [PATCH 1/4] Fix running the py3 tests using runtests3.sh Signed-off-by: Pierre-Yves Chibon --- diff --git a/tests/test_stream_server.py b/tests/test_stream_server.py index 70f8ac5..ba77e9c 100644 --- a/tests/test_stream_server.py +++ b/tests/test_stream_server.py @@ -29,6 +29,9 @@ sys.path.insert(0, os.path.join(os.path.dirname( sys.path.insert(0, os.path.join(os.path.dirname( os.path.abspath(__file__)), '../pagure-ev')) +if six.PY3: + raise unittest.case.SkipTest('Skipping on python3') + import pagure # pylint: disable=wrong-import-position from pagure.exceptions import PagureEvException # pylint: disable=wrong-import-position import tests # pylint: disable=wrong-import-position From 3e9b1df0f5a34343bdf1436b4f58bf41cb0a46e3 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 06 2018 12:20:06 +0000 Subject: [PATCH 2/4] Make the unit-tests pass on the python-wtforms 2.2+ Signed-off-by: Pierre-Yves Chibon --- diff --git a/tests/__init__.py b/tests/__init__.py index c63b04e..c835b2d 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -428,6 +428,18 @@ class SimplePagureTest(unittest.TestCase): return output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + def get_wtforms_version(self): + """Returns the wtforms version as a tuple.""" + import wtforms + wtforms_v = wtforms.__version__.split('.') + for idx, val in enumerate(wtforms_v): + try: + val = int(val) + except ValueError: + pass + wtforms_v[idx] = val + return tuple(wtforms_v) + def assertURLEqual(self, url_1, url_2): url_parsed_1 = list(urlparse(url_1)) url_parsed_1[4] = parse_qs(url_parsed_1[4]) diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index 9557498..c346bae 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -637,9 +637,15 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( '
\n Basic Information\n' '
', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', + output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -687,9 +693,15 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( '
\n Basic Information\n' '
', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -943,9 +960,15 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( '
\n Basic Information\n' '
', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', + output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -961,12 +984,18 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( '
\n Basic Information\n' '
', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', + output_text) + else: + self.assertIn( + '', output_text) self.assertIn( - '', output_text) - self.assertIn( - '\n You must always have at least one email', - output_text) + '\n You must always have at ' + 'least one email', output_text) user.username = 'pingou' with tests.user_set(self.app.application, user): @@ -976,9 +1005,15 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( '
\n Basic Information\n' '
', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', + output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -1055,9 +1090,14 @@ class PagureFlaskApptests(tests.Modeltests): self.assertEqual(output.status_code, 200) output_text = output.get_data(as_text=True) self.assertIn("Add new email", output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) user.username = 'pingou' with tests.user_set(self.app.application, user): @@ -1065,9 +1105,14 @@ class PagureFlaskApptests(tests.Modeltests): self.assertEqual(output.status_code, 200) output_text = output.get_data(as_text=True) self.assertIn("Add new email", output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -1181,9 +1226,15 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( '
\n Basic Information\n' '
', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', + output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -1277,9 +1328,14 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( '
\n Basic Information\n' '
', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] diff --git a/tests/test_pagure_flask_ui_plugins_mail.py b/tests/test_pagure_flask_ui_plugins_mail.py index 9cd0ff3..e24b5c6 100644 --- a/tests/test_pagure_flask_ui_plugins_mail.py +++ b/tests/test_pagure_flask_ui_plugins_mail.py @@ -109,10 +109,16 @@ class PagureFlaskPluginMailtests(tests.SimplePagureTest): self.assertIn('

Mail settings

', output_text) self.assertNotIn( '\n Hook activated', output_text) - self.assertIn( - '\n' - 'This field is required.', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '\n' + 'This field is required.', output_text) + else: + self.assertIn( + '\n' + 'This field is required.', output_text) self.assertIn( '', output_text) diff --git a/tests/test_pagure_flask_ui_plugins_noff.py b/tests/test_pagure_flask_ui_plugins_noff.py index 8924506..1233c4e 100644 --- a/tests/test_pagure_flask_ui_plugins_noff.py +++ b/tests/test_pagure_flask_ui_plugins_noff.py @@ -45,9 +45,14 @@ class PagureFlaskPluginNoFFtests(tests.SimplePagureTest): self.assertIn( '

Block non fast-forward pushes settings

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertTrue( '' in output_text) @@ -67,9 +72,14 @@ class PagureFlaskPluginNoFFtests(tests.SimplePagureTest): self.assertIn( '

Block non fast-forward pushes settings

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertTrue( '' in output_text) @@ -99,9 +109,14 @@ class PagureFlaskPluginNoFFtests(tests.SimplePagureTest): self.assertIn( '

Block non fast-forward pushes settings

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertTrue( '' in output_text) @@ -126,9 +141,14 @@ class PagureFlaskPluginNoFFtests(tests.SimplePagureTest): self.assertNotIn( '\n Hook activated', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertTrue( '' in output_text) @@ -165,9 +185,14 @@ class PagureFlaskPluginNoFFtests(tests.SimplePagureTest): self.assertIn( '

Block non fast-forward pushes settings

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertIn( '', output_text) @@ -199,9 +224,14 @@ class PagureFlaskPluginNoFFtests(tests.SimplePagureTest): self.assertIn( '

Block non fast-forward pushes settings

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertIn( '', output_text) diff --git a/tests/test_pagure_flask_ui_plugins_pagure_ci.py b/tests/test_pagure_flask_ui_plugins_pagure_ci.py index 344a986..0dfd04c 100644 --- a/tests/test_pagure_flask_ui_plugins_pagure_ci.py +++ b/tests/test_pagure_flask_ui_plugins_pagure_ci.py @@ -179,14 +179,29 @@ class PagureFlaskPluginPagureCItests(tests.SimplePagureTest): self.assertIn('

Pagure CI settings

', output_text) self.assertFalse( '\n Hook activated' in output_text) - self.assertIn( - '' - '\nThis field is required.', - output_text) - self.assertIn( - '' - '\nThis field is required.', - output_text) + + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '' + '\nThis field is required.', + output_text) + self.assertIn( + '' + '\nThis field is required.', + output_text) + else: + self.assertIn( + '' + '\nThis field is required.', + output_text) + self.assertIn( + '' + '\nThis field is required.', + output_text) self.assertIn( '', output_text) diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index ad42375..82ba0b9 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -4505,9 +4505,14 @@ index 0000000..fb7093d self.assertIn( 'Settings - test - Pagure', output_text) self.assertIn('

Settings for test

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] @@ -4542,11 +4547,19 @@ index 0000000..fb7093d self.assertIn( 'Settings - test - Pagure', output_text) self.assertIn('

Settings for test

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertIn( '\n Default branch updated ' 'to feature', output_text) @@ -4564,11 +4577,19 @@ index 0000000..fb7093d self.assertIn( 'Settings - test - Pagure', output_text) self.assertIn('

Settings for test

', output_text) - self.assertIn( - '', output_text) + if self.get_wtforms_version() >= (2, 2): + self.assertIn( + '', output_text) + else: + self.assertIn( + '', output_text) self.assertIn( '\n Default branch updated ' 'to master', output_text) From 88d13cf7e48fbf076e7fe4856d3dfeefddfb58ef Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 06 2018 12:20:06 +0000 Subject: [PATCH 3/4] Simplify the csrf retrieval Signed-off-by: Pierre-Yves Chibon --- diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index c346bae..3c8eaa1 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -647,8 +647,7 @@ class PagureFlaskApptests(tests.Modeltests): '', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) data = { 'ssh_key': 'blah' @@ -820,8 +819,7 @@ class PagureFlaskApptests(tests.Modeltests): '', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) # With CSRF data['csrf_token'] = csrf_token @@ -886,8 +884,7 @@ class PagureFlaskApptests(tests.Modeltests): '
\n Basic Information\n' '
', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) tests.create_projects(self.session) tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True) @@ -916,8 +913,7 @@ class PagureFlaskApptests(tests.Modeltests): '
\n Basic Information\n' '
', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) tests.create_projects(self.session) tests.create_projects_git(os.path.join(self.path, 'repos'), bare=True) @@ -970,8 +966,7 @@ class PagureFlaskApptests(tests.Modeltests): '', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) data = { 'email': 'foo@pingou.com', @@ -1015,8 +1010,7 @@ class PagureFlaskApptests(tests.Modeltests): '', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) data = { 'email': 'foo@pingou.com', @@ -1236,8 +1230,7 @@ class PagureFlaskApptests(tests.Modeltests): '', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) data = { 'email': 'foo@pingou.com', @@ -1337,8 +1330,7 @@ class PagureFlaskApptests(tests.Modeltests): '', output_text) - csrf_token = output_text.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) data = { 'email': 'foo@pingou.com', From 084f28343dc351244cfd30927a8887afc2c86b26 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 06 2018 13:57:19 +0000 Subject: [PATCH 4/4] Let's try speeding up running the tests in jenkins Signed-off-by: Pierre-Yves Chibon --- diff --git a/run_ci_tests.sh b/run_ci_tests.sh index 5b1d9e8..ba5776a 100755 --- a/run_ci_tests.sh +++ b/run_ci_tests.sh @@ -5,7 +5,8 @@ yum install -y python-virtualenv python34 python34-devel \ libgit2 libgit2-devel python-pygit2 \ redis swig openssl-devel m2crypto \ python2-fedmsg python34-fedmsg-core fedmsg \ - python-tox python-pip python34-pip + python-tox python-pip python34-pip \ + parallel sysctl -w fs.file-max=2048 @@ -30,10 +31,13 @@ echo "Last commits:" git log -2 fi -pip install --upgrade tox +pip install --upgrade detox pip install --upgrade --force-reinstall pygments chardet pip3 install "pygit2 == `rpm -q libgit2 --queryformat='%{version}'`" -tox --sitepackages -e 'py{27,34}-flask011-ci' -- -v --with-xcoverage --cover-erase --cover-package=pagure +parallel -v ::: \ +"tox --sitepackages -e 'py27-flask011-ci' -- -v --with-xcoverage --cover-erase --cover-package=pagure" \ +"tox --sitepackages -e 'py34-flask011-ci' -- -v --with-xcoverage --cover-erase --cover-package=pagure" + set +e