File diff 109d23889f37 → 30e997a9d6c9
conntrackt/tests/test_models.py
Show inline comments
 
# 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)