Skip to content

Commit 8643ade

Browse files
authored
tests, warehouse: disable egg uploads (#14118)
* tests, warehouse: disable egg uploads Also removes the PEP 715 notice emails, since they'll cease to serve any purpose once eggs can't be uploaded. Signed-off-by: William Woodruff <[email protected]> * tests: lintage Signed-off-by: William Woodruff <[email protected]> --------- Signed-off-by: William Woodruff <[email protected]>
1 parent 22de7db commit 8643ade

File tree

15 files changed

+11
-660
lines changed

15 files changed

+11
-660
lines changed

tests/unit/cli/test_projects.py

Lines changed: 0 additions & 33 deletions
This file was deleted.

tests/unit/email/test_init.py

Lines changed: 0 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -5825,92 +5825,3 @@ def test_trusted_publisher_emails(
58255825
},
58265826
)
58275827
]
5828-
5829-
5830-
class TestPEP715Emails:
5831-
@pytest.mark.parametrize(
5832-
"fn, template_name",
5833-
[
5834-
(email.send_egg_uploads_deprecated_email, "egg-uploads-deprecated"),
5835-
(
5836-
email.send_egg_uploads_deprecated_initial_email,
5837-
"egg-uploads-deprecated-initial-notice",
5838-
),
5839-
],
5840-
)
5841-
def test_pep_715_emails(
5842-
self, pyramid_request, pyramid_config, monkeypatch, fn, template_name
5843-
):
5844-
stub_user = pretend.stub(
5845-
id="id",
5846-
username="username",
5847-
name="",
5848-
5849-
primary_email=pretend.stub(email="[email protected]", verified=True),
5850-
)
5851-
subject_renderer = pyramid_config.testing_add_renderer(
5852-
f"email/{ template_name }/subject.txt"
5853-
)
5854-
subject_renderer.string_response = "Email Subject"
5855-
body_renderer = pyramid_config.testing_add_renderer(
5856-
f"email/{ template_name }/body.txt"
5857-
)
5858-
body_renderer.string_response = "Email Body"
5859-
html_renderer = pyramid_config.testing_add_renderer(
5860-
f"email/{ template_name }/body.html"
5861-
)
5862-
html_renderer.string_response = "Email HTML Body"
5863-
5864-
send_email = pretend.stub(
5865-
delay=pretend.call_recorder(lambda *args, **kwargs: None)
5866-
)
5867-
pyramid_request.task = pretend.call_recorder(lambda *args, **kwargs: send_email)
5868-
monkeypatch.setattr(email, "send_email", send_email)
5869-
5870-
pyramid_request.db = pretend.stub(
5871-
query=lambda a: pretend.stub(
5872-
filter=lambda *a: pretend.stub(
5873-
one=lambda: pretend.stub(user_id=stub_user.id)
5874-
)
5875-
),
5876-
)
5877-
pyramid_request.user = stub_user
5878-
pyramid_request.registry.settings = {"mail.sender": "[email protected]"}
5879-
5880-
project_name = "test_project"
5881-
result = fn(
5882-
pyramid_request,
5883-
stub_user,
5884-
project_name=project_name,
5885-
)
5886-
5887-
assert result == {
5888-
"project_name": project_name,
5889-
}
5890-
subject_renderer.assert_()
5891-
body_renderer.assert_(project_name=project_name)
5892-
html_renderer.assert_(project_name=project_name)
5893-
assert pyramid_request.task.calls == [pretend.call(send_email)]
5894-
assert send_email.delay.calls == [
5895-
pretend.call(
5896-
f"{stub_user.username} <{stub_user.email}>",
5897-
{
5898-
"subject": "Email Subject",
5899-
"body_text": "Email Body",
5900-
"body_html": (
5901-
"<html>\n<head></head>\n"
5902-
"<body><p>Email HTML Body</p></body>\n</html>\n"
5903-
),
5904-
},
5905-
{
5906-
"tag": "account:email:sent",
5907-
"user_id": stub_user.id,
5908-
"additional": {
5909-
"from_": "[email protected]",
5910-
"to": stub_user.email,
5911-
"subject": "Email Subject",
5912-
"redact_ip": False,
5913-
},
5914-
},
5915-
)
5916-
]

tests/unit/forklift/test_legacy.py

Lines changed: 4 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,6 @@
3131
from wtforms.form import Form
3232
from wtforms.validators import ValidationError
3333

34-
from tests.common.db.organizations import (
35-
OrganizationFactory,
36-
OrganizationProjectFactory,
37-
OrganizationRoleFactory,
38-
TeamFactory,
39-
TeamProjectRoleFactory,
40-
TeamRoleFactory,
41-
)
4234
from warehouse.admin.flags import AdminFlag, AdminFlagValue
4335
from warehouse.classifiers.models import Classifier
4436
from warehouse.errors import BasicAuthTwoFactorEnabled
@@ -85,13 +77,6 @@ def _get_whl_testdata(name="fake_package", version="1.0"):
8577
return temp_f.getvalue()
8678

