Merge "Add timestamp to octavia resources"
This commit is contained in:
commit
1939931504
|
@ -45,6 +45,8 @@ class ListenerResponse(base.BaseType):
|
||||||
default_pool = wtypes.wsattr(pool.PoolResponse)
|
default_pool = wtypes.wsattr(pool.PoolResponse)
|
||||||
l7policies = wtypes.wsattr([l7policy.L7PolicyResponse])
|
l7policies = wtypes.wsattr([l7policy.L7PolicyResponse])
|
||||||
insert_headers = wtypes.wsattr(wtypes.DictType(str, str))
|
insert_headers = wtypes.wsattr(wtypes.DictType(str, str))
|
||||||
|
created_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
updated_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_data_model(cls, data_model, children=False):
|
def from_data_model(cls, data_model, children=False):
|
||||||
|
|
|
@ -36,6 +36,8 @@ class LoadBalancerResponse(base.BaseType):
|
||||||
vip = wtypes.wsattr(VIP)
|
vip = wtypes.wsattr(VIP)
|
||||||
project_id = wtypes.wsattr(wtypes.StringType())
|
project_id = wtypes.wsattr(wtypes.StringType())
|
||||||
listeners = wtypes.wsattr([listener.ListenerResponse])
|
listeners = wtypes.wsattr([listener.ListenerResponse])
|
||||||
|
created_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
updated_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_data_model(cls, data_model, children=False):
|
def from_data_model(cls, data_model, children=False):
|
||||||
|
|
|
@ -27,6 +27,8 @@ class MemberResponse(base.BaseType):
|
||||||
weight = wtypes.wsattr(wtypes.IntegerType())
|
weight = wtypes.wsattr(wtypes.IntegerType())
|
||||||
subnet_id = wtypes.wsattr(wtypes.UuidType())
|
subnet_id = wtypes.wsattr(wtypes.UuidType())
|
||||||
project_id = wtypes.wsattr(wtypes.StringType())
|
project_id = wtypes.wsattr(wtypes.StringType())
|
||||||
|
created_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
updated_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
|
||||||
|
|
||||||
class MemberPOST(base.BaseType):
|
class MemberPOST(base.BaseType):
|
||||||
|
|
|
@ -52,6 +52,8 @@ class PoolResponse(base.BaseType):
|
||||||
project_id = wtypes.wsattr(wtypes.StringType())
|
project_id = wtypes.wsattr(wtypes.StringType())
|
||||||
health_monitor = wtypes.wsattr(health_monitor.HealthMonitorResponse)
|
health_monitor = wtypes.wsattr(health_monitor.HealthMonitorResponse)
|
||||||
members = wtypes.wsattr([member.MemberResponse])
|
members = wtypes.wsattr([member.MemberResponse])
|
||||||
|
created_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
updated_at = wtypes.wsattr(wtypes.StringType())
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_data_model(cls, data_model, children=False):
|
def from_data_model(cls, data_model, children=False):
|
||||||
|
|
|
@ -172,12 +172,12 @@ class HealthMonitor(BaseDataModel):
|
||||||
|
|
||||||
|
|
||||||
class Pool(BaseDataModel):
|
class Pool(BaseDataModel):
|
||||||
|
|
||||||
def __init__(self, id=None, project_id=None, name=None, description=None,
|
def __init__(self, id=None, project_id=None, name=None, description=None,
|
||||||
protocol=None, lb_algorithm=None, enabled=None,
|
protocol=None, lb_algorithm=None, enabled=None,
|
||||||
operating_status=None, members=None, health_monitor=None,
|
operating_status=None, members=None, health_monitor=None,
|
||||||
session_persistence=None, load_balancer_id=None,
|
session_persistence=None, load_balancer_id=None,
|
||||||
load_balancer=None, listeners=None, l7policies=None):
|
load_balancer=None, listeners=None, l7policies=None,
|
||||||
|
created_at=None, updated_at=None):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.project_id = project_id
|
self.project_id = project_id
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -193,6 +193,8 @@ class Pool(BaseDataModel):
|
||||||
self.session_persistence = session_persistence
|
self.session_persistence = session_persistence
|
||||||
self.listeners = listeners or []
|
self.listeners = listeners or []
|
||||||
self.l7policies = l7policies or []
|
self.l7policies = l7policies or []
|
||||||
|
self.created_at = created_at
|
||||||
|
self.updated_at = updated_at
|
||||||
|
|
||||||
def update(self, update_dict):
|
def update(self, update_dict):
|
||||||
for key, value in update_dict.items():
|
for key, value in update_dict.items():
|
||||||
|
@ -236,7 +238,8 @@ class Member(BaseDataModel):
|
||||||
|
|
||||||
def __init__(self, id=None, project_id=None, pool_id=None, ip_address=None,
|
def __init__(self, id=None, project_id=None, pool_id=None, ip_address=None,
|
||||||
protocol_port=None, weight=None, enabled=None,
|
protocol_port=None, weight=None, enabled=None,
|
||||||
subnet_id=None, operating_status=None, pool=None):
|
subnet_id=None, operating_status=None, pool=None,
|
||||||
|
created_at=None, updated_at=None):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.project_id = project_id
|
self.project_id = project_id
|
||||||
self.pool_id = pool_id
|
self.pool_id = pool_id
|
||||||
|
@ -247,6 +250,8 @@ class Member(BaseDataModel):
|
||||||
self.subnet_id = subnet_id
|
self.subnet_id = subnet_id
|
||||||
self.operating_status = operating_status
|
self.operating_status = operating_status
|
||||||
self.pool = pool
|
self.pool = pool
|
||||||
|
self.created_at = created_at
|
||||||
|
self.updated_at = updated_at
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
for mem in self.pool.members:
|
for mem in self.pool.members:
|
||||||
|
@ -263,7 +268,8 @@ class Listener(BaseDataModel):
|
||||||
enabled=None, provisioning_status=None, operating_status=None,
|
enabled=None, provisioning_status=None, operating_status=None,
|
||||||
tls_certificate_id=None, stats=None, default_pool=None,
|
tls_certificate_id=None, stats=None, default_pool=None,
|
||||||
load_balancer=None, sni_containers=None, peer_port=None,
|
load_balancer=None, sni_containers=None, peer_port=None,
|
||||||
l7policies=None, pools=None, insert_headers=None):
|
l7policies=None, pools=None, insert_headers=None,
|
||||||
|
created_at=None, updated_at=None):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.project_id = project_id
|
self.project_id = project_id
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -285,6 +291,8 @@ class Listener(BaseDataModel):
|
||||||
self.l7policies = l7policies or []
|
self.l7policies = l7policies or []
|
||||||
self.insert_headers = insert_headers or {}
|
self.insert_headers = insert_headers or {}
|
||||||
self.pools = pools or []
|
self.pools = pools or []
|
||||||
|
self.created_at = created_at
|
||||||
|
self.updated_at = updated_at
|
||||||
|
|
||||||
def update(self, update_dict):
|
def update(self, update_dict):
|
||||||
for key, value in update_dict.items():
|
for key, value in update_dict.items():
|
||||||
|
@ -322,7 +330,8 @@ class LoadBalancer(BaseDataModel):
|
||||||
def __init__(self, id=None, project_id=None, name=None, description=None,
|
def __init__(self, id=None, project_id=None, name=None, description=None,
|
||||||
provisioning_status=None, operating_status=None, enabled=None,
|
provisioning_status=None, operating_status=None, enabled=None,
|
||||||
topology=None, vip=None, listeners=None, amphorae=None,
|
topology=None, vip=None, listeners=None, amphorae=None,
|
||||||
pools=None, vrrp_group=None, server_group_id=None):
|
pools=None, vrrp_group=None, server_group_id=None,
|
||||||
|
created_at=None, updated_at=None):
|
||||||
|
|
||||||
self.id = id
|
self.id = id
|
||||||
self.project_id = project_id
|
self.project_id = project_id
|
||||||
|
@ -338,6 +347,8 @@ class LoadBalancer(BaseDataModel):
|
||||||
self.amphorae = amphorae or []
|
self.amphorae = amphorae or []
|
||||||
self.pools = pools or []
|
self.pools = pools or []
|
||||||
self.server_group_id = server_group_id
|
self.server_group_id = server_group_id
|
||||||
|
self.created_at = created_at
|
||||||
|
self.updated_at = updated_at
|
||||||
|
|
||||||
|
|
||||||
class VRRPGroup(BaseDataModel):
|
class VRRPGroup(BaseDataModel):
|
||||||
|
|
|
@ -14,11 +14,18 @@
|
||||||
|
|
||||||
from oslo_db.sqlalchemy import models
|
from oslo_db.sqlalchemy import models
|
||||||
from oslo_utils import uuidutils
|
from oslo_utils import uuidutils
|
||||||
|
import six
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy.ext import declarative
|
from sqlalchemy.ext import declarative
|
||||||
from sqlalchemy.orm import collections
|
from sqlalchemy.orm import collections
|
||||||
|
|
||||||
|
|
||||||
|
def datetime_to_str(dct, attr_name):
|
||||||
|
if (dct.get(attr_name) is not None
|
||||||
|
and not isinstance(dct.get(attr_name), six.string_types)):
|
||||||
|
dct[attr_name] = dct[attr_name].isoformat(' ')
|
||||||
|
|
||||||
|
|
||||||
class OctaviaBase(models.ModelBase):
|
class OctaviaBase(models.ModelBase):
|
||||||
|
|
||||||
__data_model__ = None
|
__data_model__ = None
|
||||||
|
@ -64,6 +71,9 @@ class OctaviaBase(models.ModelBase):
|
||||||
dm_kwargs = {}
|
dm_kwargs = {}
|
||||||
for column in self.__table__.columns:
|
for column in self.__table__.columns:
|
||||||
dm_kwargs[column.name] = getattr(self, column.name)
|
dm_kwargs[column.name] = getattr(self, column.name)
|
||||||
|
datetime_to_str(dm_kwargs, 'created_at')
|
||||||
|
datetime_to_str(dm_kwargs, 'updated_at')
|
||||||
|
|
||||||
attr_names = [attr_name for attr_name in dir(self)
|
attr_names = [attr_name for attr_name in dir(self)
|
||||||
if not attr_name.startswith('_')]
|
if not attr_name.startswith('_')]
|
||||||
# Appending early, as any unique ID should be defined already and
|
# Appending early, as any unique ID should be defined already and
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
# Copyright 2016 Catalyst IT
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
"""add timestamp
|
||||||
|
|
||||||
|
Revision ID: 36b94648fef8
|
||||||
|
Revises: 4d9cf7d32f2
|
||||||
|
Create Date: 2016-04-21 10:45:32.278433
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '36b94648fef8'
|
||||||
|
down_revision = '4d9cf7d32f2'
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
tables = ['member', 'pool', 'load_balancer', 'listener']
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
for table in tables:
|
||||||
|
op.add_column(
|
||||||
|
table,
|
||||||
|
sa.Column(u'created_at', sa.DateTime(), nullable=True)
|
||||||
|
)
|
||||||
|
op.add_column(
|
||||||
|
table,
|
||||||
|
sa.Column(u'updated_at', sa.DateTime(), nullable=True)
|
||||||
|
)
|
|
@ -13,7 +13,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from oslo_db.sqlalchemy import models
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from sqlalchemy.ext import orderinglist
|
from sqlalchemy.ext import orderinglist
|
||||||
from sqlalchemy import orm
|
from sqlalchemy import orm
|
||||||
|
@ -152,7 +152,8 @@ class ListenerStatistics(base_models.BASE):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
class Member(base_models.BASE, base_models.IdMixin, base_models.ProjectMixin):
|
class Member(base_models.BASE, base_models.IdMixin, base_models.ProjectMixin,
|
||||||
|
models.TimestampMixin):
|
||||||
|
|
||||||
__data_model__ = data_models.Member
|
__data_model__ = data_models.Member
|
||||||
|
|
||||||
|
@ -210,7 +211,8 @@ class HealthMonitor(base_models.BASE, base_models.ProjectMixin):
|
||||||
cascade="delete"))
|
cascade="delete"))
|
||||||
|
|
||||||
|
|
||||||
class Pool(base_models.BASE, base_models.IdMixin, base_models.ProjectMixin):
|
class Pool(base_models.BASE, base_models.IdMixin, base_models.ProjectMixin,
|
||||||
|
models.TimestampMixin):
|
||||||
|
|
||||||
__data_model__ = data_models.Pool
|
__data_model__ = data_models.Pool
|
||||||
|
|
||||||
|
@ -260,7 +262,7 @@ class Pool(base_models.BASE, base_models.IdMixin, base_models.ProjectMixin):
|
||||||
|
|
||||||
|
|
||||||
class LoadBalancer(base_models.BASE, base_models.IdMixin,
|
class LoadBalancer(base_models.BASE, base_models.IdMixin,
|
||||||
base_models.ProjectMixin):
|
base_models.ProjectMixin, models.TimestampMixin):
|
||||||
|
|
||||||
__data_model__ = data_models.LoadBalancer
|
__data_model__ = data_models.LoadBalancer
|
||||||
|
|
||||||
|
@ -333,7 +335,7 @@ class Vip(base_models.BASE):
|
||||||
|
|
||||||
|
|
||||||
class Listener(base_models.BASE, base_models.IdMixin,
|
class Listener(base_models.BASE, base_models.IdMixin,
|
||||||
base_models.ProjectMixin):
|
base_models.ProjectMixin, models.TimestampMixin):
|
||||||
|
|
||||||
__data_model__ = data_models.Listener
|
__data_model__ = data_models.Listener
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,12 @@ class TestListener(base.BaseAPITest):
|
||||||
listener2['operating_status'] = constants.ONLINE
|
listener2['operating_status'] = constants.ONLINE
|
||||||
listener3['provisioning_status'] = constants.ACTIVE
|
listener3['provisioning_status'] = constants.ACTIVE
|
||||||
listener3['operating_status'] = constants.ONLINE
|
listener3['operating_status'] = constants.ONLINE
|
||||||
|
for listener in api_listeners:
|
||||||
|
del listener['updated_at']
|
||||||
|
|
||||||
|
self.assertIsNone(listener1.pop('updated_at'))
|
||||||
|
self.assertIsNone(listener2.pop('updated_at'))
|
||||||
|
self.assertIsNone(listener3.pop('updated_at'))
|
||||||
self.assertIn(listener1, api_listeners)
|
self.assertIn(listener1, api_listeners)
|
||||||
self.assertIn(listener2, api_listeners)
|
self.assertIn(listener2, api_listeners)
|
||||||
self.assertIn(listener3, api_listeners)
|
self.assertIn(listener3, api_listeners)
|
||||||
|
@ -105,6 +111,8 @@ class TestListener(base.BaseAPITest):
|
||||||
self.assertEqual(2, len(sni_resp))
|
self.assertEqual(2, len(sni_resp))
|
||||||
for sni in sni_resp:
|
for sni in sni_resp:
|
||||||
self.assertIn(sni, sni_ex)
|
self.assertIn(sni, sni_ex)
|
||||||
|
self.assertIsNotNone(listener_api.pop('created_at'))
|
||||||
|
self.assertIsNone(listener_api.pop('updated_at'))
|
||||||
self.assertEqual(lb_listener, listener_api)
|
self.assertEqual(lb_listener, listener_api)
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.PENDING_UPDATE,
|
constants.PENDING_UPDATE,
|
||||||
|
@ -182,6 +190,8 @@ class TestListener(base.BaseAPITest):
|
||||||
lb_listener.update(defaults)
|
lb_listener.update(defaults)
|
||||||
self.assertTrue(uuidutils.is_uuid_like(listener_api.get('id')))
|
self.assertTrue(uuidutils.is_uuid_like(listener_api.get('id')))
|
||||||
lb_listener['id'] = listener_api.get('id')
|
lb_listener['id'] = listener_api.get('id')
|
||||||
|
self.assertIsNotNone(listener_api.pop('created_at'))
|
||||||
|
self.assertIsNone(listener_api.pop('updated_at'))
|
||||||
self.assertEqual(lb_listener, listener_api)
|
self.assertEqual(lb_listener, listener_api)
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.PENDING_UPDATE,
|
constants.PENDING_UPDATE,
|
||||||
|
@ -209,6 +219,10 @@ class TestListener(base.BaseAPITest):
|
||||||
'provisioning_status': constants.PENDING_UPDATE,
|
'provisioning_status': constants.PENDING_UPDATE,
|
||||||
'operating_status': constants.ONLINE}
|
'operating_status': constants.ONLINE}
|
||||||
listener.update(update_expect)
|
listener.update(update_expect)
|
||||||
|
self.assertEqual(listener.pop('created_at'),
|
||||||
|
api_listener.pop('created_at'))
|
||||||
|
self.assertNotEqual(listener.pop('updated_at'),
|
||||||
|
api_listener.pop('updated_at'))
|
||||||
self.assertNotEqual(listener, api_listener)
|
self.assertNotEqual(listener, api_listener)
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.PENDING_UPDATE,
|
constants.PENDING_UPDATE,
|
||||||
|
@ -277,6 +291,9 @@ class TestListener(base.BaseAPITest):
|
||||||
'provisioning_status': constants.PENDING_DELETE,
|
'provisioning_status': constants.PENDING_DELETE,
|
||||||
'connection_limit': None}
|
'connection_limit': None}
|
||||||
listener.update(expected)
|
listener.update(expected)
|
||||||
|
|
||||||
|
self.assertIsNone(listener.pop('updated_at'))
|
||||||
|
self.assertIsNotNone(api_listener.pop('updated_at'))
|
||||||
self.assertEqual(listener, api_listener)
|
self.assertEqual(listener, api_listener)
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.PENDING_UPDATE,
|
constants.PENDING_UPDATE,
|
||||||
|
|
|
@ -41,6 +41,8 @@ class TestLoadBalancer(base.BaseAPITest):
|
||||||
self.assertEqual(constants.OFFLINE,
|
self.assertEqual(constants.OFFLINE,
|
||||||
api_lb.get('operating_status'))
|
api_lb.get('operating_status'))
|
||||||
self.assertTrue(api_lb.get('enabled'))
|
self.assertTrue(api_lb.get('enabled'))
|
||||||
|
self.assertIsNotNone(api_lb.get('created_at'))
|
||||||
|
self.assertIsNone(api_lb.get('updated_at'))
|
||||||
for key, value in optionals.items():
|
for key, value in optionals.items():
|
||||||
self.assertEqual(value, lb_json.get(key))
|
self.assertEqual(value, lb_json.get(key))
|
||||||
self.assert_final_lb_statuses(api_lb.get('id'))
|
self.assert_final_lb_statuses(api_lb.get('id'))
|
||||||
|
@ -156,6 +158,8 @@ class TestLoadBalancer(base.BaseAPITest):
|
||||||
api_lb.get('provisioning_status'))
|
api_lb.get('provisioning_status'))
|
||||||
self.assertEqual(lb.get('operational_status'),
|
self.assertEqual(lb.get('operational_status'),
|
||||||
api_lb.get('operational_status'))
|
api_lb.get('operational_status'))
|
||||||
|
self.assertIsNotNone(api_lb.get('created_at'))
|
||||||
|
self.assertIsNotNone(api_lb.get('updated_at'))
|
||||||
self.assert_final_lb_statuses(api_lb.get('id'))
|
self.assert_final_lb_statuses(api_lb.get('id'))
|
||||||
|
|
||||||
def test_update_with_vip(self):
|
def test_update_with_vip(self):
|
||||||
|
@ -266,12 +270,18 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
||||||
|
|
||||||
def _assert_graphs_equal(self, expected_graph, observed_graph):
|
def _assert_graphs_equal(self, expected_graph, observed_graph):
|
||||||
observed_graph_copy = copy.deepcopy(observed_graph)
|
observed_graph_copy = copy.deepcopy(observed_graph)
|
||||||
|
del observed_graph_copy['created_at']
|
||||||
|
del observed_graph_copy['updated_at']
|
||||||
obs_lb_id = observed_graph_copy.pop('id')
|
obs_lb_id = observed_graph_copy.pop('id')
|
||||||
|
|
||||||
self.assertTrue(uuidutils.is_uuid_like(obs_lb_id))
|
self.assertTrue(uuidutils.is_uuid_like(obs_lb_id))
|
||||||
expected_listeners = expected_graph.pop('listeners', [])
|
expected_listeners = expected_graph.pop('listeners', [])
|
||||||
observed_listeners = observed_graph_copy.pop('listeners', [])
|
observed_listeners = observed_graph_copy.pop('listeners', [])
|
||||||
self.assertEqual(expected_graph, observed_graph_copy)
|
self.assertEqual(expected_graph, observed_graph_copy)
|
||||||
for observed_listener in observed_listeners:
|
for observed_listener in observed_listeners:
|
||||||
|
del observed_listener['created_at']
|
||||||
|
del observed_listener['updated_at']
|
||||||
|
|
||||||
self.assertTrue(uuidutils.is_uuid_like(
|
self.assertTrue(uuidutils.is_uuid_like(
|
||||||
observed_listener.pop('id')))
|
observed_listener.pop('id')))
|
||||||
default_pool = observed_listener.get('default_pool')
|
default_pool = observed_listener.get('default_pool')
|
||||||
|
@ -279,6 +289,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
||||||
observed_listener.pop('default_pool_id')
|
observed_listener.pop('default_pool_id')
|
||||||
self.assertTrue(default_pool.get('id'))
|
self.assertTrue(default_pool.get('id'))
|
||||||
default_pool.pop('id')
|
default_pool.pop('id')
|
||||||
|
default_pool.pop('created_at')
|
||||||
|
default_pool.pop('updated_at')
|
||||||
hm = default_pool.get('healthmonitor')
|
hm = default_pool.get('healthmonitor')
|
||||||
if hm:
|
if hm:
|
||||||
self.assertTrue(hm.get('id'))
|
self.assertTrue(hm.get('id'))
|
||||||
|
@ -286,6 +298,8 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
||||||
for member in default_pool.get('members', []):
|
for member in default_pool.get('members', []):
|
||||||
self.assertTrue(member.get('id'))
|
self.assertTrue(member.get('id'))
|
||||||
member.pop('id')
|
member.pop('id')
|
||||||
|
member.pop('created_at')
|
||||||
|
member.pop('updated_at')
|
||||||
if observed_listener.get('sni_containers'):
|
if observed_listener.get('sni_containers'):
|
||||||
observed_listener['sni_containers'].sort()
|
observed_listener['sni_containers'].sort()
|
||||||
o_l7policies = observed_listener.get('l7policies')
|
o_l7policies = observed_listener.get('l7policies')
|
||||||
|
@ -295,12 +309,16 @@ class TestLoadBalancerGraph(base.BaseAPITest):
|
||||||
r_pool = o_l7policy.get('redirect_pool')
|
r_pool = o_l7policy.get('redirect_pool')
|
||||||
self.assertTrue(r_pool.get('id'))
|
self.assertTrue(r_pool.get('id'))
|
||||||
r_pool.pop('id')
|
r_pool.pop('id')
|
||||||
|
r_pool.pop('created_at')
|
||||||
|
r_pool.pop('updated_at')
|
||||||
self.assertTrue(o_l7policy.get('redirect_pool_id'))
|
self.assertTrue(o_l7policy.get('redirect_pool_id'))
|
||||||
o_l7policy.pop('redirect_pool_id')
|
o_l7policy.pop('redirect_pool_id')
|
||||||
if r_pool.get('members'):
|
if r_pool.get('members'):
|
||||||
for r_member in r_pool.get('members'):
|
for r_member in r_pool.get('members'):
|
||||||
self.assertTrue(r_member.get('id'))
|
self.assertTrue(r_member.get('id'))
|
||||||
r_member.pop('id')
|
r_member.pop('id')
|
||||||
|
r_member.pop('created_at')
|
||||||
|
r_member.pop('updated_at')
|
||||||
self.assertTrue(o_l7policy.get('id'))
|
self.assertTrue(o_l7policy.get('id'))
|
||||||
o_l7policy.pop('id')
|
o_l7policy.pop('id')
|
||||||
l7rules = o_l7policy.get('l7rules')
|
l7rules = o_l7policy.get('l7rules')
|
||||||
|
|
|
@ -94,6 +94,8 @@ class TestMember(base.BaseAPITest):
|
||||||
'10.0.0.1', 80)
|
'10.0.0.1', 80)
|
||||||
self.assertEqual('10.0.0.1', api_member.get('ip_address'))
|
self.assertEqual('10.0.0.1', api_member.get('ip_address'))
|
||||||
self.assertEqual(80, api_member.get('protocol_port'))
|
self.assertEqual(80, api_member.get('protocol_port'))
|
||||||
|
self.assertIsNotNone(api_member.get('created_at'))
|
||||||
|
self.assertIsNone(api_member.get('updated_at'))
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.PENDING_UPDATE,
|
constants.PENDING_UPDATE,
|
||||||
constants.ONLINE)
|
constants.ONLINE)
|
||||||
|
@ -225,7 +227,8 @@ class TestMember(base.BaseAPITest):
|
||||||
self.set_lb_status(self.lb.get('id'))
|
self.set_lb_status(self.lb.get('id'))
|
||||||
response_body = response.json
|
response_body = response.json
|
||||||
self.assertEqual(old_port, response_body.get('protocol_port'))
|
self.assertEqual(old_port, response_body.get('protocol_port'))
|
||||||
|
self.assertEqual(api_member.get('created_at'),
|
||||||
|
response_body.get('created_at'))
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.ACTIVE,
|
constants.ACTIVE,
|
||||||
constants.ONLINE)
|
constants.ONLINE)
|
||||||
|
@ -278,10 +281,13 @@ class TestMember(base.BaseAPITest):
|
||||||
self.pool_with_listener.get('id'),
|
self.pool_with_listener.get('id'),
|
||||||
'10.0.0.1', 80)
|
'10.0.0.1', 80)
|
||||||
self.set_lb_status(self.lb.get('id'))
|
self.set_lb_status(self.lb.get('id'))
|
||||||
response = self.get(self.member_path.format(
|
member = self.get(self.member_path.format(
|
||||||
member_id=api_member.get('id')))
|
member_id=api_member.get('id'))).json
|
||||||
api_member['operating_status'] = constants.ONLINE
|
api_member['operating_status'] = constants.ONLINE
|
||||||
self.assertEqual(api_member, response.json)
|
|
||||||
|
self.assertIsNone(api_member.pop('updated_at'))
|
||||||
|
self.assertIsNotNone(member.pop('updated_at'))
|
||||||
|
self.assertEqual(api_member, member)
|
||||||
self.delete(self.member_path.format(member_id=api_member.get('id')))
|
self.delete(self.member_path.format(member_id=api_member.get('id')))
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.PENDING_UPDATE,
|
constants.PENDING_UPDATE,
|
||||||
|
@ -308,10 +314,13 @@ class TestMember(base.BaseAPITest):
|
||||||
self.pool_with_listener.get('id'),
|
self.pool_with_listener.get('id'),
|
||||||
'10.0.0.1', 80)
|
'10.0.0.1', 80)
|
||||||
self.set_lb_status(self.lb.get('id'))
|
self.set_lb_status(self.lb.get('id'))
|
||||||
response = self.get(self.member_path.format(
|
member = self.get(self.member_path.format(
|
||||||
member_id=api_member.get('id')))
|
member_id=api_member.get('id'))).json
|
||||||
api_member['operating_status'] = constants.ONLINE
|
api_member['operating_status'] = constants.ONLINE
|
||||||
self.assertEqual(api_member, response.json)
|
|
||||||
|
self.assertIsNone(api_member.pop('updated_at'))
|
||||||
|
self.assertIsNotNone(member.pop('updated_at'))
|
||||||
|
self.assertEqual(api_member, member)
|
||||||
self.handler_mock().member.delete.side_effect = Exception()
|
self.handler_mock().member.delete.side_effect = Exception()
|
||||||
self.delete(self.member_path.format(
|
self.delete(self.member_path.format(
|
||||||
member_id=api_member.get('id')))
|
member_id=api_member.get('id')))
|
||||||
|
|
|
@ -100,6 +100,8 @@ class TestPool(base.BaseAPITest):
|
||||||
self.assertEqual(constants.PROTOCOL_HTTP, api_pool.get('protocol'))
|
self.assertEqual(constants.PROTOCOL_HTTP, api_pool.get('protocol'))
|
||||||
self.assertEqual(constants.LB_ALGORITHM_ROUND_ROBIN,
|
self.assertEqual(constants.LB_ALGORITHM_ROUND_ROBIN,
|
||||||
api_pool.get('lb_algorithm'))
|
api_pool.get('lb_algorithm'))
|
||||||
|
self.assertIsNotNone(api_pool.get('created_at'))
|
||||||
|
self.assertIsNone(api_pool.get('updated_at'))
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.ACTIVE,
|
constants.ACTIVE,
|
||||||
constants.ONLINE)
|
constants.ONLINE)
|
||||||
|
@ -239,6 +241,8 @@ class TestPool(base.BaseAPITest):
|
||||||
response = self.get(self.pool_path.format(pool_id=api_pool.get('id')))
|
response = self.get(self.pool_path.format(pool_id=api_pool.get('id')))
|
||||||
response_body = response.json
|
response_body = response.json
|
||||||
self.assertNotEqual('new_name', response_body.get('name'))
|
self.assertNotEqual('new_name', response_body.get('name'))
|
||||||
|
self.assertIsNotNone(response_body.get('created_at'))
|
||||||
|
self.assertIsNotNone(response_body.get('updated_at'))
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.ACTIVE,
|
constants.ACTIVE,
|
||||||
constants.ONLINE)
|
constants.ONLINE)
|
||||||
|
@ -289,7 +293,11 @@ class TestPool(base.BaseAPITest):
|
||||||
api_pool['operating_status'] = constants.ONLINE
|
api_pool['operating_status'] = constants.ONLINE
|
||||||
response = self.get(self.pool_path.format(
|
response = self.get(self.pool_path.format(
|
||||||
pool_id=api_pool.get('id')))
|
pool_id=api_pool.get('id')))
|
||||||
self.assertEqual(api_pool, response.json)
|
pool = response.json
|
||||||
|
|
||||||
|
self.assertIsNone(api_pool.pop('updated_at'))
|
||||||
|
self.assertIsNotNone(pool.pop('updated_at'))
|
||||||
|
self.assertEqual(api_pool, pool)
|
||||||
self.delete(self.pool_path.format(pool_id=api_pool.get('id')))
|
self.delete(self.pool_path.format(pool_id=api_pool.get('id')))
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
constants.PENDING_UPDATE,
|
constants.PENDING_UPDATE,
|
||||||
|
@ -331,7 +339,11 @@ class TestPool(base.BaseAPITest):
|
||||||
api_pool['operating_status'] = constants.ONLINE
|
api_pool['operating_status'] = constants.ONLINE
|
||||||
response = self.get(self.pool_path.format(
|
response = self.get(self.pool_path.format(
|
||||||
pool_id=api_pool.get('id')))
|
pool_id=api_pool.get('id')))
|
||||||
self.assertEqual(api_pool, response.json)
|
pool = response.json
|
||||||
|
|
||||||
|
self.assertIsNone(api_pool.pop('updated_at'))
|
||||||
|
self.assertIsNotNone(pool.pop('updated_at'))
|
||||||
|
self.assertEqual(api_pool, pool)
|
||||||
self.handler_mock().pool.delete.side_effect = Exception()
|
self.handler_mock().pool.delete.side_effect = Exception()
|
||||||
self.delete(self.pool_path.format(pool_id=api_pool.get('id')))
|
self.delete(self.pool_path.format(pool_id=api_pool.get('id')))
|
||||||
self.assert_correct_lb_status(self.lb.get('id'),
|
self.assert_correct_lb_status(self.lb.get('id'),
|
||||||
|
|
|
@ -165,15 +165,21 @@ class ModelTestMixin(object):
|
||||||
class PoolModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
class PoolModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
self.create_pool(self.session)
|
pool = self.create_pool(self.session)
|
||||||
|
|
||||||
|
self.assertIsNotNone(pool.created_at)
|
||||||
|
self.assertIsNone(pool.updated_at)
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
pool = self.create_pool(self.session)
|
pool = self.create_pool(self.session)
|
||||||
|
self.assertIsNone(pool.updated_at)
|
||||||
|
|
||||||
id = pool.id
|
id = pool.id
|
||||||
pool.name = 'test1'
|
pool.enabled = False
|
||||||
new_pool = self.session.query(
|
new_pool = self.session.query(
|
||||||
models.Pool).filter_by(id=id).first()
|
models.Pool).filter_by(id=id).first()
|
||||||
self.assertEqual('test1', new_pool.name)
|
self.assertFalse(new_pool.enabled)
|
||||||
|
self.assertIsNotNone(new_pool.updated_at)
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
pool = self.create_pool(self.session)
|
pool = self.create_pool(self.session)
|
||||||
|
@ -233,15 +239,22 @@ class MemberModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
||||||
self.pool = self.create_pool(self.session)
|
self.pool = self.create_pool(self.session)
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
self.create_member(self.session, self.pool.id)
|
member = self.create_member(self.session, self.pool.id)
|
||||||
|
|
||||||
|
self.assertIsNotNone(member.created_at)
|
||||||
|
self.assertIsNone(member.updated_at)
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
member = self.create_member(self.session, self.pool.id)
|
member = self.create_member(self.session, self.pool.id)
|
||||||
|
self.assertIsNone(member.updated_at)
|
||||||
|
|
||||||
member_id = member.id
|
member_id = member.id
|
||||||
member.name = 'test1'
|
member.enabled = False
|
||||||
|
|
||||||
new_member = self.session.query(
|
new_member = self.session.query(
|
||||||
models.Member).filter_by(id=member_id).first()
|
models.Member).filter_by(id=member_id).first()
|
||||||
self.assertEqual('test1', new_member.name)
|
self.assertFalse(new_member.enabled)
|
||||||
|
self.assertIsNotNone(new_member.updated_at)
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
member = self.create_member(self.session, self.pool.id)
|
member = self.create_member(self.session, self.pool.id)
|
||||||
|
@ -303,15 +316,21 @@ class SessionPersistenceModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
||||||
class ListenerModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
class ListenerModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
self.create_listener(self.session)
|
listener = self.create_listener(self.session)
|
||||||
|
|
||||||
|
self.assertIsNotNone(listener.created_at)
|
||||||
|
self.assertIsNone(listener.updated_at)
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
listener = self.create_listener(self.session)
|
listener = self.create_listener(self.session)
|
||||||
|
self.assertIsNone(listener.updated_at)
|
||||||
|
|
||||||
listener_id = listener.id
|
listener_id = listener.id
|
||||||
listener.name = 'test1'
|
listener.name = 'test1'
|
||||||
new_listener = self.session.query(
|
new_listener = self.session.query(
|
||||||
models.Listener).filter_by(id=listener_id).first()
|
models.Listener).filter_by(id=listener_id).first()
|
||||||
self.assertEqual('test1', new_listener.name)
|
self.assertEqual('test1', new_listener.name)
|
||||||
|
self.assertIsNotNone(new_listener.updated_at)
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
listener = self.create_listener(self.session)
|
listener = self.create_listener(self.session)
|
||||||
|
@ -449,15 +468,21 @@ class HealthMonitorModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
||||||
class LoadBalancerModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
class LoadBalancerModelTest(base.OctaviaDBTestBase, ModelTestMixin):
|
||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
self.create_load_balancer(self.session)
|
load_balancer = self.create_load_balancer(self.session)
|
||||||
|
|
||||||
|
self.assertIsNotNone(load_balancer.created_at)
|
||||||
|
self.assertIsNone(load_balancer.updated_at)
|
||||||
|
|
||||||
def test_update(self):
|
def test_update(self):
|
||||||
load_balancer = self.create_load_balancer(self.session)
|
load_balancer = self.create_load_balancer(self.session)
|
||||||
|
self.assertIsNone(load_balancer.updated_at)
|
||||||
|
|
||||||
lb_id = load_balancer.id
|
lb_id = load_balancer.id
|
||||||
load_balancer.name = 'test1'
|
load_balancer.enabled = False
|
||||||
new_load_balancer = self.session.query(
|
new_load_balancer = self.session.query(
|
||||||
models.LoadBalancer).filter_by(id=lb_id).first()
|
models.LoadBalancer).filter_by(id=lb_id).first()
|
||||||
self.assertEqual('test1', new_load_balancer.name)
|
self.assertFalse(new_load_balancer.enabled)
|
||||||
|
self.assertIsNotNone(new_load_balancer.updated_at)
|
||||||
|
|
||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
load_balancer = self.create_load_balancer(self.session)
|
load_balancer = self.create_load_balancer(self.session)
|
||||||
|
|
|
@ -132,6 +132,8 @@ class AllRepositoriesTest(base.OctaviaDBTestBase):
|
||||||
del lb_dm_dict['listeners']
|
del lb_dm_dict['listeners']
|
||||||
del lb_dm_dict['amphorae']
|
del lb_dm_dict['amphorae']
|
||||||
del lb_dm_dict['pools']
|
del lb_dm_dict['pools']
|
||||||
|
del lb_dm_dict['created_at']
|
||||||
|
del lb_dm_dict['updated_at']
|
||||||
self.assertEqual(lb, lb_dm_dict)
|
self.assertEqual(lb, lb_dm_dict)
|
||||||
vip_dm_dict = lb_dm.vip.to_dict()
|
vip_dm_dict = lb_dm.vip.to_dict()
|
||||||
vip_dm_dict['load_balancer_id'] = lb_dm.id
|
vip_dm_dict['load_balancer_id'] = lb_dm.id
|
||||||
|
@ -155,6 +157,8 @@ class AllRepositoriesTest(base.OctaviaDBTestBase):
|
||||||
del pool_dm_dict['load_balancer']
|
del pool_dm_dict['load_balancer']
|
||||||
del pool_dm_dict['load_balancer_id']
|
del pool_dm_dict['load_balancer_id']
|
||||||
del pool_dm_dict['l7policies']
|
del pool_dm_dict['l7policies']
|
||||||
|
del pool_dm_dict['created_at']
|
||||||
|
del pool_dm_dict['updated_at']
|
||||||
self.assertEqual(pool, pool_dm_dict)
|
self.assertEqual(pool, pool_dm_dict)
|
||||||
new_listener = self.repos.listener.get(self.session,
|
new_listener = self.repos.listener.get(self.session,
|
||||||
id=self.listener.id)
|
id=self.listener.id)
|
||||||
|
@ -181,6 +185,8 @@ class AllRepositoriesTest(base.OctaviaDBTestBase):
|
||||||
del pool_dm_dict['load_balancer']
|
del pool_dm_dict['load_balancer']
|
||||||
del pool_dm_dict['load_balancer_id']
|
del pool_dm_dict['load_balancer_id']
|
||||||
del pool_dm_dict['l7policies']
|
del pool_dm_dict['l7policies']
|
||||||
|
del pool_dm_dict['created_at']
|
||||||
|
del pool_dm_dict['updated_at']
|
||||||
self.assertEqual(pool, pool_dm_dict)
|
self.assertEqual(pool, pool_dm_dict)
|
||||||
sp_dm_dict = pool_dm.session_persistence.to_dict()
|
sp_dm_dict = pool_dm.session_persistence.to_dict()
|
||||||
del sp_dm_dict['pool']
|
del sp_dm_dict['pool']
|
||||||
|
@ -213,6 +219,8 @@ class AllRepositoriesTest(base.OctaviaDBTestBase):
|
||||||
del pool_dm_dict['load_balancer']
|
del pool_dm_dict['load_balancer']
|
||||||
del pool_dm_dict['load_balancer_id']
|
del pool_dm_dict['load_balancer_id']
|
||||||
del pool_dm_dict['l7policies']
|
del pool_dm_dict['l7policies']
|
||||||
|
del pool_dm_dict['created_at']
|
||||||
|
del pool_dm_dict['updated_at']
|
||||||
pool.update(update_pool)
|
pool.update(update_pool)
|
||||||
self.assertEqual(pool, pool_dm_dict)
|
self.assertEqual(pool, pool_dm_dict)
|
||||||
self.assertIsNone(new_pool_dm.session_persistence)
|
self.assertIsNone(new_pool_dm.session_persistence)
|
||||||
|
@ -243,6 +251,8 @@ class AllRepositoriesTest(base.OctaviaDBTestBase):
|
||||||
del pool_dm_dict['load_balancer']
|
del pool_dm_dict['load_balancer']
|
||||||
del pool_dm_dict['load_balancer_id']
|
del pool_dm_dict['load_balancer_id']
|
||||||
del pool_dm_dict['l7policies']
|
del pool_dm_dict['l7policies']
|
||||||
|
del pool_dm_dict['created_at']
|
||||||
|
del pool_dm_dict['updated_at']
|
||||||
pool.update(update_pool)
|
pool.update(update_pool)
|
||||||
self.assertEqual(pool, pool_dm_dict)
|
self.assertEqual(pool, pool_dm_dict)
|
||||||
sp_dm_dict = new_pool_dm.session_persistence.to_dict()
|
sp_dm_dict = new_pool_dm.session_persistence.to_dict()
|
||||||
|
|
Loading…
Reference in New Issue