Skip to content

Commit 1fbafa8

Browse files
committed
wip: added location integration tests
1 parent e7f34a4 commit 1fbafa8

3 files changed

Lines changed: 70 additions & 4 deletions

File tree

datacrunch/instances/instances.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ def action(self, id_list: Union[List[str], str], action: str, volume_ids: Option
427427
return
428428

429429
# TODO: use enum/const for location_code
430-
def is_available(self, instance_type: str, is_spot: bool = None, location_code: str = None) -> bool:
430+
def is_available(self, instance_type: str, is_spot: bool = False, location_code: str = None) -> bool:
431431
"""Returns True if a specific instance type is now available for deployment
432432
433433
:param instance_type: instance type
@@ -439,7 +439,7 @@ def is_available(self, instance_type: str, is_spot: bool = None, location_code:
439439
:return: True if available to deploy, False otherwise
440440
:rtype: bool
441441
"""
442-
is_spot = str(is_spot).lower() if is_spot is not None else None
442+
is_spot = str(is_spot).lower()
443443
query_params = {'isSpot': is_spot, 'location_code': location_code}
444444
url = f'/instance-availability/{instance_type}'
445445
return self._http_client.get(url, query_params).json()
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import os
2+
import pytest
3+
from datacrunch.datacrunch import DataCrunchClient
4+
from datacrunch.constants import Locations
5+
6+
IN_GITHUB_ACTIONS = os.getenv("GITHUB_ACTIONS") == "true"
7+
8+
location_codes = [Locations.FIN_01, Locations.ICE_01]
9+
10+
11+
@pytest.mark.skipif(IN_GITHUB_ACTIONS, reason="Test doesn't work in Github Actions.")
12+
@pytest.mark.withoutresponses
13+
class TestLocations():
14+
15+
def test_specific_instance_availability_in_specific_location(self, datacrunch_client: DataCrunchClient):
16+
# call the instance availability endpoint, for a specific location
17+
availability = datacrunch_client.instances.is_available(
18+
'CPU.4V', location_code=Locations.FIN_01)
19+
20+
assert availability is not None
21+
assert isinstance(availability, bool)
22+
23+
def test_all_availabilies_in_specific_location(self, datacrunch_client: DataCrunchClient):
24+
25+
# call the instance availability endpoint, for a specific location
26+
availabilities = datacrunch_client.instances.get_availabilities(
27+
location_code=Locations.FIN_01)
28+
29+
assert availabilities is not None
30+
assert isinstance(availabilities, list)
31+
assert len(availabilities) == 1
32+
assert availabilities[0]['location_code'] in location_codes
33+
assert isinstance(availabilities[0]['availabilities'], list)
34+
assert len(availabilities[0]['availabilities']) > 0
35+
36+
def test_all_availabilites(self, datacrunch_client: DataCrunchClient):
37+
# call the instance availability endpoint, for all locations
38+
all_availabilities = datacrunch_client.instances.get_availabilities()
39+
40+
assert all_availabilities is not None
41+
assert isinstance(all_availabilities, list)
42+
assert len(all_availabilities) > 1
43+
assert all_availabilities[0]['location_code'] in location_codes
44+
assert all_availabilities[1]['location_code'] in location_codes
45+
assert isinstance(all_availabilities[0]['availabilities'], list)
46+
assert len(all_availabilities[0]['availabilities']) > 0
47+
48+
def test_get_all_locations(self, datacrunch_client: DataCrunchClient):
49+
# call the locations endpoint
50+
locations = datacrunch_client.locations.get()
51+
52+
assert locations is not None
53+
assert isinstance(locations, list)
54+
55+
assert locations[0]['code'] in location_codes
56+
assert locations[1]['code'] in location_codes
57+
assert locations[0]['code'] != locations[1]['code']
58+
59+
assert locations[0]['name'] is not None
60+
assert locations[1]['name'] is not None
61+
assert locations[0]['name'] != locations[1]['name']
62+
63+
assert locations[0]['country_code'] is not None
64+
assert locations[1]['country_code'] is not None
65+
assert locations[0]['country_code'] != locations[1]['country_code']

tests/unit_tests/instances/test_instances.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ def test_action_failed(self, instances_service, endpoint):
428428
def test_is_available_successful(self, instances_service):
429429
# arrange - add response mock
430430
url = instances_service._http_client._base_url + \
431-
'/instance-availability/' + INSTANCE_TYPE
431+
'/instance-availability/' + INSTANCE_TYPE + "?isSpot=false"
432432
responses.add(
433433
responses.GET,
434434
url,
@@ -464,7 +464,8 @@ def test_is_spot_available_successful(self, instances_service):
464464

465465
def test_is_available_failed(self, instances_service):
466466
# arrange - add response mock
467-
url = instances_service._http_client._base_url + '/instance-availability/x'
467+
url = instances_service._http_client._base_url + \
468+
'/instance-availability/x' + "?isSpot=false"
468469
responses.add(
469470
responses.GET,
470471
url,

0 commit comments

Comments
 (0)