8779

88-
def _get_egg_testdata():
89-
temp_f = io.BytesIO()
90-
with zipfile.ZipFile(file=temp_f, mode="w") as zfp:
91-
zfp.writestr("fake_package/PKG-INFO", "Fake metadata")
92-
return temp_f.getvalue()
93-
94-
9580
def _storage_hash(data):
9681
return hashlib.blake2b(data, digest_size=256 // 8).hexdigest()
9782

@@ -107,12 +92,6 @@ def _storage_hash(data):
10792
_TAR_BZ2_PKG_STORAGE_HASH = _storage_hash(_TAR_BZ2_PKG_TESTDATA)
10893

10994

110-
_EGG_PKG_TESTDATA = _get_egg_testdata()
111-
_EGG_PKG_MD5 = hashlib.md5(_EGG_PKG_TESTDATA).hexdigest()
112-
_EGG_PKG_SHA256 = hashlib.sha256(_EGG_PKG_TESTDATA).hexdigest()
113-
_EGG_PKG_STORAGE_HASH = _storage_hash(_EGG_PKG_TESTDATA)
114-
115-
11695
class TestExcWithMessage:
11796
def test_exc_with_message(self):
11897
exc = legacy._exc_with_message(HTTPBadRequest, "My Test Message.")
@@ -510,7 +489,6 @@ def test_defaults_to_true(self):
510489
("filename", "filetype"),
511490
[
512491
("test.zip", "sdist"),
513-
("test.egg", "bdist_egg"),
514492
("test.whl", "bdist_wheel"),
515493
],
516494
)
@@ -610,23 +588,6 @@ def test_zipfile_exceeds_compression_threshold(self, tmpdir):
610588

611589
assert not legacy._is_valid_dist_file(f, "")
612590

613-
def test_egg_no_pkg_info(self, tmpdir):
614-
f = str(tmpdir.join("test.egg"))
615-
616-
with zipfile.ZipFile(f, "w") as zfp:
617-
zfp.writestr("something.txt", b"Just a placeholder file")
618-
619-
assert not legacy._is_valid_dist_file(f, "bdist_egg")
620-
621-
def test_egg_has_pkg_info(self, tmpdir):
622-
f = str(tmpdir.join("test.egg"))
623-
624-
with zipfile.ZipFile(f, "w") as zfp:
625-
zfp.writestr("something.txt", b"Just a placeholder file")
626-
zfp.writestr("PKG-INFO", b"this is the package info")
627-
628-
assert legacy._is_valid_dist_file(f, "bdist_egg")
629-
630591
def test_wheel_no_wheel_file(self, tmpdir):
631592
f = str(tmpdir.join("test.whl"))
632593

@@ -1594,9 +1555,9 @@ def test_upload_fails_with_legacy_ext(self, pyramid_config, db_request):
15941555

15951556
assert resp.status_code == 400
15961557
assert resp.status == (
1597-
"400 Invalid file extension: Use .egg, .tar.gz, .whl or .zip "
1558+
"400 Invalid file extension: Use .tar.gz, .whl or .zip "
15981559
"extension. See https://www.python.org/dev/peps/pep-0527 "
1599-
"for more information."
1560+
"and https://peps.python.org/pep-0715/ for more information"
16001561
)
16011562

16021563
def test_upload_fails_for_second_sdist(self, pyramid_config, db_request):
@@ -2314,15 +2275,12 @@ def test_upload_fails_with_diff_filename_same_blake2(
23142275
# completely different
23152276
("nope-{version}.tar.gz", "something_else"),
23162277
("nope-{version}-py3-none-any.whl", "something_else"),
2317-
("nope-{version}-py3-none-any.egg", "something_else"),
23182278
# starts with same prefix
23192279
("nope-{version}.tar.gz", "no"),
23202280
("nope-{version}-py3-none-any.whl", "no"),
2321-
("nope-{version}-py3-none-any.egg", "no"),
23222281
# starts with same prefix with hyphen
23232282
("no-way-{version}.tar.gz", "no"),
23242283
("no_way-{version}-py3-none-any.whl", "no"),
2325-
("no_way-{version}-py3-none-any.egg", "no"),
23262284
# multiple delimiters
23272285
("foo__bar-{version}-py3-none-any.whl", "foo-.bar"),
23282286
],
@@ -2407,9 +2365,9 @@ def test_upload_fails_with_invalid_extension(self, pyramid_config, db_request):
24072365

24082366
assert resp.status_code == 400
24092367
assert resp.status == (
2410-
"400 Invalid file extension: Use .egg, .tar.gz, .whl or .zip "
2368+
"400 Invalid file extension: Use .tar.gz, .whl or .zip "
24112369
"extension. See https://www.python.org/dev/peps/pep-0527 "
2412-
"for more information."
2370+
"and https://peps.python.org/pep-0715/ for more information"
24132371
)
24142372

