[Python-checkins] r70889 - in python/trunk/Lib/distutils: command/upload.py tests/test_upload.py

tarek.ziade python-checkins at python.org
Tue Mar 31 22:53:55 CEST 2009


Author: tarek.ziade
Date: Tue Mar 31 22:53:55 2009
New Revision: 70889

Log:
more tests for the upload command

Modified:
   python/trunk/Lib/distutils/command/upload.py
   python/trunk/Lib/distutils/tests/test_upload.py

Modified: python/trunk/Lib/distutils/command/upload.py
==============================================================================
--- python/trunk/Lib/distutils/command/upload.py	(original)
+++ python/trunk/Lib/distutils/command/upload.py	Tue Mar 31 22:53:55 2009
@@ -192,4 +192,4 @@
             self.announce('Upload failed (%s): %s' % (r.status, r.reason),
                           log.ERROR)
         if self.show_response:
-            print '-'*75, r.read(), '-'*75
+            self.announce('-'*75, r.read(), '-'*75)

Modified: python/trunk/Lib/distutils/tests/test_upload.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_upload.py	(original)
+++ python/trunk/Lib/distutils/tests/test_upload.py	Tue Mar 31 22:53:55 2009
@@ -2,6 +2,7 @@
 import sys
 import os
 import unittest
+import httplib
 
 from distutils.command.upload import upload
 from distutils.core import Distribution
@@ -18,17 +19,52 @@
 [server1]
 username:me
 """
+class Response(object):
+    def __init__(self, status=200, reason='OK'):
+        self.status = status
+        self.reason = reason
 
+class FakeConnection(object):
+
+    def __init__(self):
+        self.requests = []
+        self.headers = []
+        self.body = ''
+
+    def __call__(self, netloc):
+        return self
+
+    def connect(self):
+        pass
+    endheaders = connect
+
+    def putrequest(self, method, url):
+        self.requests.append((method, url))
+
+    def putheader(self, name, value):
+        self.headers.append((name, value))
+
+    def send(self, body):
+        self.body = body
+
+    def getresponse(self):
+        return Response()
 
 class uploadTestCase(PyPIRCCommandTestCase):
 
+    def setUp(self):
+        super(uploadTestCase, self).setUp()
+        self.old_class = httplib.HTTPConnection
+        self.conn = httplib.HTTPConnection = FakeConnection()
+
+    def tearDown(self):
+        httplib.HTTPConnection = self.old_class
+        super(uploadTestCase, self).tearDown()
+
     def test_finalize_options(self):
 
         # new format
-        f = open(self.rc, 'w')
-        f.write(PYPIRC)
-        f.close()
-
+        self.write_file(self.rc, PYPIRC)
         dist = Distribution()
         cmd = upload(dist)
         cmd.finalize_options()
@@ -39,9 +75,7 @@
 
     def test_saved_password(self):
         # file with no password
-        f = open(self.rc, 'w')
-        f.write(PYPIRC_NOPASSWORD)
-        f.close()
+        self.write_file(self.rc, PYPIRC_NOPASSWORD)
 
         # make sure it passes
         dist = Distribution()
@@ -56,6 +90,28 @@
         cmd.finalize_options()
         self.assertEquals(cmd.password, 'xxx')
 
+    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)
+
+        # 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 ?
+        headers = dict(self.conn.headers)
+        self.assertEquals(headers['Content-length'], '2086')
+        self.assert_(headers['Content-type'].startswith('multipart/form-data'))
+
+        self.assertEquals(self.conn.requests, [('POST', '/pypi')])
+        self.assert_('xxx' in self.conn.body)
+
 def test_suite():
     return unittest.makeSuite(uploadTestCase)
 


More information about the Python-checkins mailing list