diff --git a/openstack/network/v2/floating_ip.py b/openstack/network/v2/floating_ip.py index 03a6d120c..fac89876b 100644 --- a/openstack/network/v2/floating_ip.py +++ b/openstack/network/v2/floating_ip.py @@ -30,6 +30,8 @@ class FloatingIP(resource.Resource): allow_list = True # Properties + #: The floating IP description. + description = resource.prop('description') #: The fixed IP address associated with the floating IP. If you #: intend to associate the floating IP with a fixed IP at creation #: time, then you must indicate the identifier of the internal port. @@ -47,6 +49,8 @@ class FloatingIP(resource.Resource): project_id = resource.prop('tenant_id') #: The ID of an associated router. router_id = resource.prop('router_id') + #: The floating IP status. Value is ``ACTIVE`` or ``DOWN``. + status = resource.prop('status') @classmethod def find_available(cls, session): diff --git a/openstack/network/v2/health_monitor.py b/openstack/network/v2/health_monitor.py index 0f3ec5a6e..e52b75336 100644 --- a/openstack/network/v2/health_monitor.py +++ b/openstack/network/v2/health_monitor.py @@ -39,6 +39,8 @@ class HealthMonitor(resource.Resource): is_admin_state_up = resource.prop('admin_state_up', type=bool) #: Maximum consecutive health probe tries. max_retries = resource.prop('max_retries') + #: Name of the health monitor. + name = resource.prop('name') #: List of pools associated with this health monitor #: *Type: list of dicts which contain the pool IDs* pool_ids = resource.prop('pools', type=list) diff --git a/openstack/network/v2/load_balancer.py b/openstack/network/v2/load_balancer.py index 35c6f3af8..9ed7334c4 100644 --- a/openstack/network/v2/load_balancer.py +++ b/openstack/network/v2/load_balancer.py @@ -40,6 +40,9 @@ class LoadBalancer(resource.Resource): name = resource.prop('name') #: Status of load_balancer operating, e.g. ONLINE, OFFLINE. operating_status = resource.prop('operating_status') + #: List of pools associated with this load balancer. + #: *Type: list of dicts which contain the pool IDs* + pool_ids = resource.prop('pools', type=list) #: The ID of the project this load balancer is associated with. project_id = resource.prop('tenant_id') #: The name of the provider. diff --git a/openstack/network/v2/network.py b/openstack/network/v2/network.py index 8225f279c..b24170a92 100644 --- a/openstack/network/v2/network.py +++ b/openstack/network/v2/network.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +from openstack import format from openstack.network import network_service from openstack import resource @@ -34,6 +35,11 @@ class Network(resource.Resource): #: Availability zones for the network. #: *Type: list of availability zone names* availability_zones = resource.prop('availability_zones') + #: Timestamp when the network was created. + #: *Type: datetime object parsed from ISO 8601 formatted string* + created_at = resource.prop('created_at', type=format.ISO8601) + #: The network description. + description = resource.prop('description') #: The ID of the IPv4 address scope for the network. ipv4_address_scope_id = resource.prop('ipv4_address_scope') #: The ID of the IPv6 address scope for the network. @@ -41,6 +47,9 @@ class Network(resource.Resource): #: The administrative state of the network, which is up ``True`` or #: down ``False``. *Type: bool* is_admin_state_up = resource.prop('admin_state_up', type=bool) + #: Whether or not this is the default external network. + #: *Type: bool* + is_default = resource.prop('is_default', type=bool) #: The port security status, which is enabled ``True`` or disabled #: ``False``. *Type: bool* *Default: False* is_port_security_enabled = resource.prop('port_security_enabled', @@ -75,3 +84,6 @@ class Network(resource.Resource): #: The associated subnet IDs. #: *Type: list of strs of the subnet IDs* subnet_ids = resource.prop('subnets', type=list) + #: Timestamp when the network was last updated. + #: *Type: datetime object parsed from ISO 8601 formatted string* + updated_at = resource.prop('updated_at', type=format.ISO8601) diff --git a/openstack/network/v2/pool.py b/openstack/network/v2/pool.py index 12b4300ad..1809f1863 100644 --- a/openstack/network/v2/pool.py +++ b/openstack/network/v2/pool.py @@ -42,6 +42,9 @@ class Pool(resource.Resource): #: List of associated listeners. #: *Type: list of dicts which contain the listener IDs* listener_ids = resource.prop('listeners', type=list) + #: List of associated load balancers. + #: *Type: list of dicts which contain the load balancer IDs* + load_balancer_ids = resource.prop('loadbalancers', type=list) #: List of members that belong to the pool. #: *Type: list of dicts which contain the member IDs* member_ids = resource.prop('members', type=list) diff --git a/openstack/network/v2/pool_member.py b/openstack/network/v2/pool_member.py index 1d6d9be69..10f04207a 100644 --- a/openstack/network/v2/pool_member.py +++ b/openstack/network/v2/pool_member.py @@ -33,6 +33,8 @@ class PoolMember(resource.Resource): #: The administrative state of the pool member, which is up ``True`` or #: down ``False``. *Type: bool* is_admin_state_up = resource.prop('admin_state_up', type=bool) + #: Name of the pool member. + name = resource.prop('name') #: The ID of the project this pool member is associated with. project_id = resource.prop('tenant_id') #: The port on which the application is hosted. diff --git a/openstack/network/v2/port.py b/openstack/network/v2/port.py index 2b7491232..44320b785 100644 --- a/openstack/network/v2/port.py +++ b/openstack/network/v2/port.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +from openstack import format from openstack.network import network_service from openstack import resource @@ -56,6 +57,11 @@ class Port(resource.Resource): #: In GET operations, the binding:vnic_type extended attribute is #: visible to only port owners and administrative users. binding_vnic_type = resource.prop('binding:vnic_type') + #: Timestamp when the port was created. + #: *Type: datetime object parsed from ISO 8601 formatted string* + created_at = resource.prop('created_at', type=format.ISO8601) + #: The port description. + description = resource.prop('description') #: Device ID of this port. device_id = resource.prop('device_id') #: Device owner of this port (e.g. ``network:dhcp``). @@ -90,3 +96,6 @@ class Port(resource.Resource): security_group_ids = resource.prop('security_groups', type=list) #: The port status. Value is ``ACTIVE`` or ``DOWN``. status = resource.prop('status') + #: Timestamp when the port was last updated. + #: *Type: datetime object parsed from ISO 8601 formatted string* + updated_at = resource.prop('updated_at', type=format.ISO8601) diff --git a/openstack/network/v2/quota.py b/openstack/network/v2/quota.py index de11e45c6..9ecb530bd 100644 --- a/openstack/network/v2/quota.py +++ b/openstack/network/v2/quota.py @@ -29,12 +29,24 @@ class Quota(resource.Resource): # Properties #: The maximum amount of floating IPs you can have. *Type: int* floating_ips = resource.prop('floatingip', type=int) + #: The maximum amount of health monitors you can create. *Type: int* + health_monitors = resource.prop('healthmonitor', type=int) + #: The maximum amount of listeners you can create. *Type: int* + listeners = resource.prop('listener', type=int) + #: The maximum amount of load balancers you can create. *Type: int* + load_balancers = resource.prop('loadbalancer', type=int) + #: The maximum amount of L7 policies you can create. *Type: int* + l7_policies = resource.prop('l7policy', type=int) #: The maximum amount of networks you can create. *Type: int* networks = resource.prop('network', type=int) + #: The maximum amount of pools you can create. *Type: int* + pools = resource.prop('pool', type=int) #: The maximum amount of ports you can create. *Type: int* ports = resource.prop('port', type=int) #: The ID of the project these quota values are for. project_id = resource.prop('tenant_id') + #: The maximum amount of RBAC policies you can create. *Type: int* + rbac_policies = resource.prop('rbac_policy', type=int) #: The maximum amount of routers you can create. *Type: int* routers = resource.prop('router', type=int) #: The maximum amount of subnets you can create. *Type: int* @@ -45,5 +57,3 @@ class Quota(resource.Resource): security_group_rules = resource.prop('security_group_rule', type=int) #: The maximum amount of security groups you can create. *Type: int* security_groups = resource.prop('security_group', type=int) - #: The maximum amount of RBAC policies you can create. *Type: int* - rbac_policies = resource.prop('rbac_policy', type=int) diff --git a/openstack/network/v2/router.py b/openstack/network/v2/router.py index 7e426b851..d9fd234b6 100644 --- a/openstack/network/v2/router.py +++ b/openstack/network/v2/router.py @@ -35,6 +35,8 @@ class Router(resource.Resource): #: Availability zones for the router. #: *Type: list of availability zone names* availability_zones = resource.prop('availability_zones') + #: The router description. + description = resource.prop('description') #: The ``network_id``, for the external gateway. *Type: dict* external_gateway_info = resource.prop('external_gateway_info', type=dict) #: The administrative state of the router, which is up ``True`` diff --git a/openstack/network/v2/security_group_rule.py b/openstack/network/v2/security_group_rule.py index ecbb3304d..04a56bb3b 100644 --- a/openstack/network/v2/security_group_rule.py +++ b/openstack/network/v2/security_group_rule.py @@ -33,6 +33,8 @@ class SecurityGroupRule(resource.Resource): #: rule is applied to incoming ingress traffic for that instance. #: An egress rule is applied to traffic leaving the instance. direction = resource.prop('direction') + #: The security group rule description. + description = resource.prop('description') #: Must be IPv4 or IPv6, and addresses represented in CIDR must match #: the ingress or egress rules. ethertype = resource.prop('ethertype') diff --git a/openstack/network/v2/subnet.py b/openstack/network/v2/subnet.py index 6671f7d8d..ac3f2c9b0 100644 --- a/openstack/network/v2/subnet.py +++ b/openstack/network/v2/subnet.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +from openstack import format from openstack.network import network_service from openstack import resource @@ -32,6 +33,11 @@ class Subnet(resource.Resource): allocation_pools = resource.prop('allocation_pools') #: The CIDR. cidr = resource.prop('cidr') + #: Timestamp when the subnet was created. + #: *Type: datetime object parsed from ISO 8601 formatted string* + created_at = resource.prop('created_at', type=format.ISO8601) + #: The subnet description. + description = resource.prop('description') #: A list of DNS nameservers. dns_nameservers = resource.prop('dns_nameservers') #: The gateway IP address. @@ -56,3 +62,6 @@ class Subnet(resource.Resource): project_id = resource.prop('tenant_id') #: The subnet pool ID from which to obtain a CIDR. subnet_pool_id = resource.prop('subnetpool_id') + #: Timestamp when the subnet was last updated. + #: *Type: datetime object parsed from ISO 8601 formatted string* + updated_at = resource.prop('updated_at', type=format.ISO8601) diff --git a/openstack/network/v2/subnet_pool.py b/openstack/network/v2/subnet_pool.py index 492968e86..4477ad982 100644 --- a/openstack/network/v2/subnet_pool.py +++ b/openstack/network/v2/subnet_pool.py @@ -10,6 +10,7 @@ # License for the specific language governing permissions and limitations # under the License. +from openstack import format from openstack.network import network_service from openstack import resource @@ -30,6 +31,9 @@ class SubnetPool(resource.Resource): # Properties #: The ID of the address scope associated with the subnet pool. address_scope_id = resource.prop('address_scope_id') + #: Timestamp when the subnet pool was created. + #: *Type: datetime object parsed from ISO 8601 formatted string* + created_at = resource.prop('created_at', type=format.ISO8601) #: The length of the prefix to allocate when the cidr or prefixlen #: attributes are omitted when creating a subnet. *Type: int* default_prefix_length = resource.prop('default_prefixlen', type=int) @@ -39,9 +43,14 @@ class SubnetPool(resource.Resource): #: default_quota is measured units of /64. All projects that use the #: subnet pool have the same prefix quota applied. *Type: int* default_quota = resource.prop('default_quota', type=int) + #: The subnet pool description. + description = resource.prop('description') #: Read-only. The IP address family of the list of prefixes. #: *Type: int* ip_version = resource.prop('ip_version', type=int) + #: Whether or not this is the default subnet pool. + #: *Type: bool* + is_default = resource.prop('is_default', type=bool) #: Indicates whether this subnet pool is shared across all projects. #: *Type: bool* is_shared = resource.prop('shared', type=bool) @@ -59,3 +68,6 @@ class SubnetPool(resource.Resource): #: The adjacent prefixes are merged and treated as a single prefix. #: *Type: list* prefixes = resource.prop('prefixes', type=list) + #: Timestamp when the subnet pool was last updated. + #: *Type: datetime object parsed from ISO 8601 formatted string* + updated_at = resource.prop('updated_at', type=format.ISO8601) diff --git a/openstack/tests/unit/network/v2/test_floating_ip.py b/openstack/tests/unit/network/v2/test_floating_ip.py index bf47ad055..7919dc5d1 100644 --- a/openstack/tests/unit/network/v2/test_floating_ip.py +++ b/openstack/tests/unit/network/v2/test_floating_ip.py @@ -24,6 +24,8 @@ EXAMPLE = { 'port_id': '5', 'tenant_id': '6', 'router_id': '7', + 'description': '8', + 'status': 'ACTIVE', } @@ -52,6 +54,8 @@ class TestFloatingIP(testtools.TestCase): self.assertEqual(EXAMPLE['port_id'], sot.port_id) self.assertEqual(EXAMPLE['tenant_id'], sot.project_id) self.assertEqual(EXAMPLE['router_id'], sot.router_id) + self.assertEqual(EXAMPLE['description'], sot.description) + self.assertEqual(EXAMPLE['status'], sot.status) def test_find_available(self): mock_session = mock.Mock() diff --git a/openstack/tests/unit/network/v2/test_health_monitor.py b/openstack/tests/unit/network/v2/test_health_monitor.py index 611a269a3..07355fb17 100644 --- a/openstack/tests/unit/network/v2/test_health_monitor.py +++ b/openstack/tests/unit/network/v2/test_health_monitor.py @@ -27,6 +27,7 @@ EXAMPLE = { 'timeout': '9', 'type': '10', 'url_path': '11', + 'name': '12', } @@ -57,3 +58,4 @@ class TestHealthMonitor(testtools.TestCase): self.assertEqual(EXAMPLE['timeout'], sot.timeout) self.assertEqual(EXAMPLE['type'], sot.type) self.assertEqual(EXAMPLE['url_path'], sot.url_path) + self.assertEqual(EXAMPLE['name'], sot.name) diff --git a/openstack/tests/unit/network/v2/test_load_balancer.py b/openstack/tests/unit/network/v2/test_load_balancer.py index 8ab717a11..b3362725e 100644 --- a/openstack/tests/unit/network/v2/test_load_balancer.py +++ b/openstack/tests/unit/network/v2/test_load_balancer.py @@ -28,6 +28,7 @@ EXAMPLE = { 'vip_subnet_id': '10', 'vip_port_id': '11', 'provider': '12', + 'pools': [{'id', '13'}], } @@ -60,3 +61,4 @@ class TestLoadBalancer(testtools.TestCase): self.assertEqual(EXAMPLE['vip_subnet_id'], sot.vip_subnet_id) self.assertEqual(EXAMPLE['vip_port_id'], sot.vip_port_id) self.assertEqual(EXAMPLE['provider'], sot.provider) + self.assertEqual(EXAMPLE['pools'], sot.pool_ids) diff --git a/openstack/tests/unit/network/v2/test_network.py b/openstack/tests/unit/network/v2/test_network.py index 5dab2f78c..35480eec7 100644 --- a/openstack/tests/unit/network/v2/test_network.py +++ b/openstack/tests/unit/network/v2/test_network.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import datetime + import testtools from openstack.network.v2 import network @@ -34,6 +36,10 @@ EXAMPLE = { 'availability_zones': ['16'], 'ipv4_address_scope': '17', 'ipv6_address_scope': '18', + 'description': '19', + 'created_at': '2016-03-09T12:14:57.233772', + 'updated_at': '2016-07-09T12:14:57.233772', + 'is_default': False, } @@ -78,3 +84,11 @@ class TestNetwork(testtools.TestCase): sot.ipv4_address_scope_id) self.assertEqual(EXAMPLE['ipv6_address_scope'], sot.ipv6_address_scope_id) + self.assertEqual(EXAMPLE['description'], sot.description) + dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.created_at.replace(tzinfo=None)) + dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.updated_at.replace(tzinfo=None)) + self.assertFalse(sot.is_default) diff --git a/openstack/tests/unit/network/v2/test_pool.py b/openstack/tests/unit/network/v2/test_pool.py index 8796bfe9c..f40f86122 100644 --- a/openstack/tests/unit/network/v2/test_pool.py +++ b/openstack/tests/unit/network/v2/test_pool.py @@ -27,6 +27,7 @@ EXAMPLE = { 'tenant_id': '9', 'protocol': '10', 'session_persistence': '11', + 'loadbalancers': [{'id': '12'}], } @@ -58,3 +59,4 @@ class TestPool(testtools.TestCase): self.assertEqual(EXAMPLE['protocol'], sot.protocol) self.assertEqual(EXAMPLE['session_persistence'], sot.session_persistence) + self.assertEqual(EXAMPLE['loadbalancers'], sot.load_balancer_ids) diff --git a/openstack/tests/unit/network/v2/test_pool_member.py b/openstack/tests/unit/network/v2/test_pool_member.py index e816ab155..a136fb8b8 100644 --- a/openstack/tests/unit/network/v2/test_pool_member.py +++ b/openstack/tests/unit/network/v2/test_pool_member.py @@ -25,6 +25,7 @@ EXAMPLE = { 'protocol_port': 5, 'subnet_id': '6', 'weight': 7, + 'name': '8', } @@ -51,6 +52,7 @@ class TestPoolMember(testtools.TestCase): self.assertEqual(EXAMPLE['protocol_port'], sot.protocol_port) self.assertEqual(EXAMPLE['subnet_id'], sot.subnet_id) self.assertEqual(EXAMPLE['weight'], sot.weight) + self.assertEqual(EXAMPLE['name'], sot.name) def test_create_body(self): params = copy.deepcopy(EXAMPLE) diff --git a/openstack/tests/unit/network/v2/test_port.py b/openstack/tests/unit/network/v2/test_port.py index cc7a33a41..b33d48b6d 100644 --- a/openstack/tests/unit/network/v2/test_port.py +++ b/openstack/tests/unit/network/v2/test_port.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import datetime + import testtools from openstack.network.v2 import port @@ -37,6 +39,9 @@ EXAMPLE = { 'port_security_enabled': True, 'dns_assignment': [{'19': 19}], 'dns_name': '20', + 'description': '21', + 'created_at': '2016-03-09T12:14:57.233772', + 'updated_at': '2016-07-09T12:14:57.233772', } @@ -79,3 +84,10 @@ class TestPort(testtools.TestCase): self.assertTrue(sot.is_port_security_enabled) self.assertEqual(EXAMPLE['dns_assignment'], sot.dns_assignment) self.assertEqual(EXAMPLE['dns_name'], sot.dns_name) + self.assertEqual(EXAMPLE['description'], sot.description) + dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.created_at.replace(tzinfo=None)) + dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.updated_at.replace(tzinfo=None)) diff --git a/openstack/tests/unit/network/v2/test_quota.py b/openstack/tests/unit/network/v2/test_quota.py index d29b85c8e..20584a699 100644 --- a/openstack/tests/unit/network/v2/test_quota.py +++ b/openstack/tests/unit/network/v2/test_quota.py @@ -26,6 +26,11 @@ EXAMPLE = { 'security_group_rule': 8, 'security_group': 9, 'rbac_policy': -1, + 'healthmonitor': 11, + 'listener': 12, + 'loadbalancer': 13, + 'l7policy': 14, + 'pool': 15, } @@ -56,3 +61,8 @@ class TestQuota(testtools.TestCase): sot.security_group_rules) self.assertEqual(EXAMPLE['security_group'], sot.security_groups) self.assertEqual(EXAMPLE['rbac_policy'], sot.rbac_policies) + self.assertEqual(EXAMPLE['healthmonitor'], sot.health_monitors) + self.assertEqual(EXAMPLE['listener'], sot.listeners) + self.assertEqual(EXAMPLE['loadbalancer'], sot.load_balancers) + self.assertEqual(EXAMPLE['l7policy'], sot.l7_policies) + self.assertEqual(EXAMPLE['pool'], sot.pools) diff --git a/openstack/tests/unit/network/v2/test_router.py b/openstack/tests/unit/network/v2/test_router.py index 9f4b332a2..c75ccc4fa 100644 --- a/openstack/tests/unit/network/v2/test_router.py +++ b/openstack/tests/unit/network/v2/test_router.py @@ -26,6 +26,7 @@ EXAMPLE = { 'routes': [], 'availability_zone_hints': [], 'availability_zones': [], + 'description': '10', } EXAMPLE_WITH_OPTIONAL = { @@ -42,6 +43,7 @@ EXAMPLE_WITH_OPTIONAL = { 'distributed': True, 'availability_zone_hints': ['zone-1', 'zone-2'], 'availability_zones': ['zone-2'], + 'description': 'description', } @@ -75,6 +77,7 @@ class TestRouter(testtools.TestCase): sot.availability_zone_hints) self.assertEqual(EXAMPLE['availability_zones'], sot.availability_zones) + self.assertEqual(EXAMPLE['description'], sot.description) def test_make_it_with_optional(self): sot = router.Router(EXAMPLE_WITH_OPTIONAL) @@ -92,6 +95,8 @@ class TestRouter(testtools.TestCase): sot.availability_zone_hints) self.assertEqual(EXAMPLE_WITH_OPTIONAL['availability_zones'], sot.availability_zones) + self.assertEqual(EXAMPLE_WITH_OPTIONAL['description'], + sot.description) def test_add_interface_subnet(self): # Add subnet to a router diff --git a/openstack/tests/unit/network/v2/test_security_group_rule.py b/openstack/tests/unit/network/v2/test_security_group_rule.py index aa64ef3ee..fc5ad6d63 100644 --- a/openstack/tests/unit/network/v2/test_security_group_rule.py +++ b/openstack/tests/unit/network/v2/test_security_group_rule.py @@ -26,6 +26,7 @@ EXAMPLE = { 'remote_group_id': '8', 'remote_ip_prefix': '9', 'security_group_id': '10', + 'description': '11', } @@ -55,3 +56,4 @@ class TestSecurityGroupRule(testtools.TestCase): self.assertEqual(EXAMPLE['remote_group_id'], sot.remote_group_id) self.assertEqual(EXAMPLE['remote_ip_prefix'], sot.remote_ip_prefix) self.assertEqual(EXAMPLE['security_group_id'], sot.security_group_id) + self.assertEqual(EXAMPLE['description'], sot.description) diff --git a/openstack/tests/unit/network/v2/test_subnet.py b/openstack/tests/unit/network/v2/test_subnet.py index a1698d223..56c60d856 100644 --- a/openstack/tests/unit/network/v2/test_subnet.py +++ b/openstack/tests/unit/network/v2/test_subnet.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import datetime + import testtools from openstack.network.v2 import subnet @@ -30,6 +32,9 @@ EXAMPLE = { 'network_id': '10', 'tenant_id': '11', 'subnetpool_id': '12', + 'description': '13', + 'created_at': '2016-03-09T12:14:57.233772', + 'updated_at': '2016-07-09T12:14:57.233772', } @@ -63,3 +68,10 @@ class TestSubnet(testtools.TestCase): self.assertEqual(EXAMPLE['network_id'], sot.network_id) self.assertEqual(EXAMPLE['tenant_id'], sot.project_id) self.assertEqual(EXAMPLE['subnetpool_id'], sot.subnet_pool_id) + self.assertEqual(EXAMPLE['description'], sot.description) + dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.created_at.replace(tzinfo=None)) + dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.updated_at.replace(tzinfo=None)) diff --git a/openstack/tests/unit/network/v2/test_subnet_pool.py b/openstack/tests/unit/network/v2/test_subnet_pool.py index 9296abee1..1642f640d 100644 --- a/openstack/tests/unit/network/v2/test_subnet_pool.py +++ b/openstack/tests/unit/network/v2/test_subnet_pool.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import datetime + import testtools from openstack.network.v2 import subnet_pool @@ -27,6 +29,10 @@ EXAMPLE = { 'ip_version': 4, 'shared': True, 'address_scope_id': '11', + 'description': '12', + 'created_at': '2016-03-09T12:14:57.233772', + 'updated_at': '2016-07-09T12:14:57.233772', + 'is_default': True, } @@ -60,3 +66,11 @@ class TestSubnetpool(testtools.TestCase): self.assertEqual(EXAMPLE['ip_version'], sot.ip_version) self.assertTrue(sot.is_shared) self.assertEqual(EXAMPLE['address_scope_id'], sot.address_scope_id) + self.assertEqual(EXAMPLE['description'], sot.description) + dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.created_at.replace(tzinfo=None)) + dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace( + tzinfo=None) + self.assertEqual(dt, sot.updated_at.replace(tzinfo=None)) + self.assertTrue(sot.is_default)