Skip to content

Commit 9c4cfc5

Browse files
committed
Added initial tests + expose consumers in API
1 parent 55f3561 commit 9c4cfc5

File tree

4 files changed

+79
-3
lines changed

4 files changed

+79
-3
lines changed

.tiltignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
tofu/

coral_credits/api/serializers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class Consumer(serializers.ModelSerializer):
7979
class Meta:
8080
model = models.Consumer
8181
fields = [
82+
"id",
8283
"consumer_ref",
8384
"resource_provider_account",
8485
"start",

coral_credits/api/views.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,16 @@ class ConsumerViewSet(viewsets.ModelViewSet):
178178
permission_classes = [permissions.IsAuthenticated]
179179
serializer_class = serializers.ConsumerRequestSerializer
180180

181+
# TODO: need to split the Consumer and ConsumerRequest logic really
182+
def retrieve(self, request, pk=None):
183+
consumer = get_object_or_404(self.queryset, pk=pk)
184+
serializer = serializers.Consumer(consumer, context={'request': request})
185+
return Response(serializer.data)
186+
187+
def list(self, request):
188+
serializer = serializers.Consumer(self.queryset, many=True, context={'request': request})
189+
return Response(serializer.data)
190+
181191
@action(detail=False, methods=["post"], url_path="create")
182192
def create_consumer(self, request):
183193
LOG.info(f"About to process create commit:\n{request.data}")

tofu/tests/tofu_tests.py

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,79 @@
22
from tofupy import Tofu
33
import requests
44
import os
5-
import time
5+
from datetime import datetime
6+
from dateutil.relativedelta import relativedelta
67

78
coral_uri = os.environ.get("TF_VAR_coral_uri")
89
headers = {"Authorization": "Bearer "+os.environ.get("TF_VAR_auth_token")}
910

11+
def get_lease_request_json():
12+
start_time = datetime.now().strftime("%Y-%m-%d-%H:%M:%S")
13+
end_time = (datetime.now() + relativedelta(months=1)).strftime("%Y-%m-%d-%H:%M:%S")
14+
return {
15+
"context": {
16+
"user_id": "caa8b54a-eb5e-4134-8ae2-a3946a428ec7",
17+
"project_id": "c2eced313b324cdb8e670e6e30bf387d",
18+
"auth_url": "http://api.example.com:5000/v3",
19+
"region_name": "RegionOne"
20+
},
21+
"lease": {
22+
"id": "e96b5a17-ada0-4034-a5ea-34db024b8e04",
23+
"name": "my_new_lease",
24+
"start_date": start_time,
25+
"end_date": end_time,
26+
"reservations": [
27+
{ "amount": 2,
28+
"flavor_id": "e26a4241-b83d-4516-8e0e-8ce2665d1966",
29+
"resource_type": "flavor:instance",
30+
"affinity" : None,
31+
"allocations": []
32+
}
33+
],
34+
"resource_requests": {
35+
"DISK_GB": 35,
36+
"MEMORY_MB": 1000,
37+
"VCPU": 4
38+
}
39+
}
40+
}
41+
42+
43+
lease_request_json = get_lease_request_json()
44+
1045
@pytest.fixture(scope="session")
1146
def terraform_rest_setup():
1247
working_dir = os.path.join(os.path.dirname(__file__), "..")
1348
var_file = os.path.join(working_dir, "example-config.tfvars")
49+
1450
tf = Tofu(cwd=working_dir)
1551
tf.init()
1652
tf.apply(extra_args=["--var-file="+var_file])
17-
# add_consumers()
53+
1854
yield
19-
tf.apply(extra_args=["--var-file="+var_file],destroy=True)
55+
56+
destroy = tf.apply(extra_args=["--var-file="+var_file],destroy=True)
57+
assert len(destroy.errors) == 0
58+
59+
@pytest.fixture(scope="session")
60+
def add_consumer_request(terraform_rest_setup):
61+
# Add consumer outside of tofu to simulate requests from Blazar
62+
63+
consumer = requests.post(coral_uri+"/consumer/create",headers={
64+
"Authorization": "Bearer "+os.environ.get("TF_VAR_auth_token"),
65+
"Content-Type": "application/json"
66+
},
67+
json=lease_request_json
68+
)
69+
yield consumer.status_code
70+
requests.post(coral_uri+"/consumer/on-end",headers={
71+
"Authorization": "Bearer "+os.environ.get("TF_VAR_auth_token"),
72+
"Content-Type": "application/json"
73+
},
74+
json=lease_request_json
75+
)
76+
77+
# def test_allocation_resources_still_consumed_by_deleted_consumers
2078

2179
def api_get_request(resource):
2280
return requests.get(coral_uri+"/"+resource,headers=headers).json()
@@ -97,3 +155,9 @@ def test_resource_allocations_created(terraform_rest_setup):
97155
assert allocation_resources["Q1-0"] == {"VCPU": 40000, "MEMORY_MB": 4423680, "DISK_GB": 108000}
98156
assert allocation_resources["Q1-1"] == {"VCPU": 20000, "MEMORY_MB": 2000000, "DISK_GB": 200000}
99157
assert allocation_resources["Q2-0"] == {"VCPU": 80000, "MEMORY_MB": 8000000, "DISK_GB": 300000}
158+
159+
def test_consumer_added_or_exists(add_consumer_request):
160+
assert add_consumer_request == 204
161+
162+
def test_can_query_consumer(add_consumer_request):
163+
assert len(api_get_request("consumer")) == 1

0 commit comments

Comments
 (0)