From aff753b8270dcd2a3ffc3849d940211f748cbdeb Mon Sep 17 00:00:00 2001 From: Vincent Simonin <vincent.simonin@ext.ec.europa.eu> Date: Wed, 12 Jul 2023 12:59:00 +0200 Subject: [PATCH] Increase the mapping URL max length to 2000 char --- .../netbox_rps_plugin/__init__.py | 2 +- .../migrations/0006_url_max_length.py | 27 +++++++++ .../netbox_rps_plugin/models.py | 8 +-- plugins/netbox-rps-plugin/setup.py | 2 +- .../tests/e2e/test_mapping_creation.py | 15 +++++ .../tests/e2e/test_mapping_unique.py | 1 - .../tests/e2e/test_url_max_length.py | 60 +++++++++++++++++++ 7 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 plugins/netbox-rps-plugin/netbox_rps_plugin/migrations/0006_url_max_length.py create mode 100644 plugins/netbox-rps-plugin/tests/e2e/test_url_max_length.py diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py index 0709e6b..cad9ec1 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/__init__.py @@ -5,7 +5,7 @@ class NetBoxRpsConfig(PluginConfig): name = 'netbox_rps_plugin' verbose_name = 'NetBox RPS' description = 'A Netbox plugin to add RPS resources' - version = '0.8.4' + version = '0.8.5' author = "Vincent Simonin" author_email = "vincent.simonin@ext.ec.europa.eu" base_url = 'rps' diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/migrations/0006_url_max_length.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/migrations/0006_url_max_length.py new file mode 100644 index 0000000..3cc70a9 --- /dev/null +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/migrations/0006_url_max_length.py @@ -0,0 +1,27 @@ +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('netbox_rps_plugin', '0005_source_mapping_unique_constraint') + ] + + operations = [ + migrations.AlterField( + model_name='mapping', + name='source', + field=models.CharField(null=False, blank=False, max_length=2000, unique=True), + ), + migrations.AlterField( + model_name='mapping', + name='target', + field=models.CharField(null=False, blank=False, max_length=2000), + ), + migrations.AlterField( + model_name='mapping', + name='testingpage', + field=models.CharField(null=True, blank=True, max_length=2000), + ), + ] diff --git a/plugins/netbox-rps-plugin/netbox_rps_plugin/models.py b/plugins/netbox-rps-plugin/netbox_rps_plugin/models.py index 1110787..b4c7c43 100644 --- a/plugins/netbox-rps-plugin/netbox_rps_plugin/models.py +++ b/plugins/netbox-rps-plugin/netbox_rps_plugin/models.py @@ -30,20 +30,18 @@ class ApplyToChoices(ChoiceSet): class Mapping(NetBoxModel): - source = models.CharField( - max_length=120, + max_length=2000, blank=False, verbose_name='Source', validators=[URLValidator(message='It must be a url')], unique=True ) target = models.CharField( - max_length=120, + max_length=2000, blank=False, verbose_name='Target', validators=[URLValidator(message='It must be a url')], - ) authentication = models.CharField( max_length=30, @@ -53,7 +51,7 @@ class Mapping(NetBoxModel): verbose_name='Auth', ) testingpage = models.CharField( - max_length=120, + max_length=2000, blank=True, null=True, validators=[URLValidator(message='It must be a url')], diff --git a/plugins/netbox-rps-plugin/setup.py b/plugins/netbox-rps-plugin/setup.py index 79bdd00..5ba2bcd 100644 --- a/plugins/netbox-rps-plugin/setup.py +++ b/plugins/netbox-rps-plugin/setup.py @@ -2,7 +2,7 @@ from setuptools import find_packages, setup setup( name='netbox_rps_plugin', - version='0.8.4', + version='0.8.5', description='A Netbox plugin to add RPS resources', install_requires=[], packages=find_packages(), diff --git a/plugins/netbox-rps-plugin/tests/e2e/test_mapping_creation.py b/plugins/netbox-rps-plugin/tests/e2e/test_mapping_creation.py index fbed01a..e5390d1 100644 --- a/plugins/netbox-rps-plugin/tests/e2e/test_mapping_creation.py +++ b/plugins/netbox-rps-plugin/tests/e2e/test_mapping_creation.py @@ -1,8 +1,10 @@ import unittest import requests +import json class TestMappingCreation(unittest.TestCase): + mappingId=None def test_that_mapping_is_created(self): r = requests.post( @@ -20,6 +22,19 @@ class TestMappingCreation(unittest.TestCase): self.assertEqual(r.status_code, 201) + self.mappingId = json.loads(r.content)['id']; + + def tearDown(self) -> None: + requests.delete( + url='http://localhost:8000/api/plugins/rps/mapping/', + json=[{ + "id": self.mappingId + }], + headers={ + "Authorization": "Token 52121418bdd7411f6a0ee99b41561099810a8785" + } + ) + if __name__ == '__main__': unittest.main() diff --git a/plugins/netbox-rps-plugin/tests/e2e/test_mapping_unique.py b/plugins/netbox-rps-plugin/tests/e2e/test_mapping_unique.py index 636c7ad..97bef4a 100644 --- a/plugins/netbox-rps-plugin/tests/e2e/test_mapping_unique.py +++ b/plugins/netbox-rps-plugin/tests/e2e/test_mapping_unique.py @@ -1,7 +1,6 @@ import unittest import requests import json -from pprint import pp class TestMappingUnique(unittest.TestCase): diff --git a/plugins/netbox-rps-plugin/tests/e2e/test_url_max_length.py b/plugins/netbox-rps-plugin/tests/e2e/test_url_max_length.py new file mode 100644 index 0000000..44f33d8 --- /dev/null +++ b/plugins/netbox-rps-plugin/tests/e2e/test_url_max_length.py @@ -0,0 +1,60 @@ +import unittest +import requests + + +class TestMappingCreation(unittest.TestCase): + + def test_that_source_url_has_max_length(self): + r = requests.post( + url='http://localhost:8000/api/plugins/rps/mapping/', + json={ + "source": "https://truc.com/api" + ('i' * 1981), + "target": "http://10.10.10.10:1886/api", + "authentication": "none", + "testingpage": None + }, + headers={ + "Authorization": "Token 52121418bdd7411f6a0ee99b41561099810a8785" + } + ) + + self.assertEqual(r.status_code, 400) + self.assertEqual(r.content, b'{"source":["Ensure this field has no more than 2000 characters."]}') + + def test_that_target_url_has_max_length(self): + r = requests.post( + url='http://localhost:8000/api/plugins/rps/mapping/', + json={ + "source": "https://truc.com/api", + "target": "http://10.10.10.10:1886/api" + ('i' * 1974), + "authentication": "none", + "testingpage": None + }, + headers={ + "Authorization": "Token 52121418bdd7411f6a0ee99b41561099810a8785" + } + ) + + self.assertEqual(r.status_code, 400) + self.assertEqual(r.content, b'{"target":["Ensure this field has no more than 2000 characters."]}') + + def test_that_testingpage_url_has_max_length(self): + r = requests.post( + url='http://localhost:8000/api/plugins/rps/mapping/', + json={ + "source": "https://truc.com/api", + "target": "http://10.10.10.10:1886/api", + "authentication": "none", + "testingpage": "https://truc.com/api" + ('i' * 1981), + }, + headers={ + "Authorization": "Token 52121418bdd7411f6a0ee99b41561099810a8785" + } + ) + + self.assertEqual(r.status_code, 400) + self.assertEqual(r.content, b'{"testingpage":["Ensure this field has no more than 2000 characters."]}') + + +if __name__ == '__main__': + unittest.main() -- GitLab