moved everything to a new module called backend
This commit is contained in:
0
backend/tests/__init__.py
Normal file
0
backend/tests/__init__.py
Normal file
20
backend/tests/base.py
Normal file
20
backend/tests/base.py
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
|
||||
from flask_testing import TestCase
|
||||
from backend import app, db
|
||||
|
||||
|
||||
class BaseTestCase(TestCase):
|
||||
""" Base Tests """
|
||||
|
||||
def create_app(self):
|
||||
app.config.from_object('backend.config.Config')
|
||||
return app
|
||||
|
||||
def setUp(self):
|
||||
db.create_all()
|
||||
db.session.commit()
|
||||
|
||||
def tearDown(self):
|
||||
db.session.remove()
|
||||
db.drop_all()
|
||||
65
backend/tests/extron_smp_testing.py
Normal file
65
backend/tests/extron_smp_testing.py
Normal file
@@ -0,0 +1,65 @@
|
||||
import getpass
|
||||
import sys
|
||||
from abc import ABC, abstractmethod
|
||||
from backend.recorder_adapters import telnetlib
|
||||
|
||||
# HOST = "localhost"
|
||||
# HOST = "129.13.51.102" # Audimax SMP 351
|
||||
# HOST = "129.13.51.106" # Tulla SMP 351
|
||||
HOST = "172.22.246.207" # Test SMP MZ
|
||||
|
||||
user = "admin"
|
||||
pw = "123mzsmp"
|
||||
|
||||
|
||||
def print_tn(tn_response):
|
||||
if isinstance(tn_response, bytes):
|
||||
print(tn_response.decode("ascii").rstrip())
|
||||
else:
|
||||
print(str(tn_response).rstrip())
|
||||
|
||||
|
||||
def run_cmd(tn, cmd, timeout=1):
|
||||
tn.write(cmd)
|
||||
out = tn.read_until_non_empty_line()
|
||||
res = out
|
||||
while out is not None and out != "":
|
||||
out = tn.read_until_non_empty_line()
|
||||
print(out)
|
||||
res += out
|
||||
return res
|
||||
|
||||
|
||||
tn = telnetlib.Telnet(HOST)
|
||||
tn.read_until("\r\nPassword:")
|
||||
# password = getpass.getpass()
|
||||
password = pw
|
||||
tn.write(password + "\n\r")
|
||||
|
||||
if not tn.assert_string_in_output("Login Administrator")[0]:
|
||||
print("WRONG (admin) password!! Exiting!")
|
||||
exit(1)
|
||||
|
||||
print("OK, we have admin rights!")
|
||||
|
||||
tn.write("1Q\n")
|
||||
|
||||
# print_tn(read_line(tn))
|
||||
print_tn(tn.read_until_non_empty_line())
|
||||
print("test")
|
||||
|
||||
|
||||
# print(run_cmd(tn, "I\n"))
|
||||
# run_cmd(tn, "X1CERT\n")
|
||||
# tn.write(chr(27)+"X1CERT")
|
||||
# tn.write("WX1CERT\n")
|
||||
# tn.write(chr(27)+"1BOOT")
|
||||
# tn.write("W1BOOT\n")
|
||||
# print_tn(tn.read_until_non_empty_line())
|
||||
# tn.write("I\n")
|
||||
# print_tn(tn.read_some())
|
||||
|
||||
# tn.write("exit\n\r".encode("ascii"))
|
||||
|
||||
# print_tn(tn.read_eager())
|
||||
|
||||
49
backend/tests/test__config.py
Normal file
49
backend/tests/test__config.py
Normal file
@@ -0,0 +1,49 @@
|
||||
import os
|
||||
import unittest
|
||||
|
||||
from flask import current_app
|
||||
from flask_testing import TestCase
|
||||
|
||||
from backend import app
|
||||
|
||||
basedir = os.path.abspath(os.path.join(os.path.abspath(app.root_path), os.pardir))
|
||||
|
||||
|
||||
class TestDevelopmentConfig(TestCase):
|
||||
def create_app(self):
|
||||
app.config.from_object('backend.config.DevelopmentConfig')
|
||||
return app
|
||||
|
||||
def test_app_is_development(self):
|
||||
self.assertFalse(app.config['SECRET_KEY'] is 'you-will-never-guess')
|
||||
self.assertTrue(app.config['DEBUG'] is True)
|
||||
self.assertFalse(current_app is None)
|
||||
self.assertTrue(
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] == 'sqlite:///' + os.path.join(basedir, 'app.db_debug')
|
||||
)
|
||||
|
||||
|
||||
class TestTestingConfig(TestCase):
|
||||
def create_app(self):
|
||||
app.config.from_object('backend.config.TestingConfig')
|
||||
return app
|
||||
|
||||
def test_app_is_testing(self):
|
||||
self.assertFalse(app.config['SECRET_KEY'] is 'you-will-never-guess')
|
||||
self.assertTrue(app.config['DEBUG'])
|
||||
self.assertTrue(
|
||||
app.config['SQLALCHEMY_DATABASE_URI'] == 'sqlite:///' + os.path.join(basedir, 'app.db_test')
|
||||
)
|
||||
|
||||
|
||||
class TestProductionConfig(TestCase):
|
||||
def create_app(self):
|
||||
app.config.from_object('backend.config.Config')
|
||||
return app
|
||||
|
||||
def test_app_is_production(self):
|
||||
self.assertTrue(app.config['DEBUG'] is False)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
287
backend/tests/test_auth.py
Normal file
287
backend/tests/test_auth.py
Normal file
@@ -0,0 +1,287 @@
|
||||
import unittest
|
||||
import json
|
||||
|
||||
import time
|
||||
|
||||
from backend import db
|
||||
from backend.models.user_model import User, BlacklistToken
|
||||
from backend.tests.base import BaseTestCase
|
||||
|
||||
|
||||
def register_user(self, email, password):
|
||||
return self.client.post(
|
||||
'/auth/register',
|
||||
data=json.dumps(dict(
|
||||
email=email,
|
||||
password=password
|
||||
)),
|
||||
content_type='application/json',
|
||||
)
|
||||
|
||||
|
||||
class TestAuthBlueprint(BaseTestCase):
|
||||
def test_registration(self):
|
||||
""" Test for user registration """
|
||||
with self.client:
|
||||
response = register_user(self, 'joe@gmail.com', '123456')
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'success')
|
||||
self.assertTrue(data['message'] == 'Successfully registered.')
|
||||
self.assertTrue(data['auth_token'])
|
||||
self.assertTrue(response.content_type == 'application/json')
|
||||
self.assertEqual(response.status_code, 201)
|
||||
|
||||
def test_registered_with_already_registered_user(self):
|
||||
""" Test registration with already registered email"""
|
||||
user = User(email='joe@gmail.com', password='test')
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
with self.client:
|
||||
response = register_user(self, 'joe@gmail.com', '123456')
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'fail')
|
||||
self.assertTrue(
|
||||
data['message'] == 'User already exists. Please Log in.')
|
||||
self.assertTrue(response.content_type == 'application/json')
|
||||
self.assertEqual(response.status_code, 202)
|
||||
|
||||
def test_registered_user_login(self):
|
||||
""" Test for login of registered-user login """
|
||||
with self.client:
|
||||
# user registration
|
||||
resp_register = register_user(self, 'joe@gmail.com', '123456')
|
||||
data_register = json.loads(resp_register.data.decode())
|
||||
self.assertTrue(data_register['status'] == 'success')
|
||||
self.assertTrue(
|
||||
data_register['message'] == 'Successfully registered.'
|
||||
)
|
||||
self.assertTrue(data_register['auth_token'])
|
||||
self.assertTrue(resp_register.content_type == 'application/json')
|
||||
self.assertEqual(resp_register.status_code, 201)
|
||||
# registered user login
|
||||
response = self.client.post(
|
||||
'/auth/login',
|
||||
data=json.dumps(dict(
|
||||
nickname='test_nick',
|
||||
email='joe@gmail.com',
|
||||
password='123456'
|
||||
)),
|
||||
content_type='application/json'
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'success')
|
||||
self.assertTrue(data['message'] == 'Successfully logged in.')
|
||||
self.assertTrue(data['auth_token'])
|
||||
self.assertTrue(response.content_type == 'application/json')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_non_registered_user_login(self):
|
||||
""" Test for login of non-registered user """
|
||||
with self.client:
|
||||
response = self.client.post(
|
||||
'/auth/login',
|
||||
data=json.dumps(dict(
|
||||
nickname='test_nick',
|
||||
email='joe@gmail.com',
|
||||
password='123456'
|
||||
)),
|
||||
content_type='application/json'
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'fail')
|
||||
self.assertTrue(data['message'] == 'User does not exist.')
|
||||
self.assertTrue(response.content_type == 'application/json')
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_user_status(self):
|
||||
""" Test for user status """
|
||||
with self.client:
|
||||
resp_register = register_user(self, 'joe@gmail.com', '123456')
|
||||
response = self.client.get(
|
||||
'/auth/status',
|
||||
headers=dict(
|
||||
Authorization='Bearer ' + json.loads(
|
||||
resp_register.data.decode()
|
||||
)['auth_token']
|
||||
)
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'success')
|
||||
self.assertTrue(data['data'] is not None)
|
||||
self.assertTrue(data['data']['email'] == 'joe@gmail.com')
|
||||
# self.assertTrue(data['data']['admin'] is 'true' or 'false')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_valid_logout(self):
|
||||
""" Test for logout before token expires """
|
||||
with self.client:
|
||||
# user registration
|
||||
resp_register = register_user(self, 'joe@gmail.com', '123456')
|
||||
data_register = json.loads(resp_register.data.decode())
|
||||
self.assertTrue(data_register['status'] == 'success')
|
||||
self.assertTrue(
|
||||
data_register['message'] == 'Successfully registered.')
|
||||
self.assertTrue(data_register['auth_token'])
|
||||
self.assertTrue(resp_register.content_type == 'application/json')
|
||||
self.assertEqual(resp_register.status_code, 201)
|
||||
# user login
|
||||
resp_login = self.client.post(
|
||||
'/auth/login',
|
||||
data=json.dumps(dict(
|
||||
email='joe@gmail.com',
|
||||
password='123456'
|
||||
)),
|
||||
content_type='application/json'
|
||||
)
|
||||
data_login = json.loads(resp_login.data.decode())
|
||||
self.assertTrue(data_login['status'] == 'success')
|
||||
self.assertTrue(data_login['message'] == 'Successfully logged in.')
|
||||
self.assertTrue(data_login['auth_token'])
|
||||
self.assertTrue(resp_login.content_type == 'application/json')
|
||||
self.assertEqual(resp_login.status_code, 200)
|
||||
# valid token logout
|
||||
response = self.client.post(
|
||||
'/auth/logout',
|
||||
headers=dict(
|
||||
Authorization='Bearer ' + json.loads(
|
||||
resp_login.data.decode()
|
||||
)['auth_token']
|
||||
)
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'success')
|
||||
self.assertTrue(data['message'] == 'Successfully logged out.')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_invalid_logout(self):
|
||||
""" Testing logout after the token expires """
|
||||
with self.client:
|
||||
# user registration
|
||||
resp_register = register_user(self, 'joe@gmail.com', '123456')
|
||||
data_register = json.loads(resp_register.data.decode())
|
||||
self.assertTrue(data_register['status'] == 'success')
|
||||
self.assertTrue(
|
||||
data_register['message'] == 'Successfully registered.')
|
||||
self.assertTrue(data_register['auth_token'])
|
||||
self.assertTrue(resp_register.content_type == 'application/json')
|
||||
self.assertEqual(resp_register.status_code, 201)
|
||||
# user login
|
||||
resp_login = self.client.post(
|
||||
'/auth/login',
|
||||
data=json.dumps(dict(
|
||||
email='joe@gmail.com',
|
||||
password='123456'
|
||||
)),
|
||||
content_type='application/json'
|
||||
)
|
||||
data_login = json.loads(resp_login.data.decode())
|
||||
self.assertTrue(data_login['status'] == 'success')
|
||||
self.assertTrue(data_login['message'] == 'Successfully logged in.')
|
||||
self.assertTrue(data_login['auth_token'])
|
||||
self.assertTrue(resp_login.content_type == 'application/json')
|
||||
self.assertEqual(resp_login.status_code, 200)
|
||||
# invalid token logout
|
||||
time.sleep(6)
|
||||
response = self.client.post(
|
||||
'/auth/logout',
|
||||
headers=dict(
|
||||
Authorization='Bearer ' + json.loads(
|
||||
resp_login.data.decode()
|
||||
)['auth_token']
|
||||
)
|
||||
)
|
||||
print(response.data)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'fail')
|
||||
self.assertTrue(
|
||||
data['message'] == 'Signature expired. Please log in again.')
|
||||
self.assertEqual(response.status_code, 401)
|
||||
|
||||
def test_valid_blacklisted_token_logout(self):
|
||||
""" Test for logout after a valid token gets blacklisted """
|
||||
with self.client:
|
||||
# user registration
|
||||
resp_register = register_user(self, 'joe@gmail.com', '123456')
|
||||
data_register = json.loads(resp_register.data.decode())
|
||||
self.assertTrue(data_register['status'] == 'success')
|
||||
self.assertTrue(
|
||||
data_register['message'] == 'Successfully registered.')
|
||||
self.assertTrue(data_register['auth_token'])
|
||||
self.assertTrue(resp_register.content_type == 'application/json')
|
||||
self.assertEqual(resp_register.status_code, 201)
|
||||
# user login
|
||||
resp_login = self.client.post(
|
||||
'/auth/login',
|
||||
data=json.dumps(dict(
|
||||
email='joe@gmail.com',
|
||||
password='123456'
|
||||
)),
|
||||
content_type='application/json'
|
||||
)
|
||||
data_login = json.loads(resp_login.data.decode())
|
||||
self.assertTrue(data_login['status'] == 'success')
|
||||
self.assertTrue(data_login['message'] == 'Successfully logged in.')
|
||||
self.assertTrue(data_login['auth_token'])
|
||||
self.assertTrue(resp_login.content_type == 'application/json')
|
||||
self.assertEqual(resp_login.status_code, 200)
|
||||
# blacklist a valid token
|
||||
blacklist_token = BlacklistToken(
|
||||
token=json.loads(resp_login.data.decode())['auth_token'])
|
||||
db.session.add(blacklist_token)
|
||||
db.session.commit()
|
||||
# blacklisted valid token logout
|
||||
response = self.client.post(
|
||||
'/auth/logout',
|
||||
headers=dict(
|
||||
Authorization='Bearer ' + json.loads(
|
||||
resp_login.data.decode()
|
||||
)['auth_token']
|
||||
)
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'fail')
|
||||
self.assertTrue(data['message'] == 'Token blacklisted. Please log in again.')
|
||||
self.assertEqual(response.status_code, 401)
|
||||
|
||||
def test_valid_blacklisted_token_user(self):
|
||||
""" Test for user status with a blacklisted valid token """
|
||||
with self.client:
|
||||
resp_register = register_user(self, 'joe@gmail.com', '123456')
|
||||
# blacklist a valid token
|
||||
blacklist_token = BlacklistToken(
|
||||
token=json.loads(resp_register.data.decode())['auth_token'])
|
||||
db.session.add(blacklist_token)
|
||||
db.session.commit()
|
||||
response = self.client.get(
|
||||
'/auth/status',
|
||||
headers=dict(
|
||||
Authorization='Bearer ' + json.loads(
|
||||
resp_register.data.decode()
|
||||
)['auth_token']
|
||||
)
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'fail')
|
||||
self.assertTrue(data['message'] == 'Token blacklisted. Please log in again.')
|
||||
self.assertEqual(response.status_code, 401)
|
||||
|
||||
def test_user_status_malformed_bearer_token(self):
|
||||
""" Test for user status with malformed bearer token"""
|
||||
with self.client:
|
||||
resp_register = register_user(self, 'joe@gmail.com', '123456')
|
||||
response = self.client.get(
|
||||
'/auth/status',
|
||||
headers=dict(
|
||||
Authorization='Bearer' + json.loads(
|
||||
resp_register.data.decode()
|
||||
)['auth_token']
|
||||
)
|
||||
)
|
||||
data = json.loads(response.data.decode())
|
||||
self.assertTrue(data['status'] == 'fail')
|
||||
self.assertTrue(data['message'] == 'Bearer token malformed.')
|
||||
self.assertEqual(response.status_code, 401)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
36
backend/tests/test_user_model.py
Normal file
36
backend/tests/test_user_model.py
Normal file
@@ -0,0 +1,36 @@
|
||||
import unittest
|
||||
|
||||
from backend import db
|
||||
from backend.models.user_model import User
|
||||
from backend.tests.base import BaseTestCase
|
||||
|
||||
|
||||
class TestUserModel(BaseTestCase):
|
||||
|
||||
def test_encode_auth_token(self):
|
||||
user = User(
|
||||
nickname='testheini',
|
||||
email='test@test.com',
|
||||
password='test'
|
||||
)
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
auth_token = user.encode_auth_token()
|
||||
self.assertTrue(isinstance(auth_token, bytes))
|
||||
|
||||
def test_decode_auth_token(self):
|
||||
user = User(
|
||||
nickname='testheini',
|
||||
email='test@test.com',
|
||||
password='test'
|
||||
)
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
auth_token = user.encode_auth_token()
|
||||
self.assertTrue(isinstance(auth_token, bytes))
|
||||
self.assertTrue(User.decode_auth_token(
|
||||
auth_token.decode("utf-8")) == 1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user