Esempio n. 1
0
    def test_post_form_data(self):
        """Testing the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()
        m = re.match(b'^multipart/form-data; boundary=(.*)$', ctype)
        self.assertFalse(m is None)
        fields = [l.strip() for l in content.split(b'--' + m.group(1))][1:-1]

        d = {}

        disposition_re = re.compile(
            b'Content-Disposition: form-data; name="(.*?)"$')

        for f in fields:
            lst = f.split(b'\r\n\r\n')
            self.assertEqual(len(lst), 2)
            k, v = lst

            m = disposition_re.match(k)
            self.assertFalse(m is None)
            d[m.group(1)] = v

        self.assertEqual(d, {
            b'foo': b'bar',
            b'bar': b'42',
            b'name': b'somestring'
        })
Esempio n. 2
0
    def test_encode_multipart_formdata_normalizes_string_types(self):
        """Testing HttpRequest.encode_multipart_formdata normalizes
        Unicode and byte strings
        """
        konnichiwa = '\u3053\u3093\u306b\u3061\u306f'

        request = HttpRequest(url='/', method='POST')
        request.add_field('foo', konnichiwa)
        request.add_field('bar', konnichiwa.encode('utf-8'))
        request.add_field('baz', b'\xff')

        self.spy_on(request._make_mime_boundary,
                    call_fake=lambda r: b'BOUNDARY')

        ctype, content = request.encode_multipart_formdata()

        self.assertEqual(ctype, 'multipart/form-data; boundary=BOUNDARY')
        self.assertEqual(
            content, b'--BOUNDARY\r\n'
            b'Content-Disposition: form-data; name="foo"\r\n'
            b'\r\n'
            b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
            b'\r\n'
            b'--BOUNDARY\r\n'
            b'Content-Disposition: form-data; name="bar"\r\n'
            b'\r\n'
            b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
            b'\r\n'
            b'--BOUNDARY\r\n'
            b'Content-Disposition: form-data; name="baz"\r\n'
            b'\r\n'
            b'\xff'
            b'\r\n'
            b'--BOUNDARY--\r\n\r\n')
Esempio n. 3
0
    def test_post_form_data(self):
        """Test the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()
        m = re.match('^multipart/form-data; boundary=(.*)$', ctype)
        self.assertFalse(m is None)
        fields = [l.strip() for l in content.split('--' + m.group(1))][1:-1]

        d = {}

        for f in fields:
            lst = f.split('\r\n\r\n')
            self.assertEquals(len(lst), 2)
            k, v = lst

            m = re.match('Content-Disposition: form-data; name="(.*?)"$', k)
            self.assertFalse(m is None)
            d[m.group(1)] = v

        self.assertEquals(d, {'foo': 'bar', 'bar': '42', 'name': 'somestring'})
Esempio n. 4
0
    def test_defaults(self):
        """Testing HttpRequest default attribute values"""
        request = HttpRequest('/')
        self.assertEqual(request.url, '/')
        self.assertEqual(request.method, 'GET')

        content_type, content = request.encode_multipart_formdata()
        self.assertIsNone(content_type)
        self.assertIsNone(content)
Esempio n. 5
0
    def test_post_form_data(self):
        """Testing the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()

        d = self._get_fields_as_dict(ctype, content)

        self.assertEqual(
            d, {b'foo': b'bar', b'bar': b'42', b'name': b'somestring'})
Esempio n. 6
0
    def test_post_form_data(self):
        """Testing the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()

        d = self._get_fields_as_dict(ctype, content)

        self.assertEqual(
            d, {b'foo': b'bar', b'bar': b'42', b'name': b'somestring'})
