diff --git a/conntrackt/tests/test_models.py b/conntrackt/tests/test_models.py --- a/conntrackt/tests/test_models.py +++ b/conntrackt/tests/test_models.py @@ -0,0 +1,70 @@ +# Django imports. +from django.core.exceptions import ValidationError +from django.db import IntegrityError +from django.test import TestCase + +# Application imports. +from conntrackt.models import Project, Location, Entity, Interface, Communication + + +class EntityTest(TestCase): + fixtures = ['test-data.json'] + + def test_incoming_communications(self): + """ + Test that we get correct list of incoming connections with the sample + data. + """ + + entity = Entity.objects.get(name="Test Entity 1") + incoming = Communication.objects.filter(pk__in=(1, 2, 3, 5)) + + self.assertItemsEqual(entity.incoming_communications(), incoming) + + def test_outgoing_communications(self): + """ + Test that we get correct list of outgoing connections with the sample + data. + """ + + entity = Entity.objects.get(name="Test Entity 1") + outgoing = Communication.objects.filter(pk__in=(4, 6)) + + self.assertItemsEqual(entity.outgoing_communications(), outgoing) + + def test_unique_communication(self): + """ + Test enforcement of unique communications. + """ + + comm = Communication.objects.get(pk=1) + + self.assertRaises(IntegrityError, Communication.objects.create, source=comm.source, destination=comm.destination, protocol=comm.protocol, port=comm.port, description="Duplicate communication.") + + def test_project_same(self): + """ + Test enforcement of same project entities for communications. + """ + + ent1 = Entity.objects.get(name="Test Entity 1") + ent1_eth0 = ent1.interface_set.get(name="eth0") + ent2 = Entity.objects.get(name="Other Project Test Entity") + ent2_eth0 = ent2.interface_set.get(name="eth0") + + # Set-up a communication between different projects. + comm = Communication.objects.create(source=ent1_eth0, destination=ent2_eth0, protocol="ICMP", port="8", description="Ping.") + + self.assertRaises(ValidationError, comm.full_clean) + + def test_unsupported_protocol(self): + """ + Test enforcement of supported protocol. + """ + + ent1 = Entity.objects.get(name="Test Entity 1") + ent1_eth0 = ent1.interface_set.get(name="eth0") + ent2 = Entity.objects.get(name="Test Entity 2") + ent2_eth0 = ent1.interface_set.get(name="eth0") + + comm = Communication(source=ent1_eth0, destination=ent2_eth0, protocol="BOGUS", port="1234") + self.assertRaises(ValidationError, comm.full_clean)