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")
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")
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
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)