예제 #1
0
    def setUp(self):

        # logging
        self.logger = logging.getLogger(self.__class__.__name__)

        # NIPAP
        self.cfg = NipapConfig('/etc/nipap/nipap.conf')
        self.nipap = Nipap()

        # create dummy auth object
        # As the authentication is performed before the query hits the Nipap
        # class, it does not matter what user we use here
        self.auth = SqliteAuth('local', 'unittest', 'unittest', 'unittest')
        self.auth.authenticated_as = 'unittest'
        self.auth.full_name = 'Unit test'

        # have to delete hosts before we can delete the rest
        self.nipap._execute(
            "DELETE FROM ip_net_plan WHERE masklen(prefix) = 32")
        # the rest
        self.nipap._execute("DELETE FROM ip_net_plan")
        # delete all except for the default VRF with id 0
        self.nipap._execute("DELETE FROM ip_net_vrf WHERE id > 0")
        # set default info for VRF 0
        self.nipap._execute(
            "UPDATE ip_net_vrf SET name = 'default', description = 'The default VRF, typically the Internet.' WHERE id = 0"
        )
        self.nipap._execute("DELETE FROM ip_net_pool")
        self.nipap._execute("DELETE FROM ip_net_asn")
예제 #2
0
파일: nipap-ro.py 프로젝트: scoffers/NIPAPP
    def clear_database(cls):
        cfg = NipapConfig('/etc/nipap/nipap.conf')
        n = Nipap()

        # have to delete hosts before we can delete the rest
        n._execute("DELETE FROM ip_net_plan WHERE masklen(prefix) = 32")
        # the rest
        n._execute("DELETE FROM ip_net_plan")
        # delete all except for the default VRF with id 0
        n._execute("DELETE FROM ip_net_vrf WHERE id > 0")
        # set default info for VRF 0
        n._execute("UPDATE ip_net_vrf SET name = 'default', description = 'The default VRF, typically the Internet.' WHERE id = 0")
        n._execute("DELETE FROM ip_net_pool")
        n._execute("DELETE FROM ip_net_asn")
예제 #3
0
class NipapSql(unittest.TestCase):
    nipap = Nipap()

    def clean_up(self):
        self.nipap._execute("TRUNCATE ip_net_plan CASCADE")
        self.nipap._execute("TRUNCATE ip_net_pool CASCADE")
        self.nipap._execute("TRUNCATE ip_net_schema CASCADE")



    def setUp(self):
        self.clean_up()
        self.schema_id = self.nipap.add_schema({ 'name': 'test-schema', 'description': '' })



    def test_calc_indent(self):
        """ Test automatic calculation of indent level

            Insert baseline data, namely 192.0.2.0/24
            Verify indent level is 0, since it should be a root prefix
            Insert 192.0.2.0/27
            Verify indent level is 1 for 192.0.2.0/27
            Insert 192.0.2.0/32
            Insert 192.0.2.1/32
            Insert 192.0.2.2/32
            Insert 192.0.2.3/32
            Verify indent level is 2 for 192.0.2.[0-3]/32
            Insert 192.0.2.32/32
            Insert 192.0.2.33/32
            Insert 192.0.2.34/32
            Insert 192.0.2.35/32
            Verify indent level is 1 for 192.0.2.3[2-5]/32
            Insert 192.0.2.32/27
            Verify indent level is 1 for 192.0.2.32/27
            Verify indent level is 2 for 192.0.2.3[2-5]/32
            Remove 192.0.2.0/27
            Verify indent level is 1 for 192.0.2.[0-3]/32
        """

    def test_db_constraints(self):
        """

            INSERT 1.3.0.0/16    r    allow
            INSERT 1.3.0.0/16    r    deny    duplicate
            INSERT 1.3.3.0/24    r    allow
            INSERT 1.3.3.0/27    a    allow
            INSERT 1.3.3.0/32    h    allow
            INSERT 1.3.3.1/32    h    allow
            INSERT 1.3.3.2/32    a    deny    assignment within assignment not allowed
            DELETE 1.3.3.0/27    a    deny    hosts inside assignment
        """
        self.assertEqual(self._inspre('1.3.0.0/16', 'reservation'), True, 'Unable to insert prefix 1.3.0.0/16')
        self.assertRaises(NipapDuplicateError, self._inspre, '1.3.0.0/16', 'reservation') # Duplicate prefix detection not working
        self.assertEqual(self._inspre('1.3.3.0/24', 'reservation'), True)
        self.assertEqual(self._inspre('1.3.3.0/27', 'assignment'), True)
        self.assertEqual(self._inspre('1.3.3.0/32', 'host'), True)
        self.assertEqual(self._inspre('1.3.3.1/32', 'host'), True)
        self.assertRaises(NipapValueError, self._inspre, '1.3.3.2/31', 'host')    # do not allow /31 as type 'host'
        self.assertRaises(NipapValueError, self._inspre, '1.3.3.3/32', 'assignment') # Able to create assignment within assignment - we should not
        self.assertRaises(NipapValueError, self._delpre, '1.3.3.0/27') # Able to delete assignment containing hosts - we should not
        self.assertRaises(NipapValueError, self._updpre, '1.3.3.0/24', 'assignment')



    def _inspre(self, prefix, prefix_type):
        """ Insert a prefix

            Return true on success, exception otherwise
        """
        self.nipap._execute("INSERT INTO ip_net_plan (authoritative_source, schema, prefix, type) VALUES ('nipaptest', %(schema)s, %(prefix)s, %(prefix_type)s)", { 'schema': self.schema_id, 'prefix': prefix, 'prefix_type': prefix_type })
        return True



    def _updpre(self, prefix, prefix_type):
        """ Update a prefix

            Return true on success, exception otherwise
        """
        self.nipap._execute("UPDATE ip_net_plan SET type=%(prefix_type)s WHERE schema = %(schema)s AND prefix = %(prefix)s", { 'schema': self.schema_id, 'prefix': prefix, 'prefix_type': prefix_type })
        return True



    def _delpre(self, prefix):
        """ Delete a prefix

            Return true on success, exception otherwise
        """
        self.nipap._execute("DELETE FROM ip_net_plan WHERE schema = %(schema)s AND prefix = %(prefix)s", { 'schema': self.schema_id, 'prefix': prefix })
        return True
