kopia lustrzana https://github.com/OpenDroneMap/WebODM
Add some unit tests
rodzic
54296bd7a4
commit
039df51cc6
2
.env
2
.env
|
@ -10,4 +10,4 @@ WO_DEBUG=NO
|
||||||
WO_DEV=NO
|
WO_DEV=NO
|
||||||
WO_BROKER=redis://broker
|
WO_BROKER=redis://broker
|
||||||
WO_DEFAULT_NODES=1
|
WO_DEFAULT_NODES=1
|
||||||
WO_EXTERNAL_AUTH_ENDPOINT=
|
WO_SETTINGS=
|
||||||
|
|
|
@ -58,6 +58,7 @@ class ProfileSerializer(serializers.ModelSerializer):
|
||||||
read_only_fields = ('user', )
|
read_only_fields = ('user', )
|
||||||
|
|
||||||
class AdminProfileViewSet(viewsets.ModelViewSet):
|
class AdminProfileViewSet(viewsets.ModelViewSet):
|
||||||
|
pagination_class = None
|
||||||
serializer_class = ProfileSerializer
|
serializer_class = ProfileSerializer
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
lookup_field = 'user'
|
lookup_field = 'user'
|
||||||
|
|
|
@ -36,3 +36,32 @@ class ExternalTokenAuth(APIView):
|
||||||
return Response({'error': res.get('message', 'Invalid external server response')})
|
return Response({'error': res.get('message', 'Invalid external server response')})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return Response({'error': str(e)})
|
return Response({'error': str(e)})
|
||||||
|
|
||||||
|
# TODO: move to simple http server
|
||||||
|
# class TestExternalAuth(APIView):
|
||||||
|
# permission_classes = (permissions.AllowAny,)
|
||||||
|
# parser_classes = (parsers.JSONParser, parsers.FormParser,)
|
||||||
|
|
||||||
|
# def post(self, request):
|
||||||
|
# print("YO!!!")
|
||||||
|
# if settings.EXTERNAL_AUTH_ENDPOINT == '':
|
||||||
|
# return Response({'message': 'Disabled'})
|
||||||
|
|
||||||
|
# username = request.data.get("username")
|
||||||
|
# password = request.data.get("password")
|
||||||
|
|
||||||
|
# print("HERE", username)
|
||||||
|
|
||||||
|
# if username == "extuser1" and password == "test1234":
|
||||||
|
# return Response({
|
||||||
|
# 'user_id': 100,
|
||||||
|
# 'username': 'extuser1',
|
||||||
|
# 'maxQuota': 500,
|
||||||
|
# 'token': 'test',
|
||||||
|
# 'node': {
|
||||||
|
# 'hostname': 'localhost',
|
||||||
|
# 'port': 4444
|
||||||
|
# }
|
||||||
|
# })
|
||||||
|
# else:
|
||||||
|
# return Response({'message': "Invalid credentials"})
|
|
@ -1,3 +1,4 @@
|
||||||
|
import time
|
||||||
from django.contrib.auth.models import User, Group
|
from django.contrib.auth.models import User, Group
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from rest_framework.test import APIClient
|
from rest_framework.test import APIClient
|
||||||
|
@ -202,3 +203,57 @@ class TestApi(BootTestCase):
|
||||||
res = client.delete('/api/admin/groups/{}/'.format(group.id))
|
res = client.delete('/api/admin/groups/{}/'.format(group.id))
|
||||||
self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
def test_profile(self):
|
||||||
|
client = APIClient()
|
||||||
|
client.login(username="testuser", password="test1234")
|
||||||
|
|
||||||
|
user = User.objects.get(username="testuser")
|
||||||
|
|
||||||
|
# Cannot list profiles (not admin)
|
||||||
|
res = client.get('/api/admin/profiles/')
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
res = client.get('/api/admin/profiles/%s/' % user.id)
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
# Cannot update quota deadlines
|
||||||
|
res = client.post('/api/admin/profiles/%s/update_quota_deadline/' % user.id, data={'hours': 1})
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
# Admin can
|
||||||
|
client.login(username="testsuperuser", password="test1234")
|
||||||
|
|
||||||
|
res = client.get('/api/admin/profiles/')
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertTrue(len(res.data) > 0)
|
||||||
|
|
||||||
|
res = client.get('/api/admin/profiles/%s/' % user.id)
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertTrue('quota' in res.data)
|
||||||
|
self.assertTrue('user' in res.data)
|
||||||
|
|
||||||
|
# User is the primary key (not profile id)
|
||||||
|
self.assertEqual(res.data['user'], user.id)
|
||||||
|
|
||||||
|
# There should be no quota by default
|
||||||
|
self.assertEqual(res.data['quota'], -1)
|
||||||
|
|
||||||
|
# Try updating
|
||||||
|
user.profile.quota = 10
|
||||||
|
user.save()
|
||||||
|
res = client.get('/api/admin/profiles/%s/' % user.id)
|
||||||
|
self.assertEqual(res.data['quota'], 10)
|
||||||
|
|
||||||
|
# Update quota deadlines
|
||||||
|
|
||||||
|
# Miss parameters
|
||||||
|
res = client.post('/api/admin/profiles/%s/update_quota_deadline/' % user.id)
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
res = client.post('/api/admin/profiles/%s/update_quota_deadline/' % user.id, data={'hours': 48})
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertTrue('deadline' in res.data and res.data['deadline'] > time.time() + 47*60*60)
|
||||||
|
|
||||||
|
res = client.post('/api/admin/profiles/%s/update_quota_deadline/' % user.id, data={'hours': 0})
|
||||||
|
self.assertEqual(res.status_code, status.HTTP_200_OK)
|
||||||
|
self.assertTrue(abs(user.profile.get_quota_deadline() - time.time()) < 10)
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
from django.contrib.auth.models import User, Group
|
||||||
|
from rest_framework import status
|
||||||
|
from rest_framework.test import APIClient
|
||||||
|
|
||||||
|
from .classes import BootTestCase
|
||||||
|
from webodm import settings
|
||||||
|
|
||||||
|
class TestAuth(BootTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_ext_auth(self):
|
||||||
|
client = APIClient()
|
||||||
|
|
||||||
|
# Disable
|
||||||
|
settings.EXTERNAL_AUTH_ENDPOINT = ''
|
||||||
|
|
||||||
|
# Try to log-in
|
||||||
|
user = client.login(username='extuser1', password='test1234')
|
||||||
|
self.assertFalse(user)
|
||||||
|
|
||||||
|
# Enable
|
||||||
|
settings.EXTERNAL_AUTH_ENDPOINT = 'http://0.0.0.0:5555'
|
||||||
|
|
||||||
|
# TODO: start simplehttp auth server
|
||||||
|
|
||||||
|
user = client.login(username='extuser1', password='test1234')
|
||||||
|
# self.assertEqual(user.username, 'extuser1')
|
||||||
|
# self.assertEqual(user.id, 100)
|
||||||
|
|
||||||
|
|
||||||
|
# client.login(username="testuser", password="test1234")
|
||||||
|
|
||||||
|
# user = User.objects.get(username="testuser")
|
||||||
|
|
||||||
|
# # Cannot list profiles (not admin)
|
||||||
|
# res = client.get('/api/admin/profiles/')
|
||||||
|
# self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
# res = client.get('/api/admin/profiles/%s/' % user.id)
|
||||||
|
# self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
# # Cannot update quota deadlines
|
||||||
|
# res = client.post('/api/admin/profiles/%s/update_quota_deadline/' % user.id, data={'hours': 1})
|
||||||
|
# self.assertEqual(res.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
|
||||||
|
# # Admin can
|
||||||
|
# client.login(username="testsuperuser", password="test1234")
|
||||||
|
|
||||||
|
# res = client.get('/api/admin/profiles/')
|
||||||
|
# self.assertEqual(res.status_code, status.HTTP_200_OK)
|
||||||
|
# self.assertTrue(len(res.data) > 0)
|
||||||
|
|
||||||
|
# res = client.get('/api/admin/profiles/%s/' % user.id)
|
||||||
|
# self.assertEqual(res.status_code, status.HTTP_200_OK)
|
||||||
|
# self.assertTrue('quota' in res.data)
|
||||||
|
# self.assertTrue('user' in res.data)
|
||||||
|
|
||||||
|
# # User is the primary key (not profile id)
|
||||||
|
# self.assertEqual(res.data['user'], user.id)
|
||||||
|
|
||||||
|
# # There should be no quota by default
|
||||||
|
# self.assertEqual(res.data['quota'], -1)
|
||||||
|
|
||||||
|
|
|
@ -401,6 +401,7 @@ QUOTA_EXCEEDED_GRACE_PERIOD = 8
|
||||||
|
|
||||||
if TESTING or FLUSHING:
|
if TESTING or FLUSHING:
|
||||||
CELERY_TASK_ALWAYS_EAGER = True
|
CELERY_TASK_ALWAYS_EAGER = True
|
||||||
|
EXTERNAL_AUTH_ENDPOINT = '/_test-external-auth'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from .local_settings import *
|
from .local_settings import *
|
||||||
|
|
Ładowanie…
Reference in New Issue