Skip to content

Commit b834426

Browse files
author
Muhammad Naufal Andika Natsir Putra
committed
chore: revert all changes related to unittest
1 parent 3167710 commit b834426

File tree

6 files changed

+323
-290
lines changed

6 files changed

+323
-290
lines changed

python/sdk/Pipfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,3 @@ pytest-xdist = "*"
1212
[packages]
1313
merlin-sdk = {extras = ["test"],path = "."}
1414
cookiecutter = '==2.1.1'
15-
responses = ">=0.25,<1.0"

python/sdk/requirements_test.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ types-PyYAML
1414
types-six
1515
types-protobuf
1616
xarray
17-
xgboost==1.6.2
17+
xgboost==1.6.2
18+
urllib3-mock>=0.3.3

python/sdk/test/client_test.py

Lines changed: 49 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from unittest import mock
1919

2020
import pytest
21-
import responses
2221

2322
import client as cl
2423
from client import ApiClient, Configuration
@@ -28,6 +27,9 @@
2827
from merlin.util import guess_mlp_ui_url
2928
from merlin.version import VERSION
3029

30+
# get global mock responses that configured in conftest
31+
responses = pytest.responses
32+
3133

3234
@pytest.fixture
3335
def mock_url():
@@ -79,10 +81,11 @@ def serialize_datetime(obj):
7981
return obj.isoformat()
8082
raise TypeError("Type is not serializable")
8183