예제 #4
0
    def setUp(self):
        """ Better start from a clean slate!
        """

        cfg = NipapConfig('/etc/nipap/nipap.conf')
        self.nipap = Nipap()

        # create dummy auth object
        # As the authentication is performed before the query hits the Nipap
        # class, it does not matter what user we use here
        self.auth = SqliteAuth('local', 'unittest', 'unittest', 'unittest')
        self.auth.authenticated_as = 'unittest'
        self.auth.full_name = 'Unit test'

        self.nipap._execute(
            "TRUNCATE ip_net_plan, ip_net_pool, ip_net_vrf, ip_net_log, ip_net_asn"
        )

        self.schema_attrs = {
            'name': 'test-schema1',
            'description': 'Test schema numero uno!'
        }
        self.schema_attrs['id'] = self.nipap.add_schema(
            self.auth, self.schema_attrs)
        self.schema_attrs2 = {
            'name': 'test-schema2',
            'description': 'Test schema numero dos!'
        }
        self.schema_attrs2['id'] = self.nipap.add_schema(
            self.auth, self.schema_attrs2)
        self.pool_attrs = {
            'name': 'test-pool1',
            'description': 'Test pool numero uno!',
            'default_type': 'assignment',
            'ipv4_default_prefix_length': 30,
            'ipv6_default_prefix_length': 112
        }
        self.pool_attrs['id'] = self.nipap.add_pool(
            self.auth, {'id': self.schema_attrs['id']}, self.pool_attrs)
        self.prefix_attrs1 = {
            'authoritative_source': 'nipaptest',
            'prefix': '1.3.3.0/24',
            'type': 'assignment',
            'description': ''
        }
        self.prefix_attrs1['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix_attrs1)
        self.prefix_attrs = {
            'authoritative_source': 'nipaptest',
            'prefix': '1.3.3.1/32',
            'type': 'host',
            'description': 'Test prefix numero uno!'
        }
        self.prefix_attrs['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix_attrs)
        self.prefix_attrs2 = {
            'authoritative_source': 'nipaptest',
            'prefix': '1.3.2.0/23',
            'type': 'reservation',
            'description': ''
        }
        self.prefix_attrs2['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix_attrs2)
        self.prefix_attrs3 = {
            'authoritative_source': 'nipaptest',
            'prefix': '1.3.0.0/16',
            'type': 'reservation',
            'description': ''
        }
        self.prefix_attrs3['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix_attrs3)
        self.prefix_attrs4 = {
            'authoritative_source': 'nipaptest',
            'prefix': '1.3.0.0/17',
            'type': 'reservation',
            'description': ''
        }
        self.prefix_attrs4['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs2['id']}, self.prefix_attrs4)

        self.prefix6_attrs1 = {
            'authoritative_source': 'nipaptest',
            'prefix': '2001:0db8:3:3::/112',
            'type': 'assignment',
            'description': ''
        }
        self.prefix6_attrs1['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix6_attrs1)
        self.prefix6_attrs = {
            'authoritative_source': 'nipaptest',
            'prefix': '2001:0db8:3:3::1/128',
            'type': 'host',
            'description': 'Test prefix numero uno!'
        }
        self.prefix6_attrs['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix6_attrs)
        self.prefix6_attrs2 = {
            'authoritative_source': 'nipaptest',
            'prefix': '2001:0db8:3:3::/64',
            'type': 'reservation',
            'description': ''
        }
        self.prefix6_attrs2['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix6_attrs2)
        self.prefix6_attrs3 = {
            'authoritative_source': 'nipaptest',
            'prefix': '2001:0db8:3:0::/48',
            'type': 'reservation',
            'description': ''
        }
        self.prefix6_attrs3['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs['id']}, self.prefix6_attrs3)
        self.prefix6_attrs4 = {
            'authoritative_source': 'nipaptest',
            'prefix': '2001:0db8:3:0::/56',
            'type': 'reservation',
            'description': ''
        }
        self.prefix6_attrs4['id'] = self.nipap.add_prefix(
            self.auth, {'id': self.schema_attrs2['id']}, self.prefix6_attrs4)