Example #1
0
    def test_process_attach_build(self):
        body, content_type = encode_multipart_formdata({
                'description': 'baz baz',
                'file': ('baz.txt', 'hello baz'),
                '__FORM_TOKEN': '123456'})
        args = {}
        for k, v in dict(cgi.FieldStorage(fp=StringIO(body), environ={
                    'REQUEST_METHOD': 'POST',
                    'CONTENT_TYPE': content_type})
                    ).items():
            if v.filename:
                args[k] = v
            else:
                args[k] = v.value
        args.update({'collection': 'attach', 'member': 'build'})
        self.assertTrue('file' in args)

        outheaders = {}
        outbody = StringIO()

        req = Mock(args=args, form_token='123456', authname='hal',
                remote_addr='127.0.0.1',
                send_response=lambda x: outheaders.setdefault('Status', x),
                send_header=lambda x, y: outheaders.setdefault(x, y),
                write=outbody.write)

        config = BuildConfig(self.env, 'test', path='somepath', active=True,
                    recipe='')
        config.insert()
        build = Build(self.env, 'test', '123', 1, slave='hal', rev_time=42,
                      started=42, status=Build.IN_PROGRESS)
        build.insert()

        module = BuildMaster(self.env)

        self.assertRaises(RequestDone, module._process_attachment,
                                                req, config, build)
        self.assertEqual(201, outheaders['Status'])
        self.assertEqual('18', outheaders['Content-Length'])
        self.assertEqual('text/plain', outheaders['Content-Type'])
        self.assertEqual('Attachment created', outbody.getvalue())

        build_atts = list(Attachment.select(self.env, 'build', 'test/1'))
        self.assertEquals(1, len(build_atts))
        self.assertEquals('hal', build_atts[0].author)
        self.assertEquals('baz baz', build_atts[0].description)
        self.assertEquals('baz.txt', build_atts[0].filename)
        self.assertEquals('hello baz',
                        build_atts[0].open().read())
Example #2
0
 def test_mutlipart_encode_one(self):
     fields = {
         'foo': 'bar',
         'foofile': ('test.txt', 'contents of foofile'),
     }
     body, content_type = encode_multipart_formdata(fields)
     boundary = content_type.split(';')[1].strip().split('=')[1]
     self.assertEquals('multipart/form-data; boundary=%s' % boundary,
                                 content_type)
     self.assertEquals('--%s\r\nContent-Disposition: form-data; ' \
             'name="foo"\r\n\r\nbar\r\n--%s\r\nContent-Disposition: ' \
             'form-data; name="foofile"; filename="test.txt"\r\n' \
             'Content-Type: application/octet-stream\r\n\r\n' \
             'contents of foofile\r\n--%s--\r\n' % (
                         boundary,boundary,boundary), body)
Example #3
0
 def test_mutlipart_encode_one(self):
     fields = {
         'foo': 'bar',
         'foofile': ('test.txt', 'contents of foofile'),
     }
     body, content_type = encode_multipart_formdata(fields)
     boundary = content_type.split(';')[1].strip().split('=')[1]
     self.assertEquals('multipart/form-data; boundary=%s' % boundary,
                       content_type)
     self.assertEquals('--%s\r\nContent-Disposition: form-data; ' \
             'name="foo"\r\n\r\nbar\r\n--%s\r\nContent-Disposition: ' \
             'form-data; name="foofile"; filename="test.txt"\r\n' \
             'Content-Type: application/octet-stream\r\n\r\n' \
             'contents of foofile\r\n--%s--\r\n' % (
                         boundary,boundary,boundary), body)
Example #4
0
    def test_process_attach_build(self):
        body, content_type = encode_multipart_formdata({
            'description':
            'baz baz',
            'file': ('baz.txt', 'hello baz'),
            '__FORM_TOKEN':
            '123456'
        })
        args = {}
        for k, v in dict(
                cgi.FieldStorage(fp=StringIO(body),
                                 environ={
                                     'REQUEST_METHOD': 'POST',
                                     'CONTENT_TYPE': content_type
                                 })).items():
            if v.filename:
                args[k] = v
            else:
                args[k] = v.value
        args.update({'collection': 'attach', 'member': 'build'})
        self.assertTrue('file' in args)

        outheaders = {}
        outbody = StringIO()

        req = Mock(args=args,
                   form_token='123456',
                   authname='hal',
                   remote_addr='127.0.0.1',
                   send_response=lambda x: outheaders.setdefault('Status', x),
                   send_header=lambda x, y: outheaders.setdefault(x, y),
                   write=outbody.write)

        config = BuildConfig(self.env,
                             'test',
                             path='somepath',
                             active=True,
                             recipe='')
        config.insert()
        build = Build(self.env,
                      'test',
                      '123',
                      1,
                      slave='hal',
                      rev_time=42,
                      started=42,
                      status=Build.IN_PROGRESS)
        build.insert()

        module = BuildMaster(self.env)

        self.assertRaises(RequestDone, module._process_attachment, req, config,
                          build)
        self.assertEqual(201, outheaders['Status'])
        self.assertEqual('18', outheaders['Content-Length'])
        self.assertEqual('text/plain', outheaders['Content-Type'])
        self.assertEqual('Attachment created', outbody.getvalue())

        build_atts = list(Attachment.select(self.env, 'build', 'test/1'))
        self.assertEquals(1, len(build_atts))
        self.assertEquals('hal', build_atts[0].author)
        self.assertEquals('baz baz', build_atts[0].description)
        self.assertEquals('baz.txt', build_atts[0].filename)
        self.assertEquals('hello baz', build_atts[0].open().read())