Esempio n. 7
0
    def test_post_unicode_data(self):
        """Testing the encoding of multipart form data with unicode and binary
        field data
        """
        konnichiwa = '\u3053\u3093\u306b\u3061\u306f'

        request = HttpRequest('/', 'POST')
        request.add_field('foo', konnichiwa)
        request.add_field('bar', konnichiwa.encode('utf-8'))
        request.add_field('baz', b'\xff')

        ctype, content = request.encode_multipart_formdata()

        fields = self._get_fields_as_dict(ctype, content)

        self.assertTrue('foo' in fields)
        self.assertEqual(fields['foo'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['bar'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['baz'], b'\xff')
Esempio n. 8
0
    def test_post_unicode_data(self):
        """Testing the encoding of multipart form data with unicode and binary
        field data
        """
        konnichiwa = '\u3053\u3093\u306b\u3061\u306f'

        request = HttpRequest('/', 'POST')
        request.add_field('foo', konnichiwa)
        request.add_field('bar', konnichiwa.encode('utf-8'))
        request.add_field('baz', b'\xff')

        ctype, content = request.encode_multipart_formdata()

        fields = self._get_fields_as_dict(ctype, content)

        self.assertTrue('foo' in fields)
        self.assertEqual(fields['foo'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['bar'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['baz'], b'\xff')
Esempio n. 9
0
    def test_encode_multipart_formdata(self):
        """Testing HttpRequest.encode_multipart_formdata"""
        request = HttpRequest(url='/',
                              method='POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('name', 'somestring')
        request.add_file(name='my-file',
                         filename='filename.txt',
                         content=b'This is a test.')

        self.spy_on(request._make_mime_boundary,
                    call_fake=lambda r: b'BOUNDARY')

        ctype, content = request.encode_multipart_formdata()

        self.assertEqual(ctype, 'multipart/form-data; boundary=BOUNDARY')
        self.assertEqual(
            content,
            b'--BOUNDARY\r\n'
            b'Content-Disposition: form-data; name="foo"\r\n'
            b'\r\n'
            b'bar'
            b'\r\n'
            b'--BOUNDARY\r\n'
            b'Content-Disposition: form-data; name="bar"\r\n'
            b'\r\n'
            b'42'
            b'\r\n'
            b'--BOUNDARY\r\n'
            b'Content-Disposition: form-data; name="name"\r\n'
            b'\r\n'
            b'somestring'
            b'\r\n'
            b'--BOUNDARY\r\n'
            b'Content-Disposition: form-data; name="my-file";'
            b' filename="filename.txt"\r\n'
            b'Content-Type: text/plain\r\n'
            b'\r\n'
            b'This is a test.'
            b'\r\n'
            b'--BOUNDARY--\r\n\r\n')
Esempio n. 10
0
class HttpRequestTests(TestCase):
    def setUp(self):
        self.request = HttpRequest('/')

    def test_default_values(self):
        """Testing the default values."""
        self.assertEqual(self.request.url, '/')
        self.assertEqual(self.request.method, 'GET')
        content_type, content = self.request.encode_multipart_formdata()
        self.assertTrue(content_type is None)
        self.assertTrue(content is None)

    def test_post_form_data(self):
        """Testing the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()
        m = re.match(b'^multipart/form-data; boundary=(.*)$', ctype)
        self.assertFalse(m is None)
        fields = [l.strip() for l in content.split(b'--' + m.group(1))][1:-1]

        d = {}

        disposition_re = re.compile(
            b'Content-Disposition: form-data; name="(.*?)"$')

        for f in fields:
            lst = f.split(b'\r\n\r\n')
            self.assertEqual(len(lst), 2)
            k, v = lst

            m = disposition_re.match(k)
            self.assertFalse(m is None)
            d[m.group(1)] = v

        self.assertEqual(
            d, {b'foo': b'bar', b'bar': b'42', b'name': b'somestring'})
Esempio n. 11
0
class HttpRequestTests(TestCase):
    def setUp(self):
        self.request = HttpRequest('/')

    def test_default_values(self):
        """Testing the default values."""
        self.assertEquals(self.request.url, '/')
        self.assertEquals(self.request.method, 'GET')
        content_type, content = self.request.encode_multipart_formdata()
        self.assertTrue(content_type is None)
        self.assertTrue(content is None)

    def test_post_form_data(self):
        """Testing the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()
        m = re.match('^multipart/form-data; boundary=(.*)$', ctype)
        self.assertFalse(m is None)
        fields = [l.strip() for l in content.split('--' + m.group(1))][1:-1]

        d = {}

        for f in fields:
            lst = f.split('\r\n\r\n')
            self.assertEquals(len(lst), 2)
            k, v = lst

            m = re.match('Content-Disposition: form-data; name="(.*?)"$', k)
            self.assertFalse(m is None)
            d[m.group(1)] = v

        self.assertEquals(d, {'foo': 'bar', 'bar': '42', 'name': 'somestring'})
Esempio n. 12
0
class HttpRequestTests(TestCase):
    def setUp(self):
        self.request = HttpRequest('/')

    def test_default_values(self):
        """Testing the default values."""
        self.assertEqual(self.request.url, '/')
        self.assertEqual(self.request.method, 'GET')
        content_type, content = self.request.encode_multipart_formdata()
        self.assertTrue(content_type is None)
        self.assertTrue(content is None)

    def _get_fields_as_dict(self, ctype, content):
        """Extract the fields of a HTTP multipart request as a dictionary."""
        m = re.match(b'^multipart/form-data; boundary=(.*)$', ctype)
        self.assertFalse(m is None)
        fields = [l.strip() for l in content.split(b'--' + m.group(1))][1:-1]

        d = {}

        disposition_re = re.compile(
            b'Content-Disposition: form-data; name="(.*?)"$')

        for f in fields:
            lst = f.split(b'\r\n\r\n')
            self.assertEqual(len(lst), 2)
            k, v = lst

            m = disposition_re.match(k)
            self.assertFalse(m is None)
            d[m.group(1)] = v

        return d

    def test_post_form_data(self):
        """Testing the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()

        d = self._get_fields_as_dict(ctype, content)

        self.assertEqual(d, {
            b'foo': b'bar',
            b'bar': b'42',
            b'name': b'somestring'
        })

    def test_post_unicode_data(self):
        """Testing the encoding of multipart form data with unicode and binary
        field data
        """
        konnichiwa = '\u3053\u3093\u306b\u3061\u306f'

        request = HttpRequest('/', 'POST')
        request.add_field('foo', konnichiwa)
        request.add_field('bar', konnichiwa.encode('utf-8'))
        request.add_field('baz', b'\xff')

        ctype, content = request.encode_multipart_formdata()

        fields = self._get_fields_as_dict(ctype, content)

        self.assertTrue('foo' in fields)
        self.assertEqual(fields['foo'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['bar'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['baz'], b'\xff')
Esempio n. 13
0
class HttpRequestTests(TestCase):
    def setUp(self):
        self.request = HttpRequest('/')

    def test_default_values(self):
        """Testing the default values."""
        self.assertEqual(self.request.url, '/')
        self.assertEqual(self.request.method, 'GET')
        content_type, content = self.request.encode_multipart_formdata()
        self.assertTrue(content_type is None)
        self.assertTrue(content is None)

    def _get_fields_as_dict(self, ctype, content):
        """Extract the fields of a HTTP multipart request as a dictionary."""
        m = re.match(b'^multipart/form-data; boundary=(.*)$', ctype)
        self.assertFalse(m is None)
        fields = [l.strip() for l in content.split(b'--' + m.group(1))][1:-1]

        d = {}

        disposition_re = re.compile(
            b'Content-Disposition: form-data; name="(.*?)"$')

        for f in fields:
            lst = f.split(b'\r\n\r\n')
            self.assertEqual(len(lst), 2)
            k, v = lst

            m = disposition_re.match(k)
            self.assertFalse(m is None)
            d[m.group(1)] = v

        return d

    def test_post_form_data(self):
        """Testing the multipart form data generation."""
        request = HttpRequest('/', 'POST')
        request.add_field('foo', 'bar')
        request.add_field('bar', 42)
        request.add_field('err', 'must-be-deleted')
        request.add_field('name', 'somestring')
        request.del_field('err')

        ctype, content = request.encode_multipart_formdata()

        d = self._get_fields_as_dict(ctype, content)

        self.assertEqual(
            d, {b'foo': b'bar', b'bar': b'42', b'name': b'somestring'})

    def test_post_unicode_data(self):
        """Testing the encoding of multipart form data with unicode and binary
        field data
        """
        konnichiwa = '\u3053\u3093\u306b\u3061\u306f'

        request = HttpRequest('/', 'POST')
        request.add_field('foo', konnichiwa)
        request.add_field('bar', konnichiwa.encode('utf-8'))
        request.add_field('baz', b'\xff')

        ctype, content = request.encode_multipart_formdata()

        fields = self._get_fields_as_dict(ctype, content)

        self.assertTrue('foo' in fields)
        self.assertEqual(fields['foo'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['bar'], konnichiwa.encode('utf-8'))
        self.assertEqual(fields['baz'], b'\xff')