Пример #1
0
    def test_cert_error_ssl_module_absent(self, mocker):
        class Dummy(Exception):
            pass

        open_url = mocker.patch.object(http, "open_url")
        open_url.side_effect = ssl.CertificateError("Invalid")
        mocker.patch.object(http, "CertificateError", Dummy)

        with pytest.raises(ssl.CertificateError):
            http.request("GET", "example.com/bad")
Пример #2
0
    def test_data(self, mocker):
        data_resp = mocker.Mock()
        data_resp.read.return_value = "data"
        data_resp.getcode.return_value = 200
        open_url = mocker.patch.object(http, "open_url")
        open_url.return_value = data_resp

        http.request("PUT", "example.com/path", data="data")

        assert "PUT" == open_url.call_args[1]["method"]
        assert "example.com/path" == open_url.call_args[1]["url"]
        assert "data" == open_url.call_args[1]["data"]
        assert open_url.call_args[1]["headers"] is None
Пример #3
0
    def test_kwargs(self, mocker):
        data_resp = mocker.Mock()
        data_resp.read.return_value = "data"
        data_resp.getcode.return_value = 200
        open_url = mocker.patch.object(http, "open_url")
        open_url.return_value = data_resp

        http.request("PUT", "example.com/path", a=3, b="f")

        assert "PUT" == open_url.call_args[1]["method"]
        assert "example.com/path" == open_url.call_args[1]["url"]
        assert 3 == open_url.call_args[1]["a"]
        assert "f" == open_url.call_args[1]["b"]
Пример #4
0
    def test_payload_no_headers(self, mocker):
        data_resp = mocker.Mock()
        data_resp.read.return_value = "data"
        data_resp.getcode.return_value = 200
        open_url = mocker.patch.object(http, "open_url")
        open_url.return_value = data_resp

        http.request("PUT", "example.com/path", payload=dict(a=2))

        assert "PUT" == open_url.call_args[1]["method"]
        assert "example.com/path" == open_url.call_args[1]["url"]
        assert '{"a":2}' == open_url.call_args[1]["data"]
        headers = open_url.call_args[1]["headers"]
        assert {"content-type": "application/json"} == headers
Пример #5
0
    def _username_password_login(self):
        resp = http.request(
            "GET", "{0}/auth".format(self.address), force_basic_auth=True,
            url_username=self.username, url_password=self.password,
            validate_certs=self.verify, ca_path=self.ca_path,
        )

        if resp.status != 200:
            raise errors.SensuError(
                "Authentication call returned status {0}".format(resp.status),
            )

        if resp.json is None:
            raise errors.SensuError(
                "Authentication call did not return a valid JSON",
            )

        if "access_token" not in resp.json:
            raise errors.SensuError(
                "Authentication call did not return access token",
            )

        return dict(
            Authorization="Bearer {0}".format(resp.json["access_token"]),
        )
Пример #6
0
def get(path):
    url = "https://bonsai.sensu.io/api/v1/assets/{0}".format(path)
    resp = http.request("GET", url)

    if resp.status != 200:
        raise errors.BonsaiError(
            "Server returned status {0}".format(resp.status), )
    if resp.json is None:
        raise errors.BonsaiError("Server returned invalid JSON document")

    return resp.json
Пример #7
0
 def validate_auth_data(self, username, password):
     resp = http.request(
         "GET", "{0}/auth/test".format(self.address),
         force_basic_auth=True, url_username=username,
         url_password=password, validate_certs=self.verify,
         ca_path=self.ca_path,
     )
     if resp.status not in (200, 401):
         raise errors.SensuError(
             "Authentication test returned status {0}".format(resp.status),
         )
     return resp.status == 200
Пример #8
0
    def test_ok_request(self, mocker):
        data_resp = mocker.Mock()
        data_resp.read.return_value = "data"
        data_resp.getcode.return_value = 200
        open_url = mocker.patch.object(http, "open_url")
        open_url.return_value = data_resp

        resp = http.request("GET", "example.com/path")

        assert 200 == resp.status
        assert "data" == resp.data
        assert "GET" == open_url.call_args[1]["method"]
        assert "example.com/path" == open_url.call_args[1]["url"]
Пример #9
0
    def request(self, method, path, payload=None):
        url = self.address + path
        headers = self.auth_header

        response = http.request(
            method, url, payload=payload, headers=headers,
            validate_certs=self.verify, ca_path=self.ca_path,
        )

        if response.status in (401, 403):
            raise errors.SensuError(
                "Authentication problem. Verify your credentials."
            )

        return response
Пример #10
0
    def test_non_20x_status(self, mocker):
        open_url = mocker.patch.object(http, "open_url")
        open_url.side_effect = HTTPError(
            "url",
            404,
            "missing",
            {},
            None,
        )

        resp = http.request("GET", "example.com/bad")

        assert 404 == resp.status
        assert "missing" == resp.data
        assert "GET" == open_url.call_args[1]["method"]
        assert "example.com/bad" == open_url.call_args[1]["url"]
Пример #11
0
    def _api_key_login(self):
        # We check the API key validity by using it to fetch its metadata from
        # the backend. This should also take care of validating if the backend
        # even supports the API key authentication.

        url = "{0}{1}".format(self.address, utils.build_core_v2_path(
            None, "apikeys", self.api_key,
        ))
        headers = dict(Authorization="Key {0}".format(self.api_key))

        resp = http.request("GET", url, headers=headers)
        if resp.status != 200:
            raise errors.SensuError(
                "The API key {0}...{1} seems to be invalid or the backend "
                "does not support the API key authentication".format(
                    self.api_key[:5], self.api_key[-5:],
                )
            )

        return headers
Пример #12
0
    def _login(self):
        resp = http.request(
            "GET",
            "{0}/auth".format(self.address),
            force_basic_auth=True,
            url_username=self.username,
            url_password=self.password,
        )

        if resp.status != 200:
            raise errors.SensuError(
                "Authentication call returned status {0}".format(
                    resp.status), )

        if resp.json is None:
            raise errors.SensuError(
                "Authentication call did not return a valid JSON", )

        if "access_token" not in resp.json:
            raise errors.SensuError(
                "Authentication call did not return access token", )

        return resp.json["access_token"]
Пример #13
0
    def test_url_error(self, mocker):
        open_url = mocker.patch.object(http, "open_url")
        open_url.side_effect = URLError("Invalid")

        with pytest.raises(errors.HttpError):
            http.request("GET", "example.com/bad")
Пример #14
0
    def test_cert_error_ssl_module_present(self, mocker):
        open_url = mocker.patch.object(http, "open_url")
        open_url.side_effect = ssl.CertificateError("Invalid")

        with pytest.raises(errors.HttpError):
            http.request("GET", "example.com/bad")
Пример #15
0
    def request(self, method, path, payload=None):
        url = self.address + path
        headers = self.auth_header

        return http.request(method, url, payload=payload, headers=headers)
Пример #16
0
    def request(self, method, path, payload=None):
        url = self.address + path
        headers = {"Authorization": "Bearer {0}".format(self.token)}

        return http.request(method, url, payload=payload, headers=headers)