File size: 1,813 Bytes
7a87926
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from __future__ import annotations

import pytest

from ylff.services.orchestration.lambda_cloud import (
    LambdaCloudClient,
    LambdaCloudClientConfig,
    LambdaCloudError,
)


class _Resp:
    def __init__(self, *, status_code: int, json_obj=None, text: str = "", headers=None):
        self.status_code = int(status_code)
        self._json = json_obj
        self.text = text
        self.headers = dict(headers or {})

    def json(self):
        if isinstance(self._json, Exception):
            raise self._json
        return self._json


def test_lambda_cloud_client_success(monkeypatch):
    def _fake_request(method, url, headers=None, json=None, timeout=None):
        assert method == "GET"
        assert url.endswith("/instances")
        return _Resp(status_code=200, json_obj={"data": [{"id": "i-1"}]}, text="ok")

    import ylff.services.orchestration.lambda_cloud as lc

    monkeypatch.setattr(lc.requests, "request", _fake_request)
    c = LambdaCloudClient(LambdaCloudClientConfig(api_key="k", min_interval_s=0.0, max_retries=0))
    out = c.list_instances()
    assert out["data"][0]["id"] == "i-1"


def test_lambda_cloud_client_error_code_normalization(monkeypatch):
    def _fake_request(method, url, headers=None, json=None, timeout=None):
        return _Resp(
            status_code=400,
            json_obj={"error": {"code": "bad_request", "message": "nope"}},
            text="err",
        )

    import ylff.services.orchestration.lambda_cloud as lc

    monkeypatch.setattr(lc.requests, "request", _fake_request)
    c = LambdaCloudClient(LambdaCloudClientConfig(api_key="k", min_interval_s=0.0, max_retries=0))
    with pytest.raises(LambdaCloudError) as ei:
        c.list_instances()
    assert ei.value.code == "bad_request"
    assert ei.value.status_code == 400