From 4f845b927173d47b023801302416b167fafb0856 Mon Sep 17 00:00:00 2001 From: Christopher Andre Marcel INSELIN <christopher-andre-marcel.inselin@ext.ec.europa.eu> Date: Thu, 12 Oct 2023 15:12:50 +0200 Subject: [PATCH] pre-monolitic test --- .../workplace/test_create_device_netbox.py | 171 +++++++++++++----- 1 file changed, 124 insertions(+), 47 deletions(-) diff --git a/tests/e2e/workplace/test_create_device_netbox.py b/tests/e2e/workplace/test_create_device_netbox.py index 0b02882..bd4db6d 100644 --- a/tests/e2e/workplace/test_create_device_netbox.py +++ b/tests/e2e/workplace/test_create_device_netbox.py @@ -10,8 +10,6 @@ PORT = os.getenv("PORT", default="8080") API_TOKEN = os.getenv("API_TOKEN", default="only4testingpurpose") HEADERS = {"Authorization": f"Token {API_TOKEN}"} -#TODO: Tester ajout des dependances au config context (site, device type) -#TODO: ajout test dependance dans le config context et des differentes valeurs class TestNetboxDeviceCreate(unittest.TestCase): """Test case for device creation, config context update ... """ @@ -43,21 +41,21 @@ class TestNetboxDeviceCreate(unittest.TestCase): #Will create a device type - manufacturer_id = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/manufacturers/", headers=HEADERS, timeout=5) - id = json.loads(manufacturer_id.content)["results"][0]["id"] + manufacturer = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/manufacturers/", headers=HEADERS, timeout=5) + manufactuer_id = json.loads(manufacturer.content)["results"][0]["id"] requests.post( url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS, json={ "model": "WS-C2960X", "slug":"ws-c2960x", - "manufacturer": id + "manufacturer": manufactuer_id }, timeout=5 ) - """ will create a site""" - response = requests.post( + # will create a site + requests.post( url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS, json={ @@ -66,15 +64,15 @@ class TestNetboxDeviceCreate(unittest.TestCase): }, timeout=5 ) - site = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS) + site = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS, timeout=5) site_id = json.loads(site.content)["results"][0]["id"] - device_type = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS) + device_type = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS, timeout=5) device_type_id = json.loads(device_type.content)["results"][0]["id"] - """ Will create a dummy config context """ + # Will create a dummy config context - response = requests.post( + requests.post( url=f"http://{HOST}:{PORT}/api/extras/config-contexts/", headers=HEADERS, json={ @@ -91,6 +89,21 @@ class TestNetboxDeviceCreate(unittest.TestCase): timeout=5 ) + # will create a custom field + + requests.post( + url=f"http://{HOST}:{PORT}/api/extras/custom-fields/", + headers=HEADERS, + json={ + "content_types": ["dcim.interface"], + "name": "access_vlan", + "type": "integer", + "validation_minimum": 1, + "validation_maximum": 4096 + }, + timeout=5 + ) + @classmethod def tearDownClass(cls) -> None: @@ -98,61 +111,76 @@ class TestNetboxDeviceCreate(unittest.TestCase): #deleting the device - device_id = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/devices/", headers=HEADERS) - id = json.loads(device_id.content)["results"][0]["id"] - response_device = requests.delete( - url= f"http://{HOST}:{PORT}/api/dcim/devices/{id}/", + device = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/devices/", headers=HEADERS, timeout=5) + id_device = json.loads(device.content)["results"][0]["id"] + requests.delete( + url= f"http://{HOST}:{PORT}/api/dcim/devices/{id_device}/", headers=HEADERS, timeout=5 ) #deleting the device type - device_type_id = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS) - id = json.loads(device_type_id.content)["results"][0]["id"] - response_device_type = requests.delete( - url= f"http://{HOST}:{PORT}/api/dcim/device-types/{id}/", + device_type = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS, timeout=5) + device_type_id = json.loads(device_type.content)["results"][0]["id"] + requests.delete( + url= f"http://{HOST}:{PORT}/api/dcim/device-types/{device_type_id}/", headers=HEADERS, timeout=5 ) #deleting the manufacturer - manufacturer_id = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/manufacturers/", headers=HEADERS) - #id = json.loads(manufacturer_id.content)["id"] - #print(json.loads(manufacturer_id.content)["results"][0]["id"]) - id = json.loads(manufacturer_id.content)["results"][0]["id"] - #print(type(json.loads(manufacturer_id.content)["results"][0]["id"])) - respose_manufacturer = requests.delete( - url= f"http://{HOST}:{PORT}/api/dcim/manufacturers/{id}/", + manufacturer = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/manufacturers/", headers=HEADERS, timeout=5) + manufacturer_id = json.loads(manufacturer.content)["results"][0]["id"] + requests.delete( + url= f"http://{HOST}:{PORT}/api/dcim/manufacturers/{manufacturer_id}/", headers=HEADERS, timeout=5 ) # deleting the device role - device_role_id = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-roles/", headers=HEADERS) - id = json.loads(device_role_id.content)["results"][0]["id"] - response_device_role = requests.delete( - url= f"http://{HOST}:{PORT}/api/dcim/device-roles/{id}/", + device_role = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-roles/", headers=HEADERS, timeout=5) + device_role_id = json.loads(device_role.content)["results"][0]["id"] + requests.delete( + url= f"http://{HOST}:{PORT}/api/dcim/device-roles/{device_role_id}/", headers=HEADERS, timeout=5 ) # deleting the site - site_id = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS) - id = json.loads(site_id.content)["results"][0]["id"] - response_site = requests.delete( - url= f"http://{HOST}:{PORT}/api/dcim/sites/{id}/", + site = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS, timeout=5) + site_id = json.loads(site.content)["results"][0]["id"] + requests.delete( + url= f"http://{HOST}:{PORT}/api/dcim/sites/{site_id}/", headers=HEADERS, timeout=5 ) # Deleting the config context - config_context_id = requests.get(url=f"http://{HOST}:{PORT}/api/extras/config-contexts/", headers=HEADERS) - id = json.loads(config_context_id.content)["results"][0]["id"] - response_config_context = requests.delete( - url= f"http://{HOST}:{PORT}/api/extras/config-contexts/{id}/", + config_context = requests.get( + url=f"http://{HOST}:{PORT}/api/extras/config-contexts/", + headers=HEADERS, + timeout=5 + ) + config_context_id = json.loads(config_context.content)["results"][0]["id"] + requests.delete( + url= f"http://{HOST}:{PORT}/api/extras/config-contexts/{config_context_id}/", + headers=HEADERS, + timeout=5 + ) + + # deleting the custom_field + + custom_field_vlan = requests.get( + url=f"http://{HOST}:{PORT}/api/extras/custom-fields/", + headers=HEADERS, + timeout=5 + ) + custom_field_vlan_id = json.loads(custom_field_vlan.content)["results"][0]["id"] + requests.delete( + url= f"http://{HOST}:{PORT}/api/extras/custom-fields/{custom_field_vlan_id}/", headers=HEADERS, timeout=5 ) @@ -162,13 +190,17 @@ class TestNetboxDeviceCreate(unittest.TestCase): def test_device_creation(self) -> None: """" getting the necessary IDs """ - device_type = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS) + device_type = requests.get( + url=f"http://{HOST}:{PORT}/api/dcim/device-types/", + headers=HEADERS, + timeout=5 + ) device_type_id = json.loads(device_type.content)["results"][0]["id"] - device_role = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-roles/", headers=HEADERS) + device_role = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-roles/", headers=HEADERS, timeout=5) device_role_id = json.loads(device_role.content)["results"][0]["id"] - site = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS) + site = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS, timeout=5) site_id = json.loads(site.content)["results"][0]["id"] # Creating the device @@ -198,23 +230,31 @@ class TestNetboxDeviceCreate(unittest.TestCase): # First we need the config context ID - config_context = requests.get(url=f"http://{HOST}:{PORT}/api/extras/config-contexts/", headers=HEADERS) + config_context = requests.get( + url=f"http://{HOST}:{PORT}/api/extras/config-contexts/", + headers=HEADERS, + timeout=5 + ) config_context_id = json.loads(config_context.content)["results"][0]["id"] - config_context_data = requests.get(url=f"http://{HOST}:{PORT}/api/extras/config-contexts/{config_context_id}/", headers=HEADERS) + config_context_data = requests.get( + url=f"http://{HOST}:{PORT}/api/extras/config-contexts/{config_context_id}/", + headers=HEADERS, + timeout=5 + ) data = json.loads(config_context_data.content)["data"] print(data) - device_type = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS) + device_type = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-types/", headers=HEADERS, timeout=5) device_type_id = json.loads(device_type.content)["results"][0]["id"] - device_role = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-roles/", headers=HEADERS) + device_role = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/device-roles/", headers=HEADERS, timeout=5) device_role_id = json.loads(device_role.content)["results"][0]["id"] - site = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS) + site = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/sites/", headers=HEADERS, timeout=5) site_id = json.loads(site.content)["results"][0]["id"] - device = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/devices/", headers=HEADERS) + device = requests.get(url=f"http://{HOST}:{PORT}/api/dcim/devices/", headers=HEADERS, timeout=5) device_id = json.loads(device.content)["results"][0]["id"] upload_config_context = requests.put( @@ -234,7 +274,44 @@ class TestNetboxDeviceCreate(unittest.TestCase): self.assertEqual(json.loads(upload_config_context.content)["local_context_data"]["radius_servers"][0],"1.1.1.1") self.assertEqual(json.loads(upload_config_context.content)["local_context_data"]["radius_servers"][1],"2.2.2.2") + def test_interface_access_creation(self) -> None: + """ Test that interface has been created """ + + device = requests.get( + url=f"http://{HOST}:{PORT}/api/dcim/devices/", + headers=HEADERS, + timeout=5 + ) + device_id = json.loads(device.content)["results"][0]["id"] + + response = requests.post( + url=f"http://{HOST}:{PORT}/api/dcim/interfaces/", + headers=HEADERS, + json={ + "device": device_id, + "vdcs": [], + "name": "GigabitEthernet2/4", + "type": "1000base-t", + "mode": "access", + "description": "test", + "duplex": "auto", + "custom_fields": { + "access_vlan": 10 + } + }, + timeout=5 + ) + + self.assertEqual(response.status_code,201) + self.assertEqual(json.loads(response.content)["device"]["id"], device_id) + self.assertEqual(json.loads(response.content)["name"], "GigabitEthernet2/4") + self.assertEqual(json.loads(response.content)["type"]["value"], "1000base-t") + self.assertEqual(json.loads(response.content)["mode"]["value"], "access") + self.assertEqual(json.loads(response.content)["description"], "test") + self.assertEqual(json.loads(response.content)["speed"], None) + self.assertEqual(json.loads(response.content)["duplex"]["value"], "auto") + self.assertEqual(json.loads(response.content)["custom_fields"]["access_vlan"], 10) if __name__ == "__main__": unittest.main() -- GitLab