Spaces:
Building
Building
Clement Vachet
commited on
Commit
·
b41850c
1
Parent(s):
c2555b8
Add unit tests via pytest
Browse files- tests/__init__.py +0 -0
- tests/data/boats.jpg +0 -0
- tests/data/savanna.jpg +0 -0
- tests/test_lambda.py +57 -0
- tests/test_ml_detection.py +35 -0
- tests/test_ml_utils.py +11 -0
tests/__init__.py
ADDED
File without changes
|
tests/data/boats.jpg
ADDED
![]() |
tests/data/savanna.jpg
ADDED
![]() |
tests/test_lambda.py
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import sys
|
3 |
+
import pytest
|
4 |
+
import json
|
5 |
+
import base64
|
6 |
+
|
7 |
+
|
8 |
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
9 |
+
parent_dir = os.path.dirname(current_dir)
|
10 |
+
sys.path.insert(0, os.path.dirname(parent_dir))
|
11 |
+
|
12 |
+
from lambda_function import lambda_handler
|
13 |
+
|
14 |
+
|
15 |
+
@pytest.fixture
|
16 |
+
def event():
|
17 |
+
# Get the directory of the current test file
|
18 |
+
test_dir = os.path.dirname(os.path.abspath(__file__))
|
19 |
+
# Construct the image path relative to the test directory
|
20 |
+
image_path = os.path.join(test_dir, 'data', 'savanna.jpg')
|
21 |
+
|
22 |
+
# Read image data
|
23 |
+
with open(image_path, 'rb') as image_file:
|
24 |
+
image_data = image_file.read()
|
25 |
+
|
26 |
+
# Encode the image data in base64
|
27 |
+
encoded_image = base64.b64encode(image_data).decode('utf-8')
|
28 |
+
|
29 |
+
# Prepare the payload
|
30 |
+
json_event = {
|
31 |
+
'body': encoded_image
|
32 |
+
}
|
33 |
+
|
34 |
+
return json_event
|
35 |
+
|
36 |
+
|
37 |
+
@pytest.fixture
|
38 |
+
def context():
|
39 |
+
return None
|
40 |
+
|
41 |
+
|
42 |
+
def test_lambda_handler(event, context):
|
43 |
+
lambda_response = lambda_handler(event, context)
|
44 |
+
response_data = json.loads(lambda_response["body"])
|
45 |
+
|
46 |
+
print("lambda_response - type",type(lambda_response))
|
47 |
+
print("lambda_response", lambda_response)
|
48 |
+
print("response_data - type", type(response_data))
|
49 |
+
print("response_data", response_data)
|
50 |
+
|
51 |
+
response_keys = list(response_data.keys())
|
52 |
+
gt_keys = ['scores', 'labels', 'boxes']
|
53 |
+
|
54 |
+
assert lambda_response["statusCode"] == 200
|
55 |
+
assert set(response_keys) == set(gt_keys), "Response keys do not match ground truth"
|
56 |
+
assert len(response_data['scores']) == 5
|
57 |
+
assert len(response_data['labels']) == 5
|
tests/test_ml_detection.py
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from detection import ml_detection
|
2 |
+
import os
|
3 |
+
import pytest
|
4 |
+
|
5 |
+
|
6 |
+
# Test model loading
|
7 |
+
@pytest.mark.parametrize("test_model_uri",[
|
8 |
+
("facebook/detr-resnet-50"),
|
9 |
+
("facebook/detr-resnet-101"),
|
10 |
+
])
|
11 |
+
def test_load_model(test_model_uri):
|
12 |
+
processor, model = ml_detection.load_model(test_model_uri)
|
13 |
+
assert processor is not None
|
14 |
+
assert model is not None
|
15 |
+
|
16 |
+
|
17 |
+
# Test image detection
|
18 |
+
@pytest.mark.parametrize("test_model_uri", [
|
19 |
+
("facebook/detr-resnet-50"),
|
20 |
+
("facebook/detr-resnet-101"),
|
21 |
+
])
|
22 |
+
def test_object_detection(test_model_uri):
|
23 |
+
processor, model = ml_detection.load_model(test_model_uri)
|
24 |
+
|
25 |
+
# Get the directory of the current test file
|
26 |
+
test_dir = os.path.dirname(os.path.abspath(__file__))
|
27 |
+
# Construct the image path relative to the test directory
|
28 |
+
image_path = os.path.join(test_dir, 'data', 'savanna.jpg')
|
29 |
+
|
30 |
+
with open(image_path, "rb") as f:
|
31 |
+
image_bytes = f.read()
|
32 |
+
|
33 |
+
results = ml_detection.object_detection(processor, model, image_bytes)
|
34 |
+
assert results is not None
|
35 |
+
assert isinstance(results, dict)
|
tests/test_ml_utils.py
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from detection import ml_utils
|
2 |
+
import torch
|
3 |
+
import json
|
4 |
+
|
5 |
+
|
6 |
+
# Test dictionary conversion
|
7 |
+
def test_convert_tensor_dict_to_json():
|
8 |
+
my_dict = {'scores': torch.tensor([1, 2, 3])}
|
9 |
+
my_list_gt = {'scores': [1, 2, 3]}
|
10 |
+
my_list = ml_utils.convert_tensor_dict_to_json(my_dict)
|
11 |
+
assert my_list == my_list_gt
|