Fix postgresql failures related to Data type
Postgresql is kind of sensitive about different kind of data in a query, so it was failing in cases like lookin for an ip using a filter which wasn't a valid ip or ids values greater than the id type on the table. This patch fix this behavior to fixed ips and floating ips. Fixes bug 1182754 Change-Id: I83d532c28c9aec690e8e1ffad8b58e71d619d728
This commit is contained in:
		@@ -27,8 +27,10 @@ import uuid as stdlib_uuid
 | 
			
		||||
import mox
 | 
			
		||||
from oslo.config import cfg
 | 
			
		||||
from sqlalchemy.dialects import sqlite
 | 
			
		||||
from sqlalchemy import exc
 | 
			
		||||
from sqlalchemy.exc import IntegrityError
 | 
			
		||||
from sqlalchemy import MetaData
 | 
			
		||||
from sqlalchemy.orm import query
 | 
			
		||||
from sqlalchemy.sql.expression import select
 | 
			
		||||
 | 
			
		||||
from nova.compute import vm_states
 | 
			
		||||
@@ -2782,6 +2784,13 @@ class FixedIPTestCase(BaseInstanceTypeTestCase):
 | 
			
		||||
                                      network_id=None,
 | 
			
		||||
                                      updated_at=new))
 | 
			
		||||
 | 
			
		||||
    def mock_db_query_first_to_raise_data_error_exception(self):
 | 
			
		||||
        self.mox.StubOutWithMock(query.Query, 'first')
 | 
			
		||||
        query.Query.first().AndRaise(exc.DataError(mox.IgnoreArg(),
 | 
			
		||||
                                                   mox.IgnoreArg(),
 | 
			
		||||
                                                   mox.IgnoreArg()))
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
 | 
			
		||||
    def test_fixed_ip_disassociate_all_by_timeout_single_host(self):
 | 
			
		||||
        now = timeutils.utcnow()
 | 
			
		||||
        self._timeout_test(self.ctxt, now, False)
 | 
			
		||||
@@ -3118,7 +3127,7 @@ class FixedIPTestCase(BaseInstanceTypeTestCase):
 | 
			
		||||
        self.assertRaises(exception.FixedIpNotFound,
 | 
			
		||||
                          db.fixed_ip_get, self.ctxt, 0)
 | 
			
		||||
 | 
			
		||||
    def test_fixed_ip_get_sucsess2(self):
 | 
			
		||||
    def test_fixed_ip_get_success2(self):
 | 
			
		||||
        adress = 'fixed_ip_adress'
 | 
			
		||||
        instance_uuid = self._create_instance()
 | 
			
		||||
        network_id = db.network_create_safe(self.ctxt, {})['id']
 | 
			
		||||
@@ -3139,7 +3148,7 @@ class FixedIPTestCase(BaseInstanceTypeTestCase):
 | 
			
		||||
        self.assertRaises(exception.NotAuthorized, db.fixed_ip_get,
 | 
			
		||||
                          self.ctxt, fixed_ip_id)
 | 
			
		||||
 | 
			
		||||
    def test_fixed_ip_get_sucsess(self):
 | 
			
		||||
    def test_fixed_ip_get_success(self):
 | 
			
		||||
        adress = 'fixed_ip_adress'
 | 
			
		||||
        instance_uuid = self._create_instance()
 | 
			
		||||
        network_id = db.network_create_safe(self.ctxt, {})['id']
 | 
			
		||||
@@ -3165,6 +3174,11 @@ class FixedIPTestCase(BaseInstanceTypeTestCase):
 | 
			
		||||
        self.assertRaises(exception.FixedIpNotFoundForAddress,
 | 
			
		||||
                          db.fixed_ip_get_by_address_detailed, self.ctxt, 'x')
 | 
			
		||||
 | 
			
		||||
    def test_fixed_ip_get_by_address_with_data_error_exception(self):
 | 
			
		||||
        self.mock_db_query_first_to_raise_data_error_exception()
 | 
			
		||||
        self.assertRaises(exception.FixedIpInvalid,
 | 
			
		||||
                          db.fixed_ip_get_by_address_detailed, self.ctxt, 'x')
 | 
			
		||||
 | 
			
		||||
    def test_fixed_ip_get_by_address_detailed_sucsess(self):
 | 
			
		||||
        adress = 'fixed_ip_adress_123'
 | 
			
		||||
        instance_uuid = self._create_instance()
 | 
			
		||||
