예제 #1
0
    def perform(self):
        method = self._opts[pycurl.CUSTOMREQUEST]
        url = self._opts[pycurl.URL]
        request_body = self._opts[pycurl.POSTFIELDS]
        writefn = self._opts[pycurl.WRITEFUNCTION]

        if pycurl.HTTPHEADER in self._opts:
            baseheaders = _FormatHeaders(self._opts[pycurl.HTTPHEADER])
        else:
            baseheaders = ""

        headers = http.ParseHeaders(StringIO(baseheaders))

        if request_body:
            headers[http.HTTP_CONTENT_LENGTH] = str(len(request_body))

        if self._opts.get(pycurl.HTTPAUTH, 0) & pycurl.HTTPAUTH_BASIC:
            try:
                userpwd = self._opts[pycurl.USERPWD]
            except KeyError:
                raise errors.ProgrammerError(
                    "Basic authentication requires username"
                    " and password")

            headers[http.HTTP_AUTHORIZATION] = \
              "%s %s" % (http.auth.HTTP_BASIC_AUTH, base64.b64encode(userpwd))

        path = _GetPathFromUri(url)
        (code, _, resp_body) = \
          self._handler.FetchResponse(path, method, headers, request_body)

        self._info[pycurl.RESPONSE_CODE] = code
        if resp_body is not None:
            writefn(resp_body)
예제 #2
0
  def _Test(self, method, path, headers, reqbody,
            user_fn=NotImplemented, luxi_client=NotImplemented,
            reqauth=False):
    rm = rapi.testutils._RapiMock(BasicAuthenticator(user_fn), luxi_client,
                                  reqauth=reqauth)

    (resp_code, resp_headers, resp_body) = \
      rm.FetchResponse(path, method, http.ParseHeaders(StringIO(headers)),
                       reqbody)

    self.assertTrue(resp_headers[http.HTTP_DATE])
    self.assertEqual(resp_headers[http.HTTP_CONNECTION], "close")
    self.assertEqual(resp_headers[http.HTTP_CONTENT_TYPE], http.HTTP_APP_JSON)
    self.assertEqual(resp_headers[http.HTTP_SERVER], http.HTTP_GANETI_VERSION)

    return (resp_code, resp_headers, serializer.LoadJson(resp_body))