Merge "Add network resource properties"
This commit is contained in:
		| @@ -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): | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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`` | ||||
|   | ||||
| @@ -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') | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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)) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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)) | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jenkins
					Jenkins