24152373
@pytest.mark.parametrize("character", ["/", "\\"])
@@ -3921,111 +3879,6 @@ def test_fails_without_user(self, pyramid_config, pyramid_request):
39213879
"See /the/help/url/ for more information."
39223880
)
39233881

3924-
def test_egg_upload_sends_pep_715_notice(
3925-
self, pyramid_config, db_request, metrics, monkeypatch
3926-
):
3927-
user = UserFactory.create()
3928-
EmailFactory.create(user=user)
3929-
project = ProjectFactory.create()
3930-
RoleFactory.create(user=user, project=project)
3931-
3932-
pyramid_config.testing_securitypolicy(identity=user)
3933-
db_request.user = user
3934-
db_request.user_agent = "warehouse-tests/6.6.6"
3935-
db_request.POST = MultiDict(
3936-
{
3937-
"metadata_version": "1.2",
3938-
"name": project.name,
3939-
"version": "1.0.0",
3940-
"summary": "This is my summary!",
3941-
"filetype": "bdist_egg",
3942-
"pyversion": "2.7",
3943-
"md5_digest": _EGG_PKG_MD5,
3944-
"content": pretend.stub(
3945-
filename="{}-{}.egg".format(project.name, "1.0.0"),
3946-
file=io.BytesIO(_EGG_PKG_TESTDATA),
3947-
type="application/zip",
3948-
),
3949-
}
3950-
)
3951-
3952-
send_email = pretend.call_recorder(lambda *a, **kw: None)
3953-
monkeypatch.setattr(legacy, "send_egg_uploads_deprecated_email", send_email)
3954-
3955-
storage_service = pretend.stub(store=lambda path, filepath, meta: None)
3956-
db_request.find_service = lambda svc, name=None, context=None: {
3957-
IFileStorage: storage_service,
3958-
IMetricsService: metrics,
3959-
}.get(svc)
3960-
3961-
resp = legacy.file_upload(db_request)
3962-
3963-
assert resp.status_code == 200
3964-
assert send_email.calls == [
3965-
pretend.call(db_request, user, project_name=project.name)
3966-
]
3967-
3968-
def test_egg_upload_sends_pep_715_notice_org_roles(
3969-
self, pyramid_config, db_request, metrics, monkeypatch
3970-
):
3971-
user = UserFactory.create()
3972-
EmailFactory.create(user=user)
3973-
project = ProjectFactory.create()
3974-
RoleFactory.create(user=user, project=project)
3975-
3976-
org = OrganizationFactory()
3977-
OrganizationProjectFactory(organization=org, project=project)
3978-
org_owner = UserFactory.create()
3979-
OrganizationRoleFactory.create(user=org_owner, organization=org)
3980-
3981-
org_member = UserFactory.create()
3982-
OrganizationRoleFactory.create(
3983-
user=org_member, organization=org, role_name="Member"
3984-
)
3985-
team = TeamFactory.create(organization=org)
3986-
TeamRoleFactory.create(team=team, user=org_member)
3987-
# Duplicate the role directly on the project to ensure only one email
3988-
RoleFactory.create(user=org_member, project=project, role_name="Maintainer")
3989-
TeamProjectRoleFactory.create(project=project, team=team)
3990-
3991-
pyramid_config.testing_securitypolicy(identity=user)
3992-
db_request.user = user
3993-
db_request.user_agent = "warehouse-tests/6.6.6"
3994-
db_request.POST = MultiDict(
3995-
{
3996-
"metadata_version": "1.2",
3997-
"name": project.name,
3998-
"version": "1.0.0",
3999-
"summary": "This is my summary!",
4000-
"filetype": "bdist_egg",
4001-
"pyversion": "2.7",
4002-
"md5_digest": _EGG_PKG_MD5,
4003-
"content": pretend.stub(
4004-
filename="{}-{}.egg".format(project.name, "1.0.0"),
4005-
file=io.BytesIO(_EGG_PKG_TESTDATA),
4006-
type="application/zip",
4007-
),
4008-
}
4009-
)
4010-
4011-
send_email = pretend.call_recorder(lambda *a, **kw: None)
4012-
monkeypatch.setattr(legacy, "send_egg_uploads_deprecated_email", send_email)
4013-
4014-
storage_service = pretend.stub(store=lambda path, filepath, meta: None)
4015-
db_request.find_service = lambda svc, name=None, context=None: {
4016-
IFileStorage: storage_service,
4017-
IMetricsService: metrics,
4018-
}.get(svc)
4019-
4020-
resp = legacy.file_upload(db_request)
4021-
4022-
assert resp.status_code == 200
4023-
assert set(send_email.calls) == {
4024-
pretend.call(db_request, user, project_name=project.name),
4025-
pretend.call(db_request, org_owner, project_name=project.name),
4026-
pretend.call(db_request, org_member, project_name=project.name),
4027-
}
4028-
40293882

40303883
def test_submit(pyramid_request):
40313884
resp = legacy.submit(pyramid_request)

0 commit comments

Comments
 (0)