@@ -3246,6 +3260,13 @@ class FloatingIpTestCase(test.TestCase, ModelsObjectComparatorMixin):
 | 
			
		||||
            'interface': 'fake_interface',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def mock_db_query_first_to_raise_data_error_exception(self):
 | 
			
		||||
        self.mox.StubOutWithMock(query.Query, 'first')
 | 
			
		||||
        query.Query.first().AndRaise(exc.DataError(mox.IgnoreArg(),
 | 
			
		||||
                                                   mox.IgnoreArg(),
 | 
			
		||||
                                                   mox.IgnoreArg()))
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
 | 
			
		||||
    def _create_floating_ip(self, values):
 | 
			
		||||
        if not values:
 | 
			
		||||
            values = {}
 | 
			
		||||
@@ -3266,6 +3287,11 @@ class FloatingIpTestCase(test.TestCase, ModelsObjectComparatorMixin):
 | 
			
		||||
        self.assertRaises(exception.FloatingIpNotFound,
 | 
			
		||||
                          db.floating_ip_get, self.ctxt, 100500)
 | 
			
		||||
 | 
			
		||||
    def test_floating_ip_get_with_long_id_not_found(self):
 | 
			
		||||
        self.mock_db_query_first_to_raise_data_error_exception()
 | 
			
		||||
        self.assertRaises(exception.InvalidID,
 | 
			
		||||
                          db.floating_ip_get, self.ctxt, 123456789101112)
 | 
			
		||||
 | 
			
		||||
    def test_floating_ip_get_pools(self):
 | 
			
		||||
        values = [
 | 
			
		||||
            {'address': '0.0.0.0', 'pool': 'abc'},
 | 
			
		||||
@@ -3571,6 +3597,12 @@ class FloatingIpTestCase(test.TestCase, ModelsObjectComparatorMixin):
 | 
			
		||||
                          db.floating_ip_get_by_address,
 | 
			
		||||
                          self.ctxt, 'non_exists_host')
 | 
			
		||||
 | 
			
		||||
    def test_floating_ip_get_by_invalid_address(self):
 | 
			
		||||
        self.mock_db_query_first_to_raise_data_error_exception()
 | 
			
		||||
        self.assertRaises(exception.InvalidIpAddressError,
 | 
			
		||||
                          db.floating_ip_get_by_address,
 | 
			
		||||
                          self.ctxt, 'non_exists_host')
 | 
			
		||||
 | 
			
		||||
    def test_floating_ip_get_by_fixed_address(self):
 | 
			
		||||
        fixed_float = [
 | 
			
		||||
            ('1.1.1.1', '2.2.2.1'),
 | 
			
		||||
@@ -4186,6 +4218,13 @@ class VirtualInterfaceTestCase(test.TestCase, ModelsObjectComparatorMixin):
 | 
			
		||||
            'uuid': str(stdlib_uuid.uuid4())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    def mock_db_query_first_to_raise_data_error_exception(self):
 | 
			
		||||
        self.mox.StubOutWithMock(query.Query, 'first')
 | 
			
		||||
        query.Query.first().AndRaise(exc.DataError(mox.IgnoreArg(),
 | 
			
		||||
                                                   mox.IgnoreArg(),
 | 
			
		||||
                                                   mox.IgnoreArg()))
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
 | 
			
		||||
    def _create_virt_interface(self, values):
 | 
			
		||||
        v = self._get_base_values()
 | 
			
		||||
        v.update(values)
 | 
			
		||||
@@ -4222,6 +4261,17 @@ class VirtualInterfaceTestCase(test.TestCase, ModelsObjectComparatorMixin):
 | 
			
		||||
                                                           vif['address'])
 | 
			
		||||
            self._assertEqualObjects(vif, real_vif)
 | 
			
		||||
 | 
			
		||||
    def test_virtual_interface_get_by_address_not_found(self):
 | 
			
		||||
        self.assertIsNone(db.virtual_interface_get_by_address(self.ctxt,
 | 
			
		||||
                          "i.nv.ali.ip"))
 | 
			
		||||
 | 
			
		||||
    def test_virtual_interface_get_by_address_data_error_exception(self):
 | 
			
		||||
        self.mock_db_query_first_to_raise_data_error_exception()
 | 
			
		||||
        self.assertRaises(exception.InvalidIpAddressError,
 | 
			
		||||
                          db.virtual_interface_get_by_address,
 | 
			
		||||
                          self.ctxt,
 | 
			
		||||
                          "i.nv.ali.ip")
 | 
			
		||||
 | 
			
		||||
    def test_virtual_interface_get_by_uuid(self):
 | 
			
		||||
        vifs = [self._create_virt_interface({}),
 | 
			
		||||
                self._create_virt_interface({})]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user