From 880f5e7a12afa73638d131569db0c3677135ad73 Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: Mar 26 2019 19:43:24 +0000 Subject: [PATCH 1/4] Make sure that hooks are run during repoSpanner tests Signed-off-by: Patrick Uiterwijk --- diff --git a/tests/test_pagure_repospanner.py b/tests/test_pagure_repospanner.py index eadf6ef..a98e136 100644 --- a/tests/test_pagure_repospanner.py +++ b/tests/test_pagure_repospanner.py @@ -254,6 +254,11 @@ class PagureRepoSpannerTests(tests.Modeltests): self.tearDown() raise + # Upload the hook script to repoSpanner + args = munch.Munch({'region': 'default'}) + hookid = pagure.cli.admin.do_upload_repospanner_hooks(args) + pagure.config.config['REPOSPANNER_REGIONS']['default']['hook'] = hookid + def tearDown(self): """ Tear down the repoSpanner instance. """ if self.repospanner_proc: @@ -409,10 +414,6 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): ast.return_value = False pagure.cli.admin.session = self.session - # Upload the hook script to repoSpanner - args = munch.Munch({'region': 'default'}) - hookid = pagure.cli.admin.do_upload_repospanner_hooks(args) - user = tests.FakeUser(username='foo') with tests.user_set(self.app.application, user): data = { @@ -443,11 +444,6 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): output_text = output.get_data(as_text=True) self.assertEqual(output_text, '# project-1\n\nProject #1') - # Set the hook - args = munch.Munch({'hook': hookid}) - projects = pagure.cli.admin.do_ensure_project_hooks(args) - self.assertEqual(["project-1"], projects) - with tests.user_set(self.app.application, user): # Set editing Denied self.set_auth_status(False) From 3c1099a9424499d99dfa3d59f8003414de41a93a Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: Mar 26 2019 20:01:25 +0000 Subject: [PATCH 2/4] Verify that forking does not run hooks Signed-off-by: Patrick Uiterwijk --- diff --git a/tests/test_pagure_repospanner.py b/tests/test_pagure_repospanner.py index a98e136..bc43da9 100644 --- a/tests/test_pagure_repospanner.py +++ b/tests/test_pagure_repospanner.py @@ -316,6 +316,9 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): output.get_data(as_text=True)) with tests.user_set(self.app.application, tests.FakeUser(username='pingou')): + # Verify that for forking, Git auth status is ignored (hooks should not be run) + self.set_auth_status(False) + data = { 'csrf_token': self.get_csrf(), } @@ -331,6 +334,7 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): self.assertIn( 'Overview - project-1 - Pagure', output_text) self.assertIn('Added the README', output_text) + self.assertIn('/?next=http://localhost/fork/pingou/project-1', output_text) output = self.app.get('/fork/pingou/project-1/settings') self.assertIn( From fe3f8f522d5d9f6444d09ad37f5a21aafb61ded6 Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: Mar 26 2019 20:05:43 +0000 Subject: [PATCH 3/4] Fix skipping hooks on fork pushing on repoSpanner The repoSpanner case was broken by a9f8f56dc because that stopped passing "internal". Signed-off-by: Patrick Uiterwijk --- diff --git a/pagure/hooks/files/repospannerhook b/pagure/hooks/files/repospannerhook index 24270b6..80e0a90 100755 --- a/pagure/hooks/files/repospannerhook +++ b/pagure/hooks/files/repospannerhook @@ -13,6 +13,12 @@ from __future__ import print_function, absolute_import import os import sys +if os.environ.get("extra_internal_no_hooks", False): + # we do this check before any pagure machinery is imported + # and initialized to make sure this is very fast (used + # when pushing code from original repos to forks) + sys.exit(0) + # These fields get filled in by upload-repospanner-hooks os.environ["PAGURE_CONFIG"] = "${config}" PYPATH = "${pypath}" From 69ea3d131a4062b54e0d123429c0cd48406d8746 Mon Sep 17 00:00:00 2001 From: Patrick Uiterwijk Date: Mar 27 2019 10:13:14 +0000 Subject: [PATCH 4/4] Print repoSpanner logs after test finishes Signed-off-by: Patrick Uiterwijk --- diff --git a/tests/test_pagure_repospanner.py b/tests/test_pagure_repospanner.py index bc43da9..63a6ad5 100644 --- a/tests/test_pagure_repospanner.py +++ b/tests/test_pagure_repospanner.py @@ -11,6 +11,7 @@ from __future__ import unicode_literals, absolute_import import datetime +import functools import munch import unittest import shutil @@ -213,7 +214,7 @@ class PagureRepoSpannerTests(tests.Modeltests): ) self.repospanner_runlog = open( - os.path.join(self.path, 'repospanner', 'runlog'), 'w') + os.path.join(self.path, 'repospanner', 'runlog'), 'w+') try: self.repospanner_proc = subprocess.Popen( @@ -274,12 +275,27 @@ class PagureRepoSpannerTests(tests.Modeltests): super(PagureRepoSpannerTests, self).tearDown() +def print_repospanner_log(fn): + @functools.wraps(fn) + def wrapper(self, *args, **kwargs): + try: + return fn(self, *args, **kwargs) + finally: + if self.repospanner_runlog: + self.repospanner_runlog.seek(0, 0,) + print("repoSpanner log follows:") + print(self.repospanner_runlog.read()) + + return wrapper + + class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): config_values = { 'repospanner_new_repo': "'default'", 'authbackend': 'test_auth', } + @print_repospanner_log @patch('pagure.ui.app.admin_session_timedout') def test_new_project(self, ast): """ Test creating a new repo by default on repoSpanner works. """ @@ -345,6 +361,7 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): repodirlist = os.listdir(os.path.join(self.path, 'repos')) self.assertEqual(repodirlist, ['pseudo']) + @print_repospanner_log @patch.dict('pagure.config.config', { 'ALLOW_HTTP_PULL_PUSH': True, 'ALLOW_HTTP_PUSH': True, @@ -381,6 +398,7 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): output_text = output.get_data(as_text=True) self.assertIn("Error processing your request", output_text) + @print_repospanner_log @patch.dict('pagure.config.config', { 'ALLOW_HTTP_PULL_PUSH': True, 'ALLOW_HTTP_PUSH': True, @@ -412,6 +430,7 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): self.assertIn("symref=HEAD:refs/heads/master", output_text) self.assertIn(" refs/heads/master\x00", output_text) + @print_repospanner_log @patch('pagure.ui.app.admin_session_timedout') def test_hooks(self, ast): """ Test hook setting and running works. """ @@ -509,6 +528,7 @@ class PagureRepoSpannerTestsNewRepoDefault(PagureRepoSpannerTests): output_text = output.get_data(as_text=True) self.assertEqual(output_text, 'foo\n bar\n baz') + @print_repospanner_log @patch.dict('pagure.config.config', {'PAGURE_ADMIN_USERS': ['pingou'], 'ALLOW_ADMIN_IGNORE_EXISTING_REPOS': True}) @patch('pagure.ui.app.admin_session_timedout')