|
1 | 1 | import ipaddress |
2 | 2 | import time |
3 | | -from test.integration.conftest import get_region |
| 3 | +from test.integration.conftest import get_region, get_system_alerts |
4 | 4 | from test.integration.helpers import ( |
5 | 5 | get_test_label, |
6 | 6 | retry_sending_request, |
|
10 | 10 |
|
11 | 11 | import pytest |
12 | 12 |
|
13 | | -from linode_api4.errors import ApiError |
| 13 | +from linode_api4.errors import ApiError, UnexpectedResponseError |
14 | 14 | from linode_api4.objects import ( |
15 | 15 | Config, |
16 | 16 | ConfigInterface, |
@@ -231,10 +231,36 @@ def get_status(linode: Instance, status: str): |
231 | 231 | return linode.status == status |
232 | 232 |
|
233 | 233 |
|
| 234 | +def wait_for_clone_complete_and_delete_linode( |
| 235 | + interval: int, timeout: int, linode: Instance |
| 236 | +) -> object: |
| 237 | + end_time = time.time() + timeout |
| 238 | + while time.time() < end_time: |
| 239 | + try: |
| 240 | + return linode.delete() |
| 241 | + except ApiError as err: |
| 242 | + if "[400] Linode is the target of an ongoing clone" not in str(err): |
| 243 | + raise UnexpectedResponseError(f"Unexpected delete linode error") |
| 244 | + time.sleep(interval) |
| 245 | + raise TimeoutError( |
| 246 | + f"Timeout Error: not possible to delete just cloned linode in {timeout} seconds" |
| 247 | + ) |
| 248 | + |
| 249 | + |
234 | 250 | def instance_type_condition(linode: Instance, type: str): |
235 | 251 | return type in str(linode.type) |
236 | 252 |
|
237 | 253 |
|
| 254 | +def test_get_linodes_verify_alerts(test_linode_client, create_linode): |
| 255 | + linodes_list = test_linode_client.linode.instances().lists[0] |
| 256 | + assert len(linodes_list) > 0 |
| 257 | + assert linodes_list[0].alerts.cpu |
| 258 | + assert linodes_list[0].alerts.io |
| 259 | + assert linodes_list[0].alerts.network_in |
| 260 | + assert linodes_list[0].alerts.network_out |
| 261 | + assert linodes_list[0].alerts.transfer_quota |
| 262 | + |
| 263 | + |
238 | 264 | def test_get_linode(test_linode_client, linode_with_volume_firewall): |
239 | 265 | linode = test_linode_client.load(Instance, linode_with_volume_firewall.id) |
240 | 266 |
|
@@ -283,6 +309,8 @@ def test_linode_rebuild(test_linode_client): |
283 | 309 |
|
284 | 310 | assert linode.status == "rebuilding" |
285 | 311 | assert linode.image.id == "linode/debian12" |
| 312 | + assert linode.alerts.cpu |
| 313 | + assert linode.alerts.io |
286 | 314 |
|
287 | 315 | assert linode.disk_encryption == InstanceDiskEncryptionType.disabled |
288 | 316 |
|
@@ -346,6 +374,75 @@ def test_linode_reboot(create_linode): |
346 | 374 | assert linode.status == "running" |
347 | 375 |
|
348 | 376 |
|
| 377 | +def test_linode_alerts_workflow(test_linode_client, create_linode): |
| 378 | + linode = create_linode |
| 379 | + parent_linode_id = create_linode.id |
| 380 | + assert linode.alerts.cpu == 90 |
| 381 | + assert linode.alerts.io == 10000 |
| 382 | + assert linode.alerts.network_in == 10 |
| 383 | + assert linode.alerts.network_out == 10 |
| 384 | + assert linode.alerts.transfer_quota == 80 |
| 385 | + assert isinstance(linode.alerts.system_alerts, list) |
| 386 | + assert isinstance(linode.alerts.user_alerts, list) |
| 387 | + |
| 388 | + linode = test_linode_client.load(Instance, parent_linode_id) |
| 389 | + assert linode.alerts.cpu == 90 |
| 390 | + assert linode.alerts.io == 10000 |
| 391 | + assert linode.alerts.network_in == 10 |
| 392 | + assert linode.alerts.network_out == 10 |
| 393 | + assert linode.alerts.transfer_quota == 80 |
| 394 | + assert isinstance(linode.alerts.system_alerts, list) |
| 395 | + assert isinstance(linode.alerts.user_alerts, list) |
| 396 | + |
| 397 | + linode.alerts = { |
| 398 | + "cpu": 50, |
| 399 | + "io": 6000, |
| 400 | + "network_in": 20, |
| 401 | + "network_out": 20, |
| 402 | + "transfer_quota": 40, |
| 403 | + } |
| 404 | + linode_save_status = linode.save() |
| 405 | + assert linode_save_status == True |
| 406 | + assert linode.alerts["cpu"] == 50 |
| 407 | + assert linode.alerts["io"] == 6000 |
| 408 | + assert linode.alerts["network_in"] == 20 |
| 409 | + assert linode.alerts["network_out"] == 20 |
| 410 | + assert linode.alerts["transfer_quota"] == 40 |
| 411 | + |
| 412 | + wait_for_condition(10, 100, get_status, linode, "running") |
| 413 | + new_linode = retry_sending_request( |
| 414 | + 5, |
| 415 | + linode.clone, |
| 416 | + region=linode.region.id, |
| 417 | + instance_type=linode.type.id, |
| 418 | + label=get_test_label(), |
| 419 | + ) |
| 420 | + assert new_linode.alerts.cpu == 90 |
| 421 | + assert new_linode.alerts.io == 10000 |
| 422 | + assert new_linode.alerts.network_in == 10 |
| 423 | + assert new_linode.alerts.network_out == 10 |
| 424 | + assert new_linode.alerts.transfer_quota == 80 |
| 425 | + assert isinstance(new_linode.alerts.system_alerts, list) |
| 426 | + assert isinstance(new_linode.alerts.user_alerts, list) |
| 427 | + |
| 428 | + wait_for_clone_complete_and_delete_linode(10, 100, new_linode) |
| 429 | + |
| 430 | + |
| 431 | +def test_update_linode_aclp_alerts( |
| 432 | + test_linode_client, create_linode, create_alert_service_definition |
| 433 | +): |
| 434 | + linode = create_linode |
| 435 | + sample_system_alert = get_system_alerts(test_linode_client)[0].id |
| 436 | + |
| 437 | + linode.alerts = { |
| 438 | + "user_alerts": [create_alert_service_definition.id], |
| 439 | + "system_alerts": [sample_system_alert], |
| 440 | + } |
| 441 | + linode.save() |
| 442 | + assert linode.alerts["user_alerts"] == [create_alert_service_definition.id] |
| 443 | + assert linode.alerts["system_alerts"] == [sample_system_alert] |
| 444 | + |
| 445 | + |
349 | 446 | def test_linode_shutdown(create_linode): |
350 | 447 | linode = create_linode |
351 | 448 |
|
|
0 commit comments