cpython/Lib/distutils/tests/test_upload.py

121 lines
3.0 KiB
Python
Raw Normal View History

"""Tests for distutils.command.upload."""
import sys
import os
import unittest
import httplib
from distutils.command.upload import upload
from distutils.core import Distribution
from distutils.tests import support
from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase
PYPIRC_LONG_PASSWORD = """\
[distutils]
index-servers =
server1
server2
[server1]
username:me
password:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[server2]
username:meagain
password: secret
realm:acme
repository:http://another.pypi/
"""
class _Resp(object):
def __init__(self, status):
self.status = status
self.reason = 'OK'
_CONNECTIONS = []
class _FakeHTTPConnection(object):
def __init__(self, netloc):
self.requests = []
self.headers = {}
self.body = None
self.netloc = netloc
_CONNECTIONS.append(self)
def connect(self):
pass
endheaders = connect
def send(self, body):
self.body = body
def putrequest(self, type_, data):
self.requests.append((type_, data))
def putheader(self, name, value):
self.headers[name] = value
def getresponse(self):
return _Resp(200)
class uploadTestCase(PyPIRCCommandTestCase):
def setUp(self):
super(uploadTestCase, self).setUp()
self.old_klass = httplib.HTTPConnection
httplib.HTTPConnection = _FakeHTTPConnection
def tearDown(self):
httplib.HTTPConnection = self.old_klass
super(uploadTestCase, self).tearDown()
def test_finalize_options(self):
# new format
f = open(self.rc, 'w')
f.write(PYPIRC)
f.close()
dist = Distribution()
cmd = upload(dist)
cmd.finalize_options()
for attr, waited in (('username', 'me'), ('password', 'secret'),
('realm', 'pypi'),
('repository', 'http://pypi.python.org/pypi')):
self.assertEquals(getattr(cmd, attr), waited)
def test_upload(self):
tmp = self.mkdtemp()
path = os.path.join(tmp, 'xxx')
self.write_file(path)
command, pyversion, filename = 'xxx', '2.6', path
dist_files = [(command, pyversion, filename)]
self.write_file(self.rc, PYPIRC_LONG_PASSWORD)
# lets run it
pkg_dir, dist = self.create_dist(dist_files=dist_files)
cmd = upload(dist)
cmd.ensure_finalized()
cmd.run()
# what did we send ?
res = _CONNECTIONS[-1]
headers = res.headers
self.assertEquals(headers['Content-length'], '2086')
self.assertTrue(headers['Content-type'].startswith('multipart/form-data'))
method, request = res.requests[-1]
self.assertEquals(method, 'POST')
self.assertEquals(res.netloc, 'pypi.python.org')
self.assertTrue('xxx' in res.body)
self.assertFalse('\n' in headers['Authorization'])
def test_suite():
return unittest.makeSuite(uploadTestCase)
if __name__ == "__main__":
unittest.main(defaultTest="test_suite")