Server tests for context images for 2D tasks (#3310)

* Add server test for context images.

* Move server test for context images in engine/tests
main
MashaSS 5 years ago committed by GitHub
parent d2d75d9158
commit 0d56e2923f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -28,6 +28,7 @@ from pycocotools import coco as coco_loader
from rest_framework import status from rest_framework import status
from rest_framework.test import APIClient, APITestCase from rest_framework.test import APIClient, APITestCase
from datumaro.util.test_utils import TestDir
from cvat.apps.engine.models import (AttributeSpec, AttributeType, Data, Job, Project, from cvat.apps.engine.models import (AttributeSpec, AttributeType, Data, Job, Project,
Segment, StatusChoice, Task, Label, StorageMethodChoice, StorageChoice) Segment, StatusChoice, Task, Label, StorageMethodChoice, StorageChoice)
from cvat.apps.engine.media_extractors import ValidateDimension from cvat.apps.engine.media_extractors import ValidateDimension
@ -5283,3 +5284,98 @@ class ServerShareAPITestCase(APITestCase):
def test_api_v1_server_share_no_auth(self): def test_api_v1_server_share_no_auth(self):
response = self._run_api_v1_server_share(None, "/") response = self._run_api_v1_server_share(None, "/")
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
class TaskAnnotation2DContext(APITestCase):
def setUp(self):
self.client = APIClient()
self.task = {
"name": "my archive task without copying #11",
"overlap": 0,
"segment_size": 0,
"labels": [
{"name": "car"},
{"name": "person"},
]
}
@classmethod
def setUpTestData(cls):
create_db_users(cls)
def _get_request_with_data(self, path, data, user):
with ForceLogin(user, self.client):
response = self.client.get(path, data)
return response
def _get_request(self, path, user):
with ForceLogin(user, self.client):
response = self.client.get(path)
return response
def _create_task(self, data, image_data):
with ForceLogin(self.user, self.client):
response = self.client.post('/api/v1/tasks', data=data, format="json")
assert response.status_code == status.HTTP_201_CREATED, response.status_code
tid = response.data["id"]
response = self.client.post("/api/v1/tasks/%s/data" % tid,
data=image_data)
assert response.status_code == status.HTTP_202_ACCEPTED, response.status_code
response = self.client.get("/api/v1/tasks/%s" % tid)
task = response.data
return task
def create_zip_archive_with_related_images(self, file_name, test_dir, context_images_info):
with tempfile.TemporaryDirectory() as tmp_dir:
for img in context_images_info:
image = Image.new('RGB', size=(100, 50))
image.save(osp.join(tmp_dir, img), 'png')
if context_images_info[img]:
related_path = osp.join(tmp_dir, "related_images", img.replace(".", "_"))
os.makedirs(related_path)
image.save(osp.join(related_path, f"related_{img}"), 'png')
zip_file_path = osp.join(test_dir, file_name)
shutil.make_archive(zip_file_path, 'zip', tmp_dir)
return f"{zip_file_path}.zip"
def test_check_flag_has_related_context(self):
with TestDir() as test_dir:
test_cases = {
"All images with context": {"image_1.png": True, "image_2.png": True},
"One image with context": {"image_1.png": True, "image_2.png": False}
}
for test_case, context_img_data in test_cases.items():
filename = self.create_zip_archive_with_related_images(test_case, test_dir, context_img_data)
img_data = {
"client_files[0]": open(filename, 'rb'),
"image_quality": 75,
}
task = self._create_task(self.task, img_data)
task_id = task["id"]
response = self._get_request("/api/v1/tasks/%s/data/meta" % task_id, self.admin)
for frame in response.data["frames"]:
self.assertEqual(context_img_data[frame["name"]], frame["has_related_context"])
def test_fetch_related_image_from_server(self):
test_name = self._testMethodName
context_img_data ={"image_1.png": True}
with TestDir() as test_dir:
filename = self.create_zip_archive_with_related_images(test_name, test_dir, context_img_data)
img_data = {
"client_files[0]": open(filename, 'rb'),
"image_quality": 75,
}
task = self._create_task(self.task , img_data)
task_id = task["id"]
data = {
"quality": "original",
"type": "context_image",
"number": 0
}
response = self._get_request_with_data("/api/v1/tasks/%s/data" % task_id, data, self.admin)
self.assertEqual(response.status_code, status.HTTP_200_OK)

Loading…
Cancel
Save