82-
def test_get_project(mock_url, mock_oauth, use_google_oauth, mock_responses):
83-
mock_responses.add(
84+
@responses.activate
85+
def test_get_project(mock_url, mock_oauth, use_google_oauth):
86+
responses.add(
8487
"GET",
85-
f"{mock_url}/v1/projects?name=my-project",
88+
"/api/v1/projects",
8689
body=f"""[{{
8790
"id": 0,
8891
"name": "my-project",
@@ -97,9 +100,9 @@ def test_get_project(mock_url, mock_oauth, use_google_oauth, mock_responses):
97100
m = MerlinClient(mock_url, use_google_oauth=use_google_oauth)
98101
p = m.get_project("my-project")
99102

100-
assert mock_responses.calls[-1].request.method == "GET"
101-
assert mock_responses.calls[-1].request.url == f"{mock_url}/v1/projects?name=my-project"
102-
assert mock_responses.calls[-1].request.host == "merlin.dev"
103+
assert responses.calls[-1].request.method == "GET"
104+
assert responses.calls[-1].request.url == "/api/v1/projects?name=my-project"
105+
assert responses.calls[-1].request.host == "merlin.dev"
103106

104107
assert p.id == 0
105108
assert p.name == "my-project"
@@ -109,6 +112,7 @@ def test_get_project(mock_url, mock_oauth, use_google_oauth, mock_responses):
109112
assert isinstance(p.updated_at, datetime.datetime)
110113

111114

115+
@responses.activate
112116
def test_create_invalid_project_name(
113117
mock_url, api_client, mock_oauth, use_google_oauth
114118
):
@@ -121,24 +125,25 @@ def test_create_invalid_project_name(
121125
assert client.get_project(project_name)
122126

123127

124-
def test_create_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_responses):
128+
@responses.activate
129+
def test_create_model(mock_url, api_client, mock_oauth, use_google_oauth):
125130
project_id = 1010
126131
mlflow_experiment_id = 1
127132
model_name = "my-model"
128133
project_name = "my-project"
129134
model_type = ModelType.XGBOOST
130135
mlflow_url = "http://mlflow.api.merlin.dev"
131136

132-
mock_responses.add(
137+
responses.add(
133138
"GET",
134-
f"{mock_url}/v1/projects/{project_id}/models",
139+
f"/api/v1/projects/{project_id}/models",
135140
body="[]",
136141
status=200,
137142
content_type="application/json",
138143
)
139-
mock_responses.add(
144+
responses.add(
140145
"POST",
141-
f"{mock_url}/v1/projects/{project_id}/models",
146+
f"/api/v1/projects/{project_id}/models",
142147
body=f"""{{
143148
"id": 0,
144149
"project_id": {project_id},
@@ -168,7 +173,7 @@ def test_create_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_r
168173
"my-model", project_name=project_name, model_type=model_type
169174
)
170175

171-
assert json.loads(mock_responses.calls[-1].request.body) == json.loads(
176+
assert json.loads(responses.calls[-1].request.body) == json.loads(
172177
f"""
173178
{{
174179
"name" : "{model_name}",
@@ -186,14 +191,15 @@ def test_create_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_r
186191
assert isinstance(model.updated_at, datetime.datetime)
187192
assert model.project == project
188193
assert (
189-
f"merlin-sdk/{VERSION}" in mock_responses.calls[-1].request.headers["User-Agent"]
194+
f"merlin-sdk/{VERSION}" in responses.calls[-1].request.headers["User-Agent"]
190195
)
191196
assert (
192197
f"python/{version_info.major}.{version_info.minor}.{version_info.micro}"
193-
in mock_responses.calls[-1].request.headers["User-Agent"]
198+
in responses.calls[-1].request.headers["User-Agent"]
194199
)
195200

196201

202+
@responses.activate
197203
def test_create_invalid_model_name(mock_url, api_client, mock_oauth, use_google_oauth):
198204
model_name = "invalidModelName"
199205
project_name = "my-project"
@@ -206,17 +212,18 @@ def test_create_invalid_model_name(mock_url, api_client, mock_oauth, use_google_
206212
assert client.get_or_create_model(model_name, project_name, model_type)
207213

208214

209-
def test_get_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_responses):
215+
@responses.activate
216+
def test_get_model(mock_url, api_client, mock_oauth, use_google_oauth):
210217
project_id = 1010
211218
mlflow_experiment_id = 1
212219
model_name = "my-model"
213220
project_name = "my-project"
214221
model_type = ModelType.XGBOOST
215222
mlflow_url = "http://mlflow.api.merlin.dev"
216223

217-
mock_responses.add(
224+
responses.add(
218225
"GET",
219-
f"{mock_url}/v1/projects/{project_id}/models",
226+
f"/api/v1/projects/{project_id}/models",
220227
body=f"""[{{
221228
"id": 1,
222229
"project_id": {project_id},
@@ -232,9 +239,9 @@ def test_get_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_resp
232239
content_type="application/json",
233240
)
234241

235-
mock_responses.add(
242+
responses.add(
236243
"GET",
237-
f"{mock_url}/v1/models/1/endpoints",
244+
f"/api/v1/models/1/endpoints",
238245
body=json.dumps([mdl_endpoint_1.to_dict()], default=serialize_datetime),
239246
status=200,
240247
content_type="application/json",
@@ -268,6 +275,7 @@ def test_get_model(mock_url, api_client, mock_oauth, use_google_oauth, mock_resp
268275
assert default_model_endpoint.environment_name == env_1.name
269276

270277

278+
@responses.activate
271279
def test_new_model_version(mock_url, api_client, mock_oauth, use_google_oauth):
272280
project_id = 1
273281
model_id = 1
@@ -282,9 +290,9 @@ def test_new_model_version(mock_url, api_client, mock_oauth, use_google_oauth):
282290
created_at = "2019-09-04T03:09:13.842Z"
283291
updated_at = "2019-09-04T03:09:13.843Z"
284292

285-
mock_responses.add(
293+
responses.add(
286294
"POST",
287-
f"{mock_url}/v1/models/{model_id}/versions",
295+
f"/api/v1/models/{model_id}/versions",
288296
body=f"""{{
289297
"id": {version_id},
290298
"model_id": {model_id},
@@ -335,10 +343,11 @@ def test_new_model_version(mock_url, api_client, mock_oauth, use_google_oauth):
335343
assert mv.url == f"{ui_url}/projects/1/models/{model_id}/versions"
336344

337345

346+
@responses.activate
338347
def test_list_environments(mock_url, api_client, mock_oauth, use_google_oauth):
339-
mock_responses.add(
348+
responses.add(
340349
"GET",
341-
f"{mock_url}/v1/environments",
350+
"/api/v1/environments",
342351
body=json.dumps([env_1.to_dict(), env_2.to_dict()]),
343352
status=200,
344353
content_type="application/json",
@@ -355,10 +364,11 @@ def test_list_environments(mock_url, api_client, mock_oauth, use_google_oauth):
355364
assert envs[1].is_default == env_2.is_default
356365

357366

358-
def test_get_environment(mock_url, api_client, mock_oauth, use_google_oauth, mock_responses):
359-
mock_responses.add(
367+
@responses.activate
368+
def test_get_environment(mock_url, api_client, mock_oauth, use_google_oauth):
369+
responses.add(
360370
"GET",
361-
f"{mock_url}/v1/environments",
371+
"/api/v1/environments",
362372
body=json.dumps([env_1.to_dict(), env_2.to_dict()]),
363373
status=200,
364374
content_type="application/json",
@@ -375,10 +385,11 @@ def test_get_environment(mock_url, api_client, mock_oauth, use_google_oauth, moc
375385
assert env is None
376386

377387

378-
def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oauth, mock_responses):
379-
mock_responses.add(
388+
@responses.activate
389+
def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oauth):
390+
responses.add(
380391
"GET",
381-
f"{mock_url}/v1/environments",
392+
"/api/v1/environments",
382393
body=json.dumps([env_1.to_dict(), env_2.to_dict()]),
383394
status=200,
384395
content_type="application/json",
@@ -390,11 +401,11 @@ def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oa
390401
assert env.cluster == env_1.cluster
391402
assert env.is_default == env_1.is_default
392403

393-
mock_responses.reset()
404+
responses.reset()
394405

395-
mock_responses.add(
406+
responses.add(
396407
"GET",
397-
f"{mock_url}/v1/environments",
408+
"/api/v1/environments",
398409
body=json.dumps([env_2.to_dict()]),
399410
status=200,
400411
content_type="application/json",
@@ -404,15 +415,16 @@ def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oa
404415
assert env is None
405416

406417

407-
def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oauth, mock_responses):
418+
@responses.activate
419+
def test_get_default_environment(mock_url, api_client, mock_oauth, use_google_oauth):
408420
client = MerlinClient(mock_url, use_google_oauth=use_google_oauth)
409-
mock_responses.add(
421+
responses.add(
410422
"GET",
411-
f"{mock_url}/v1/environments",
423+
"/api/v1/environments",
412424
body=json.dumps([env_2.to_dict()]),
413425
status=200,
414426
content_type="application/json",
415427
)
416428
env = client.get_default_environment()
417429

418-
assert env is None
430+
assert env is None

python/sdk/test/conftest.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,22 @@
1919
import uuid
2020
import requests as requests_lib
2121
from requests.adapters import HTTPAdapter
22-
import pytest
23-
import responses
24-
from urllib3.util.retry import Retry
22+
from requests.packages.urllib3.util.retry import Retry
23+
from urllib3_mock import Responses
2524

2625
import client as cl
2726
from client import ApiClient, Configuration
2827
from merlin.model import Model, ModelType, ModelVersion, Project
2928

30-
@pytest.fixture
31-
def mock_responses():
32-
with responses.RequestsMock() as rsps:
33-
yield rsps
29+
30+
# From the documentation (https://docs.pytest.org/en/7.1.x/reference/reference.html#pytest.hookspec.pytest_configure):
31+
# Allow plugins and conftest files to perform initial configuration.
32+
# This hook is called for every plugin and initial conftest file after command line options have been parsed.
33+
# After that, the hook is called for other conftest files as they are imported.
34+
def pytest_configure():
35+
# share mock responses as global variable so it can be reused and called as decorator on other files.
36+
pytest.responses = Responses("requests.packages.urllib3")
37+
3438

3539
@pytest.fixture
3640
def url():
@@ -154,8 +158,10 @@ def gpu_config():
154158

155159

156160
@pytest.fixture
157-
def mock_oauth(mock_responses):
158-
mock_responses.add(
161+
def mock_oauth():
162+
responses = pytest.responses
163+
164+
responses.add(
159165
"GET",
160166
"/computeMetadata/v1/instance/service-accounts/default/",
161167
body="""
@@ -169,7 +175,7 @@ def mock_oauth(mock_responses):
169175
content_type="application/json",
170176
)
171177

172-
mock_responses.add(
178+
responses.add(
173179
"GET",
174180
"/computeMetadata/v1/instance/service-accounts/[email protected]/token",
175181
body="""
@@ -185,7 +191,7 @@ def mock_oauth(mock_responses):
185191
content_type="application/json",
186192
)
187193

188-
mock_responses.add(
194+
responses.add(
189195
"GET",
190196
"/computeMetadata/v1/instance/service-accounts/default/?recursive=true",
191197
body="""
@@ -199,7 +205,7 @@ def mock_oauth(mock_responses):
199205
content_type="application/json",
200206
)
201207

202-
mock_responses.add(
208+
responses.add(
203209
"GET",
204210
"/computeMetadata/v1/instance/service-accounts/default/identity?audience=sdk.caraml&format=full",
205211
body="""eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6qJp6IcmD3HP99Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJNqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7TpdQyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoSK5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg""",
@@ -208,7 +214,7 @@ def mock_oauth(mock_responses):
208214
match_querystring=True,
209215
)
210216

211-
mock_responses.add(
217+
responses.add(
212218
"GET",
213219
"/computeMetadata/api/v1/instance/service-accounts/default/",
214220
body="""
@@ -222,7 +228,7 @@ def mock_oauth(mock_responses):
222228
content_type="application/json",
223229
)
224230

225-
mock_responses.add(
231+
responses.add(
226232
"GET",
227233
"/computeMetadata/api/v1/instance/service-accounts/[email protected]/token",
228234
body="""
@@ -238,7 +244,7 @@ def mock_oauth(mock_responses):
238244
content_type="application/json",
239245
)
240246

241-
mock_responses.add(
247+
responses.add(
242248
"POST",
243249
"/token",
244250
body="""
@@ -252,4 +258,4 @@ def mock_oauth(mock_responses):
252258
""",
253259
status=200,
254260
content_type="application/json",
255-
)
261+
)

0 commit comments

Comments
 (0)