mirror of
https://github.com/quay/quay.git
synced 2025-04-18 10:44:06 +03:00
* chore: drop deprecated tables and remove unused code * isort imports * migration: check for table existence before drop
576 lines
19 KiB
Python
576 lines
19 KiB
Python
import json
|
|
|
|
import pytest
|
|
from jsonschema import validate
|
|
|
|
from buildtrigger.basehandler import METADATA_SCHEMA
|
|
from buildtrigger.bitbuckethandler import get_transformed_commit_info as bb_commit
|
|
from buildtrigger.bitbuckethandler import get_transformed_webhook_payload as bb_webhook
|
|
from buildtrigger.customhandler import custom_trigger_payload
|
|
from buildtrigger.githubhandler import get_transformed_webhook_payload as gh_webhook
|
|
from buildtrigger.gitlabhandler import get_transformed_webhook_payload as gl_webhook
|
|
from buildtrigger.triggerutil import SkipRequestException
|
|
|
|
|
|
def assertSkipped(filename, processor, *args, **kwargs):
|
|
with open("buildtrigger/test/triggerjson/%s.json" % filename) as f:
|
|
payload = json.loads(f.read())
|
|
|
|
nargs = [payload]
|
|
nargs.extend(args)
|
|
|
|
with pytest.raises(SkipRequestException):
|
|
processor(*nargs, **kwargs)
|
|
|
|
|
|
def assertSchema(filename, expected, processor, *args, **kwargs):
|
|
with open("buildtrigger/test/triggerjson/%s.json" % filename) as f:
|
|
payload = json.loads(f.read())
|
|
|
|
nargs = [payload]
|
|
nargs.extend(args)
|
|
|
|
created = processor(*nargs, **kwargs)
|
|
assert created == expected
|
|
validate(created, METADATA_SCHEMA)
|
|
|
|
|
|
def test_custom_custom():
|
|
expected = {
|
|
"commit": "1c002dd",
|
|
"commit_info": {
|
|
"url": "gitsoftware.com/repository/commits/1234567",
|
|
"date": "timestamp",
|
|
"message": "initial commit",
|
|
"committer": {
|
|
"username": "user",
|
|
"url": "gitsoftware.com/users/user",
|
|
"avatar_url": "gravatar.com/user.png",
|
|
},
|
|
"author": {
|
|
"username": "user",
|
|
"url": "gitsoftware.com/users/user",
|
|
"avatar_url": "gravatar.com/user.png",
|
|
},
|
|
},
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
"git_url": "foobar",
|
|
}
|
|
|
|
assertSchema("custom_webhook", expected, custom_trigger_payload, git_url="foobar")
|
|
|
|
|
|
def test_custom_gitlab():
|
|
expected = {
|
|
"commit": "fb88379ee45de28a0a4590fddcbd8eff8b36026e",
|
|
"ref": "refs/heads/master",
|
|
"git_url": "git@gitlab.com:jsmith/somerepo.git",
|
|
"commit_info": {
|
|
"url": "https://gitlab.com/jsmith/somerepo/commit/fb88379ee45de28a0a4590fddcbd8eff8b36026e",
|
|
"date": "2015-08-13T19:33:18+00:00",
|
|
"message": "Fix link\n",
|
|
},
|
|
}
|
|
|
|
assertSchema(
|
|
"gitlab_webhook",
|
|
expected,
|
|
custom_trigger_payload,
|
|
git_url="git@gitlab.com:jsmith/somerepo.git",
|
|
)
|
|
|
|
|
|
def test_custom_github():
|
|
expected = {
|
|
"commit": "410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
"git_url": "git@github.com:jsmith/anothertest.git",
|
|
"commit_info": {
|
|
"url": "https://github.com/jsmith/anothertest/commit/410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"date": "2015-09-11T14:26:16-04:00",
|
|
"message": "Update Dockerfile",
|
|
"committer": {
|
|
"username": "jsmith",
|
|
},
|
|
"author": {
|
|
"username": "jsmith",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema(
|
|
"github_webhook",
|
|
expected,
|
|
custom_trigger_payload,
|
|
git_url="git@github.com:jsmith/anothertest.git",
|
|
)
|
|
|
|
|
|
def test_custom_bitbucket():
|
|
expected = {
|
|
"commit": "af64ae7188685f8424040b4735ad12941b980d75",
|
|
"ref": "refs/heads/master",
|
|
"git_url": "git@bitbucket.org:jsmith/another-repo.git",
|
|
"commit_info": {
|
|
"url": "https://bitbucket.org/jsmith/another-repo/commits/af64ae7188685f8424040b4735ad12941b980d75",
|
|
"date": "2015-09-10T20:40:54+00:00",
|
|
"message": "Dockerfile edited online with Bitbucket",
|
|
"author": {
|
|
"username": "John Smith",
|
|
"avatar_url": "https://bitbucket.org/account/jsmith/avatar/32/",
|
|
},
|
|
"committer": {
|
|
"username": "John Smith",
|
|
"avatar_url": "https://bitbucket.org/account/jsmith/avatar/32/",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema(
|
|
"bitbucket_webhook",
|
|
expected,
|
|
custom_trigger_payload,
|
|
git_url="git@bitbucket.org:jsmith/another-repo.git",
|
|
)
|
|
|
|
|
|
def test_bitbucket_customer_payload_noauthor():
|
|
expected = {
|
|
"commit": "a0ec139843b2bb281ab21a433266ddc498e605dc",
|
|
"ref": "refs/heads/master",
|
|
"git_url": "git@bitbucket.org:somecoollabs/svc-identity.git",
|
|
"commit_info": {
|
|
"url": "https://bitbucket.org/somecoollabs/svc-identity/commits/a0ec139843b2bb281ab21a433266ddc498e605dc",
|
|
"date": "2015-09-25T00:55:08+00:00",
|
|
"message": "Update version.py to 0.1.2 [skip ci]\n\n(by utilitybelt/scripts/autotag_version.py)\n",
|
|
"committer": {
|
|
"username": "CodeShip Tagging",
|
|
"avatar_url": "https://bitbucket.org/account/SomeCoolLabs_CodeShip/avatar/32/",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema("bitbucket_customer_example_noauthor", expected, bb_webhook)
|
|
|
|
|
|
def test_bitbucket_customer_payload_tag():
|
|
expected = {
|
|
"commit": "a0ec139843b2bb281ab21a433266ddc498e605dc",
|
|
"ref": "refs/tags/0.1.2",
|
|
"git_url": "git@bitbucket.org:somecoollabs/svc-identity.git",
|
|
"commit_info": {
|
|
"url": "https://bitbucket.org/somecoollabs/svc-identity/commits/a0ec139843b2bb281ab21a433266ddc498e605dc",
|
|
"date": "2015-09-25T00:55:08+00:00",
|
|
"message": "Update version.py to 0.1.2 [skip ci]\n\n(by utilitybelt/scripts/autotag_version.py)\n",
|
|
"committer": {
|
|
"username": "CodeShip Tagging",
|
|
"avatar_url": "https://bitbucket.org/account/SomeCoolLabs_CodeShip/avatar/32/",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema("bitbucket_customer_example_tag", expected, bb_webhook)
|
|
|
|
|
|
def test_bitbucket_commit():
|
|
ref = "refs/heads/somebranch"
|
|
default_branch = "somebranch"
|
|
repository_name = "foo/bar"
|
|
|
|
def lookup_author(_):
|
|
return {"user": {"display_name": "cooluser", "avatar": "http://some/avatar/url"}}
|
|
|
|
expected = {
|
|
"commit": "abdeaf1b2b4a6b9ddf742c1e1754236380435a62",
|
|
"ref": "refs/heads/somebranch",
|
|
"git_url": "git@bitbucket.org:foo/bar.git",
|
|
"default_branch": "somebranch",
|
|
"commit_info": {
|
|
"url": "https://bitbucket.org/foo/bar/commits/abdeaf1b2b4a6b9ddf742c1e1754236380435a62",
|
|
"date": "2012-07-24 00:26:36",
|
|
"message": "making some changes\n",
|
|
"author": {
|
|
"avatar_url": "http://some/avatar/url",
|
|
"username": "cooluser",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema(
|
|
"bitbucket_commit", expected, bb_commit, ref, default_branch, repository_name, lookup_author
|
|
)
|
|
|
|
|
|
def test_bitbucket_webhook_payload():
|
|
expected = {
|
|
"commit": "af64ae7188685f8424040b4735ad12941b980d75",
|
|
"ref": "refs/heads/master",
|
|
"git_url": "git@bitbucket.org:jsmith/another-repo.git",
|
|
"commit_info": {
|
|
"url": "https://bitbucket.org/jsmith/another-repo/commits/af64ae7188685f8424040b4735ad12941b980d75",
|
|
"date": "2015-09-10T20:40:54+00:00",
|
|
"message": "Dockerfile edited online with Bitbucket",
|
|
"author": {
|
|
"username": "John Smith",
|
|
"avatar_url": "https://bitbucket.org/account/jsmith/avatar/32/",
|
|
},
|
|
"committer": {
|
|
"username": "John Smith",
|
|
"avatar_url": "https://bitbucket.org/account/jsmith/avatar/32/",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema("bitbucket_webhook", expected, bb_webhook)
|
|
|
|
|
|
def test_github_webhook_payload_slash_branch():
|
|
expected = {
|
|
"commit": "410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"ref": "refs/heads/slash/branch",
|
|
"default_branch": "master",
|
|
"git_url": "git@github.com:jsmith/anothertest.git",
|
|
"commit_info": {
|
|
"url": "https://github.com/jsmith/anothertest/commit/410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"date": "2015-09-11T14:26:16-04:00",
|
|
"message": "Update Dockerfile",
|
|
"committer": {
|
|
"username": "jsmith",
|
|
},
|
|
"author": {
|
|
"username": "jsmith",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema("github_webhook_slash_branch", expected, gh_webhook)
|
|
|
|
|
|
def test_github_webhook_payload():
|
|
expected = {
|
|
"commit": "410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
"git_url": "git@github.com:jsmith/anothertest.git",
|
|
"commit_info": {
|
|
"url": "https://github.com/jsmith/anothertest/commit/410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"date": "2015-09-11T14:26:16-04:00",
|
|
"message": "Update Dockerfile",
|
|
"committer": {
|
|
"username": "jsmith",
|
|
},
|
|
"author": {
|
|
"username": "jsmith",
|
|
},
|
|
},
|
|
}
|
|
|
|
assertSchema("github_webhook", expected, gh_webhook)
|
|
|
|
|
|
def test_github_webhook_payload_with_lookup():
|
|
expected = {
|
|
"commit": "410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
"git_url": "git@github.com:jsmith/anothertest.git",
|
|
"commit_info": {
|
|
"url": "https://github.com/jsmith/anothertest/commit/410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"date": "2015-09-11T14:26:16-04:00",
|
|
"message": "Update Dockerfile",
|
|
"committer": {
|
|
"username": "jsmith",
|
|
"url": "http://github.com/jsmith",
|
|
"avatar_url": "http://some/avatar/url",
|
|
},
|
|
"author": {
|
|
"username": "jsmith",
|
|
"url": "http://github.com/jsmith",
|
|
"avatar_url": "http://some/avatar/url",
|
|
},
|
|
},
|
|
}
|
|
|
|
def lookup_user(_):
|
|
return {"html_url": "http://github.com/jsmith", "avatar_url": "http://some/avatar/url"}
|
|
|
|
assertSchema("github_webhook", expected, gh_webhook, lookup_user=lookup_user)
|
|
|
|
|
|
def test_github_webhook_payload_missing_fields_with_lookup():
|
|
expected = {
|
|
"commit": "410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
"git_url": "git@github.com:jsmith/anothertest.git",
|
|
"commit_info": {
|
|
"url": "https://github.com/jsmith/anothertest/commit/410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"date": "2015-09-11T14:26:16-04:00",
|
|
"message": "Update Dockerfile",
|
|
},
|
|
}
|
|
|
|
def lookup_user(username):
|
|
if not username:
|
|
raise Exception("Fail!")
|
|
|
|
return {"html_url": "http://github.com/jsmith", "avatar_url": "http://some/avatar/url"}
|
|
|
|
assertSchema("github_webhook_missing", expected, gh_webhook, lookup_user=lookup_user)
|
|
|
|
|
|
def test_gitlab_webhook_payload():
|
|
expected = {
|
|
"commit": "fb88379ee45de28a0a4590fddcbd8eff8b36026e",
|
|
"ref": "refs/heads/master",
|
|
"git_url": "git@gitlab.com:jsmith/somerepo.git",
|
|
"commit_info": {
|
|
"url": "https://gitlab.com/jsmith/somerepo/commit/fb88379ee45de28a0a4590fddcbd8eff8b36026e",
|
|
"date": "2015-08-13T19:33:18+00:00",
|
|
"message": "Fix link\n",
|
|
},
|
|
}
|
|
|
|
assertSchema("gitlab_webhook", expected, gl_webhook)
|
|
|
|
|
|
def test_github_webhook_payload_known_issue():
|
|
expected = {
|
|
"commit": "118b07121695d9f2e40a5ff264fdcc2917680870",
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
"git_url": "git@github.com:jsmith/docker-test.git",
|
|
"commit_info": {
|
|
"url": "https://github.com/jsmith/docker-test/commit/118b07121695d9f2e40a5ff264fdcc2917680870",
|
|
"date": "2015-09-25T14:55:11-04:00",
|
|
"message": "Fail",
|
|
},
|
|
}
|
|
|
|
assertSchema("github_webhook_noname", expected, gh_webhook)
|
|
|
|
|
|
def test_github_webhook_payload_missing_fields():
|
|
expected = {
|
|
"commit": "410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
"git_url": "git@github.com:jsmith/anothertest.git",
|
|
"commit_info": {
|
|
"url": "https://github.com/jsmith/anothertest/commit/410f4cdf8ff09b87f245b13845e8497f90b90a4c",
|
|
"date": "2015-09-11T14:26:16-04:00",
|
|
"message": "Update Dockerfile",
|
|
},
|
|
}
|
|
|
|
assertSchema("github_webhook_missing", expected, gh_webhook)
|
|
|
|
|
|
def test_gitlab_webhook_nocommit_payload():
|
|
assertSkipped("gitlab_webhook_nocommit", gl_webhook)
|
|
|
|
|
|
def test_gitlab_webhook_multiple_commits():
|
|
expected = {
|
|
"commit": "9a052a0b2fbe01d4a1a88638dd9fe31c1c56ef53",
|
|
"ref": "refs/heads/master",
|
|
"git_url": "git@gitlab.com:jsmith/some-test-project.git",
|
|
"commit_info": {
|
|
"url": "https://gitlab.com/jsmith/some-test-project/commit/9a052a0b2fbe01d4a1a88638dd9fe31c1c56ef53",
|
|
"date": "2016-09-29T15:02:41+00:00",
|
|
"message": "Merge branch 'foobar' into 'master'\r\n\r\nAdd changelog\r\n\r\nSome merge thing\r\n\r\nSee merge request !1",
|
|
"author": {
|
|
"username": "jsmith",
|
|
"url": "http://gitlab.com/jsmith",
|
|
"avatar_url": "http://some/avatar/url",
|
|
},
|
|
},
|
|
}
|
|
|
|
def lookup_user(_):
|
|
return {
|
|
"username": "jsmith",
|
|
"html_url": "http://gitlab.com/jsmith",
|
|
"avatar_url": "http://some/avatar/url",
|
|
}
|
|
|
|
assertSchema("gitlab_webhook_multicommit", expected, gl_webhook, lookup_user=lookup_user)
|
|
|
|
|
|
def test_gitlab_webhook_for_tag():
|
|
expected = {
|
|
"commit": "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7",
|
|
"commit_info": {
|
|
"author": {
|
|
"avatar_url": "http://some/avatar/url",
|
|
"url": "http://gitlab.com/jsmith",
|
|
"username": "jsmith",
|
|
},
|
|
"date": "2015-08-13T19:33:18+00:00",
|
|
"message": "Fix link\n",
|
|
"url": "https://some/url",
|
|
},
|
|
"git_url": "git@example.com:jsmith/example.git",
|
|
"ref": "refs/tags/v1.0.0",
|
|
}
|
|
|
|
def lookup_user(_):
|
|
return {
|
|
"username": "jsmith",
|
|
"html_url": "http://gitlab.com/jsmith",
|
|
"avatar_url": "http://some/avatar/url",
|
|
}
|
|
|
|
def lookup_commit(repo_id, commit_sha):
|
|
if commit_sha == "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7":
|
|
return {
|
|
"id": "82b3d5ae55f7080f1e6022629cdb57bfae7cccc7",
|
|
"message": "Fix link\n",
|
|
"timestamp": "2015-08-13T19:33:18+00:00",
|
|
"url": "https://some/url",
|
|
"author_name": "Foo Guy",
|
|
"author_email": "foo@bar.com",
|
|
}
|
|
|
|
return None
|
|
|
|
assertSchema(
|
|
"gitlab_webhook_tag",
|
|
expected,
|
|
gl_webhook,
|
|
lookup_user=lookup_user,
|
|
lookup_commit=lookup_commit,
|
|
)
|
|
|
|
|
|
def test_gitlab_webhook_for_tag_nocommit():
|
|
assertSkipped("gitlab_webhook_tag", gl_webhook)
|
|
|
|
|
|
def test_gitlab_webhook_for_tag_commit_sha_null():
|
|
assertSkipped("gitlab_webhook_tag_commit_sha_null", gl_webhook)
|
|
|
|
|
|
def test_gitlab_webhook_for_tag_known_issue():
|
|
expected = {
|
|
"commit": "770830e7ca132856991e6db4f7fc0f4dbe20bd5f",
|
|
"ref": "refs/tags/thirdtag",
|
|
"git_url": "git@gitlab.com:someuser/some-test-project.git",
|
|
"commit_info": {
|
|
"url": "https://gitlab.com/someuser/some-test-project/commit/770830e7ca132856991e6db4f7fc0f4dbe20bd5f",
|
|
"date": "2019-10-17T18:07:48Z",
|
|
"message": "Update Dockerfile",
|
|
"author": {
|
|
"username": "someuser",
|
|
"url": "http://gitlab.com/someuser",
|
|
"avatar_url": "http://some/avatar/url",
|
|
},
|
|
},
|
|
}
|
|
|
|
def lookup_user(_):
|
|
return {
|
|
"username": "someuser",
|
|
"html_url": "http://gitlab.com/someuser",
|
|
"avatar_url": "http://some/avatar/url",
|
|
}
|
|
|
|
assertSchema("gitlab_webhook_tag_commit_issue", expected, gl_webhook, lookup_user=lookup_user)
|
|
|
|
|
|
def test_gitlab_webhook_payload_known_issue():
|
|
expected = {
|
|
"commit": "770830e7ca132856991e6db4f7fc0f4dbe20bd5f",
|
|
"ref": "refs/tags/fourthtag",
|
|
"git_url": "git@gitlab.com:someuser/some-test-project.git",
|
|
"commit_info": {
|
|
"url": "https://gitlab.com/someuser/some-test-project/commit/770830e7ca132856991e6db4f7fc0f4dbe20bd5f",
|
|
"date": "2019-10-17T18:07:48Z",
|
|
"message": "Update Dockerfile",
|
|
},
|
|
}
|
|
|
|
def lookup_commit(repo_id, commit_sha):
|
|
if commit_sha == "770830e7ca132856991e6db4f7fc0f4dbe20bd5f":
|
|
return {
|
|
"added": [],
|
|
"author": {"name": "Some User", "email": "someuser@somedomain.com"},
|
|
"url": "https://gitlab.com/someuser/some-test-project/commit/770830e7ca132856991e6db4f7fc0f4dbe20bd5f",
|
|
"message": "Update Dockerfile",
|
|
"removed": [],
|
|
"modified": ["Dockerfile"],
|
|
"id": "770830e7ca132856991e6db4f7fc0f4dbe20bd5f",
|
|
}
|
|
|
|
return None
|
|
|
|
assertSchema("gitlab_webhook_known_issue", expected, gl_webhook, lookup_commit=lookup_commit)
|
|
|
|
|
|
def test_gitlab_webhook_for_other():
|
|
assertSkipped("gitlab_webhook_other", gl_webhook)
|
|
|
|
|
|
def test_gitlab_webhook_payload_with_lookup():
|
|
expected = {
|
|
"commit": "fb88379ee45de28a0a4590fddcbd8eff8b36026e",
|
|
"ref": "refs/heads/master",
|
|
"git_url": "git@gitlab.com:jsmith/somerepo.git",
|
|
"commit_info": {
|
|
"url": "https://gitlab.com/jsmith/somerepo/commit/fb88379ee45de28a0a4590fddcbd8eff8b36026e",
|
|
"date": "2015-08-13T19:33:18+00:00",
|
|
"message": "Fix link\n",
|
|
"author": {
|
|
"username": "jsmith",
|
|
"url": "http://gitlab.com/jsmith",
|
|
"avatar_url": "http://some/avatar/url",
|
|
},
|
|
},
|
|
}
|
|
|
|
def lookup_user(_):
|
|
return {
|
|
"username": "jsmith",
|
|
"html_url": "http://gitlab.com/jsmith",
|
|
"avatar_url": "http://some/avatar/url",
|
|
}
|
|
|
|
assertSchema("gitlab_webhook", expected, gl_webhook, lookup_user=lookup_user)
|
|
|
|
|
|
def test_github_webhook_payload_deleted_commit():
|
|
expected = {
|
|
"commit": "456806b662cb903a0febbaed8344f3ed42f27bab",
|
|
"commit_info": {
|
|
"author": {"username": "jsmith"},
|
|
"committer": {"username": "jsmith"},
|
|
"date": "2015-12-08T18:07:03-05:00",
|
|
"message": (
|
|
"Merge pull request #1044 from jsmith/errerror\n\n"
|
|
+ "Assign the exception to a variable to log it"
|
|
),
|
|
"url": "https://github.com/jsmith/somerepo/commit/456806b662cb903a0febbaed8344f3ed42f27bab",
|
|
},
|
|
"git_url": "git@github.com:jsmith/somerepo.git",
|
|
"ref": "refs/heads/master",
|
|
"default_branch": "master",
|
|
}
|
|
|
|
def lookup_user(_):
|
|
return None
|
|
|
|
assertSchema("github_webhook_deletedcommit", expected, gh_webhook, lookup_user=lookup_user)
|
|
|
|
|
|
def test_github_webhook_known_issue():
|
|
def lookup_user(_):
|
|
return None
|
|
|
|
assertSkipped("github_webhook_knownissue", gh_webhook, lookup_user=lookup_user)
|
|
|
|
|
|
def test_bitbucket_webhook_known_issue():
|
|
assertSkipped("bitbucket_knownissue", bb_webhook)
|