tests: switch from nose to pytest

This commit is contained in:
Iain Learmonth 2023-03-30 14:11:09 +01:00
parent 2ad5da6e3b
commit 36cc1dc7ab
4 changed files with 96 additions and 43 deletions

View file

@ -41,13 +41,13 @@ test:mypy:
- pip install -r requirements-types.txt --quiet - pip install -r requirements-types.txt --quiet
- mypy app - mypy app
test:nose: test:pytest:
script: script:
- cp config.yaml.example config.yaml - cp config.yaml.example config.yaml
- apt update && apt install build-essential - apt update && apt install build-essential
- pip install -r requirements.txt --quiet - pip install -r requirements.txt --quiet
- pip install nose - pip install pytest
- DISABLE_METRICS=true nosetests tests - DISABLE_METRICS=true pytest tests
test:pylint: test:pylint:
script: script:

View file

@ -5,5 +5,5 @@ set -e
bandit -r app bandit -r app
flake8 app flake8 app
mypy app mypy app
nosetests tests pytest tests

View file

@ -1,47 +1,44 @@
import json import json
import unittest
from nose.tools import assert_equal, assert_not_in
from app.terraform.list import obfuscator from app.terraform.list import obfuscator
def test_obfuscating_string(): class TestObfuscatingEncoder(unittest.TestCase):
data = "hello" def test_obfuscating_string(self):
obfs = obfuscator(data) data = "hello"
print(f"Obfuscated string: {obfs}") obfs = obfuscator(data)
j = json.dumps(obfs).replace("!AAA!", "\\u") print(f"Obfuscated string: {obfs}")
loaded = json.loads(j) j = json.dumps(obfs).replace("!AAA!", "\\u")
assert_equal(data, loaded) loaded = json.loads(j)
self.assertEqual(data, loaded)
def test_obfuscating_simple_dict(self):
data = {"hello": "world"}
obfs = obfuscator(data)
print(f"Obfuscated string: {obfs}")
j = json.dumps(obfs).replace("!AAA!", "\\u")
self.assertNotIn("hello", obfs)
self.assertNotIn("world", obfs)
loaded = json.loads(j)
self.assertEqual(data, loaded)
def test_obfuscating_simple_dict(): def test_obfuscating_simple_list(self):
data = {"hello": "world"} data = ["hello", "world"]
obfs = obfuscator(data) obfs = obfuscator(data)
print(f"Obfuscated string: {obfs}") print(f"Obfuscated string: {obfs}")
j = json.dumps(obfs).replace("!AAA!", "\\u") j = json.dumps(obfs).replace("!AAA!", "\\u")
assert_not_in("hello", obfs) self.assertNotIn("hello", obfs)
assert_not_in("world", obfs) self.assertNotIn("world", obfs)
loaded = json.loads(j) loaded = json.loads(j)
assert_equal(data, loaded) self.assertEqual(data, loaded)
def test_obfuscating_for_real(self):
def test_obfuscating_simple_list(): data = json.load(open("tests/list/mirrorSites.json"))
data = ["hello", "world"] obfs = obfuscator(data)
obfs = obfuscator(data) j = json.dumps(obfs).replace("!AAA!", "\\u")
print(f"Obfuscated string: {obfs}") print(f"Obfuscated string: {obfs}")
j = json.dumps(obfs).replace("!AAA!", "\\u") for a in range(17, 27):
assert_not_in("hello", obfs) self.assertNotIn(chr(a), j)
assert_not_in("world", obfs) loaded = json.loads(j)
loaded = json.loads(j) self.assertEqual(data, loaded)
assert_equal(data, loaded)
def test_obfuscating_for_real():
data = json.load(open("tests/list/mirrorSites.json"))
obfs = obfuscator(data)
j = json.dumps(obfs).replace("!AAA!", "\\u")
print(f"Obfuscated string: {obfs}")
for a in range(17, 27):
assert_not_in(chr(a), j)
loaded = json.loads(j)
assert_equal(data, loaded)

View file

@ -0,0 +1,56 @@
import unittest
from unittest.mock import MagicMock, patch
from app.terraform.proxy import ProxyAutomation, update_smart_proxy_instance
from app import app
class TestUpdateSmartProxyInstance(unittest.TestCase):
def setUp(self):
self.group_id = 1
self.provider = 'test_provider'
self.region = 'test_region'
self.instance_id = 'test_instance_id'
app.config['TESTING'] = True
self.app = app.test_client()
@patch('app.terraform.proxy.SmartProxy')
@patch('app.terraform.proxy.db')
def test_update_smart_proxy_instance_new(self, mock_db, mock_smart_proxy):
# Configure the mocked SmartProxy query to return None
mock_smart_proxy.query.filter.return_value.first.return_value = None
# Call the function
update_smart_proxy_instance(self.group_id, self.provider, self.region, self.instance_id)
# Assert that a new SmartProxy instance was created and added to the session
mock_smart_proxy.assert_called_once()
mock_db.session.add.assert_called_once()
@patch('app.terraform.proxy.SmartProxy')
@patch('app.terraform.proxy.db')
def test_update_smart_proxy_instance_existing(self, mock_db, mock_smart_proxy):
# Configure the mocked SmartProxy query to return an existing instance
mock_instance = MagicMock()
mock_smart_proxy.query.filter.return_value.first.return_value = mock_instance
# Call the function
update_smart_proxy_instance(self.group_id, self.provider, self.region, self.instance_id)
# Assert that the existing SmartProxy instance was updated
self.assertEqual(mock_instance.instance_id, self.instance_id)
class TestProxyAutomation(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
self.app = app.test_client()
def test_proxy_automation_abstract_methods(self):
# Test NotImplementedError for import_state
with self.assertRaises(NotImplementedError):
proxy_automation = ProxyAutomation()
proxy_automation.import_state(None)
if __name__ == '__main__':
unittest.main()