From 30939755f7a194d22b730faf04246c19139251a3 Mon Sep 17 00:00:00 2001 From: MOIS3Y Date: Tue, 29 Aug 2023 16:02:52 +0900 Subject: [PATCH] Create: collector_api tests --- .../collector/api/tests/__init__.py | 0 .../collector/api/tests/test_urls.py | 31 +++++ .../collector/api/tests/test_views.py | 111 ++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 logs_collector/collector/api/tests/__init__.py create mode 100644 logs_collector/collector/api/tests/test_urls.py create mode 100644 logs_collector/collector/api/tests/test_views.py diff --git a/logs_collector/collector/api/tests/__init__.py b/logs_collector/collector/api/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/logs_collector/collector/api/tests/test_urls.py b/logs_collector/collector/api/tests/test_urls.py new file mode 100644 index 0000000..9f98ece --- /dev/null +++ b/logs_collector/collector/api/tests/test_urls.py @@ -0,0 +1,31 @@ +from django.urls import resolve, reverse +from django.test import TestCase + +from collector.api import views + + +class TestUrls(TestCase): + + def test_list_all_archives_url_is_resolved(self): + url = reverse('collector_api:archive-list') + self.assertEquals(resolve(url).func.cls, views.ArchiveViewSet) + + def test_detail_archive_url_is_resolved(self): + url = reverse('collector_api:archive-detail', args=[1]) + self.assertEquals(resolve(url).func.cls, views.ArchiveViewSet) + + def test_list_all_tickets_url_is_resolved(self): + url = reverse('collector_api:ticket-list') + self.assertEquals(resolve(url).func.cls, views.TicketViewSet) + + def test_detail_ticket_url_is_resolved(self): + url = reverse('collector_api:ticket-detail', args=[1488228]) + self.assertEquals(resolve(url).func.cls, views.TicketViewSet) + + def test_list_all_platforms_url_is_resolved(self): + url = reverse('collector_api:platform-list') + self.assertEquals(resolve(url).func.cls, views.PlatformViewSet) + + def test_detail_platform_url_is_resolved(self): + url = reverse('collector_api:platform-detail', args=['vm6']) + self.assertEquals(resolve(url).func.cls, views.PlatformViewSet) diff --git a/logs_collector/collector/api/tests/test_views.py b/logs_collector/collector/api/tests/test_views.py new file mode 100644 index 0000000..b3718d8 --- /dev/null +++ b/logs_collector/collector/api/tests/test_views.py @@ -0,0 +1,111 @@ +from pathlib import Path +from django.core.files.base import ContentFile +from django.conf import settings +from django.contrib.auth.models import User +from django.urls import reverse + +from rest_framework import status +from rest_framework.test import APITestCase + +from collector.models import Archive, Platform, Ticket + + +def delete_test_files(ticket): + test_file = settings.MEDIA_ROOT_FOR_SENSITIVE_FILES / Path(str(ticket)) + test_file.unlink(missing_ok=True) + + +class TestViews(APITestCase): + + def setUp(self): + self.test_user = User.objects.create( + username='oops', + password='hG2wS231YPWmj3' + ) + self.test_platform = Platform.objects.create( + name='vm6', + pretty_name='VMmanager 6' + ) + self.test_ticket = Ticket.objects.create( + number=1488228, + platform=self.test_platform, + token='e04f4c3c-ef80-49ee-a2c3-89b737a67cdb', + user=self.test_user + ) + self.archive_list_url = reverse('collector_api:archive-list') + self.test_file = ContentFile(b'...', name='test.tar.gz') + self.test_upload_data = {'file': self.test_file} + + def test_success_upload_file_from_anon_user(self): + response = self.client.post( + self.archive_list_url, + self.test_upload_data, + format='multipart', + headers={'Upload-Token': self.test_ticket.token} + ) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + test_archive = Archive.objects.last() + # ? workaround delete test file: + delete_test_files(test_archive.file) + + def test_deny_401_upload_file_from_anon_user(self): + response = self.client.post( + self.archive_list_url, + self.test_upload_data, + format='multipart', + # missing header: Upload-Token + ) + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) + + def test_deny_403_wrong_token_upload_file_from_anon_user(self): + response = self.client.post( + self.archive_list_url, + self.test_upload_data, + format='multipart', + headers={'Upload-Token': 'wrong-token'} + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + + def test_deny_423_expired_token_upload_file_from_anon_user(self): + # attribute overload (expired): + self.test_ticket.attempts = 0 + self.test_ticket.save() + response = self.client.post( + self.archive_list_url, + self.test_upload_data, + format='multipart', + headers={'Upload-Token': self.test_ticket.token} + ) + self.assertEqual(response.status_code, status.HTTP_423_LOCKED) + + def test_deny_423_resolved_ticket_state_upload_file_from_anon_user(self): + # attribute overload (ticket resolved): + self.test_ticket.resolved = True + self.test_ticket.save() + response = self.client.post( + self.archive_list_url, + self.test_upload_data, + format='multipart', + headers={'Upload-Token': self.test_ticket.token} + ) + self.assertEqual(response.status_code, status.HTTP_423_LOCKED) + + def test_deny_archive_list_GET_method_for_anon_user(self): + response = self.client.get(self.archive_list_url) + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) + + def test_deny_archive_list_PUT_method_for_anon_user(self): + response = self.client.put( + self.archive_list_url, + self.test_upload_data, + format='multipart', + headers={'Upload-Token': self.test_ticket.token} + ) + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) + + def test_deny_archive_list_DELETE_method_for_anon_user(self): + response = self.client.delete( + reverse('collector_api:archive-list'), + data={'id': 1}, + ) + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)