Fixes RM2442 VIF ordering
Ports should now be ordered by created_at.
This commit is contained in:
@@ -21,7 +21,7 @@ from neutron.openstack.common import timeutils
|
||||
from neutron.openstack.common import uuidutils
|
||||
from sqlalchemy import event
|
||||
from sqlalchemy import func as sql_func
|
||||
from sqlalchemy import and_, orm, or_
|
||||
from sqlalchemy import and_, asc, orm, or_
|
||||
|
||||
from quark.db import models
|
||||
from quark import network_strategy
|
||||
@@ -159,8 +159,8 @@ def scoped(f):
|
||||
def port_find(context, **filters):
|
||||
query = context.session.query(models.Port).\
|
||||
options(orm.joinedload(models.Port.ip_addresses))
|
||||
model_filters = _model_query(context, models.Port, filters)
|
||||
|
||||
model_filters = _model_query(context, models.Port, filters)
|
||||
if filters.get("ip_address_id"):
|
||||
model_filters.append(models.Port.ip_addresses.any(
|
||||
models.IPAddress.id.in_(filters["ip_address_id"])))
|
||||
@@ -168,7 +168,7 @@ def port_find(context, **filters):
|
||||
if filters.get("device_id"):
|
||||
model_filters.append(models.Port.device_id.in_(filters["device_id"]))
|
||||
|
||||
return query.filter(*model_filters)
|
||||
return query.filter(*model_filters).order_by(asc(models.Port.created_at))
|
||||
|
||||
|
||||
def port_count_all(context, **filters):
|
||||
|
||||
57
quark/tests/functional/test_ports.py
Normal file
57
quark/tests/functional/test_ports.py
Normal file
@@ -0,0 +1,57 @@
|
||||
# Copyright 2013 Openstack Foundation
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for# the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from neutron import context
|
||||
from neutron.db import api as neutron_db_api
|
||||
from neutron.openstack.common.db.sqlalchemy import session as neutron_session
|
||||
from oslo.config import cfg
|
||||
import unittest2
|
||||
|
||||
from quark.db import api as db_api
|
||||
from quark.db import models
|
||||
|
||||
|
||||
class QuarkNetworkFunctionalTest(unittest2.TestCase):
|
||||
def setUp(self):
|
||||
self.context = context.Context('fake', 'fake', is_admin=False)
|
||||
super(QuarkNetworkFunctionalTest, self).setUp()
|
||||
|
||||
cfg.CONF.set_override('connection', 'sqlite://', 'database')
|
||||
neutron_db_api.configure_db()
|
||||
models.BASEV2.metadata.create_all(neutron_session._ENGINE)
|
||||
|
||||
def tearDown(self):
|
||||
neutron_db_api.clear_db()
|
||||
|
||||
|
||||
class QuarkFindPortsSorted(QuarkNetworkFunctionalTest):
|
||||
def test_ports_sorted_by_created_at(self):
|
||||
# create a network
|
||||
network = dict(name="public", tenant_id="fake", network_plugin="BASE")
|
||||
net_mod = db_api.network_create(self.context, **network)
|
||||
# create ports
|
||||
port1 = dict(network_id=net_mod["id"], backend_key="1", device_id="1")
|
||||
port2 = dict(network_id=net_mod["id"], backend_key="1", device_id="1")
|
||||
port3 = dict(network_id=net_mod["id"], backend_key="1", device_id="1")
|
||||
port_mod1 = db_api.port_create(self.context, **port1)
|
||||
port_mod2 = db_api.port_create(self.context, **port2)
|
||||
port_mod3 = db_api.port_create(self.context, **port3)
|
||||
res = db_api.port_find(self.context, scope=db_api.ALL)
|
||||
self.assertTrue(res[0]["created_at"] < res[1]["created_at"] <
|
||||
res[2]['created_at'])
|
||||
db_api.network_delete(self.context, net_mod)
|
||||
db_api.port_delete(self.context, port_mod1)
|
||||
db_api.port_delete(self.context, port_mod2)
|
||||
db_api.port_delete(self.context, port_mod3)
|
||||
Reference in New Issue
Block a user