Merge "Adding description for testcases - network part3"
diff --git a/tempest/api/network/test_allowed_address_pair.py b/tempest/api/network/test_allowed_address_pair.py
index 639defb..ff5026b 100644
--- a/tempest/api/network/test_allowed_address_pair.py
+++ b/tempest/api/network/test_allowed_address_pair.py
@@ -57,7 +57,7 @@
 
     @decorators.idempotent_id('86c3529b-1231-40de-803c-00e40882f043')
     def test_create_list_port_with_address_pair(self):
-        # Create port with allowed address pair attribute
+        """Create and list port with allowed address pair attribute"""
         allowed_address_pairs = [{'ip_address': self.ip_address,
                                   'mac_address': self.mac_address}]
         body = self.ports_client.create_port(
@@ -100,17 +100,17 @@
 
     @decorators.idempotent_id('9599b337-272c-47fd-b3cf-509414414ac4')
     def test_update_port_with_address_pair(self):
-        # Update port with allowed address pair
+        """Update port with allowed address pair"""
         self._update_port_with_address(self.ip_address)
 
     @decorators.idempotent_id('4d6d178f-34f6-4bff-a01c-0a2f8fe909e4')
     def test_update_port_with_cidr_address_pair(self):
-        # Update allowed address pair with cidr
+        """Update allowed address pair with cidr"""
         self._update_port_with_address(str(self.cidr))
 
     @decorators.idempotent_id('b3f20091-6cd5-472b-8487-3516137df933')
     def test_update_port_with_multiple_ip_mac_address_pair(self):
-        # Create an ip _address and mac_address through port create
+        """Update allowed address pair port with multiple ip and mac"""
         resp = self.ports_client.create_port(
             network_id=self.network['id'],
             name=data_utils.rand_name(self.__class__.__name__))
diff --git a/tempest/api/network/test_dhcp_ipv6.py b/tempest/api/network/test_dhcp_ipv6.py
index eb31ed3..fee6af5 100644
--- a/tempest/api/network/test_dhcp_ipv6.py
+++ b/tempest/api/network/test_dhcp_ipv6.py
@@ -104,9 +104,12 @@
 
     @decorators.idempotent_id('e5517e62-6f16-430d-a672-f80875493d4c')
     def test_dhcpv6_stateless_eui64(self):
-        # NOTE: When subnets configured with RAs SLAAC (AOM=100) and DHCP
-        # stateless (AOM=110) both for radvd and dnsmasq, port shall receive
-        # IP address calculated from its MAC.
+        """Test eui64 ip when setting slaac and statelss for subnet
+
+        NOTE: When subnets configured with RAs SLAAC (AOM=100) and DHCP
+        stateless (AOM=110) both for radvd and dnsmasq, port shall receive
+        IP address calculated from its MAC.
+        """
         for ra_mode, add_mode in (
                 ('slaac', 'slaac'),
                 ('dhcpv6-stateless', 'dhcpv6-stateless'),
@@ -122,9 +125,12 @@
 
     @decorators.idempotent_id('ae2f4a5d-03ff-4c42-a3b0-ce2fcb7ea832')
     def test_dhcpv6_stateless_no_ra(self):
-        # NOTE: When subnets configured with dnsmasq SLAAC and DHCP stateless
-        # and there is no radvd, port shall receive IP address calculated
-        # from its MAC and mask of subnet.
+        """Test eui64 ip when setting stateless and no radvd for subnets
+
+        NOTE: When subnets configured with dnsmasq SLAAC and DHCP stateless
+        and there is no radvd, port shall receive IP address calculated
+        from its MAC and mask of subnet.
+        """
         for ra_mode, add_mode in (
                 (None, 'slaac'),
                 (None, 'dhcpv6-stateless'),
@@ -161,8 +167,11 @@
 
     @decorators.idempotent_id('21635b6f-165a-4d42-bf49-7d195e47342f')
     def test_dhcpv6_stateless_no_ra_no_dhcp(self):
-        # NOTE: If no radvd option and no dnsmasq option is configured
-        # port shall receive IP from fixed IPs list of subnet.
+        """Test eui64 ip when setting no radvd and no dnsmasq for subnets
+
+        NOTE: If no radvd option and no dnsmasq option is configured
+        port shall receive IP from fixed IPs list of subnet.
+        """
         real_ip, eui_ip = self._get_ips_from_subnet()
         self._clean_network()
         self.assertNotEqual(eui_ip, real_ip,
@@ -173,10 +182,13 @@
 
     @decorators.idempotent_id('4544adf7-bb5f-4bdc-b769-b3e77026cef2')
     def test_dhcpv6_two_subnets(self):
-        # NOTE: When one IPv6 subnet configured with dnsmasq SLAAC or DHCP
-        # stateless and other IPv6 is with DHCP stateful, port shall receive
-        # EUI-64 IP addresses from first subnet and DHCP address from second
-        # one. Order of subnet creating should be unimportant.
+        """Test eui64 ip when creating port under network with two subnets
+
+        NOTE: When one IPv6 subnet configured with dnsmasq SLAAC or DHCP
+        stateless and other IPv6 is with DHCP stateful, port shall receive
+        EUI-64 IP addresses from first subnet and DHCP address from second
+        one. Order of subnet creating should be unimportant.
+        """
         for order in ("slaac_first", "dhcp_first"):
             for ra_mode, add_mode in (
                     ('slaac', 'slaac'),
@@ -225,10 +237,13 @@
 
     @decorators.idempotent_id('4256c61d-c538-41ea-9147-3c450c36669e')
     def test_dhcpv6_64_subnets(self):
-        # NOTE: When one IPv6 subnet configured with dnsmasq SLAAC or DHCP
-        # stateless and other IPv4 is with DHCP of IPv4, port shall receive
-        # EUI-64 IP addresses from first subnet and IPv4 DHCP address from
-        # second one. Order of subnet creating should be unimportant.
+        """Test eui64 ip when setting slaac and stateless for subnets
+
+        NOTE: When one IPv6 subnet configured with dnsmasq SLAAC or DHCP
+        stateless and other IPv4 is with DHCP of IPv4, port shall receive
+        EUI-64 IP addresses from first subnet and IPv4 DHCP address from
+        second one. Order of subnet creating should be unimportant.
+        """
         for order in ("slaac_first", "dhcp_first"):
             for ra_mode, add_mode in (
                     ('slaac', 'slaac'),
@@ -271,8 +286,11 @@
 
     @decorators.idempotent_id('4ab211a0-276f-4552-9070-51e27f58fecf')
     def test_dhcp_stateful(self):
-        # NOTE: With all options below, DHCPv6 shall allocate address from
-        # subnet pool to port.
+        """Test creating port when setting stateful for subnets
+
+        NOTE: With all options below, DHCPv6 shall allocate address from
+        subnet pool to port.
+        """
         for ra_mode, add_mode in (
                 ('dhcpv6-stateful', 'dhcpv6-stateful'),
                 ('dhcpv6-stateful', None),
@@ -294,9 +312,12 @@
 
     @decorators.idempotent_id('51a5e97f-f02e-4e4e-9a17-a69811d300e3')
     def test_dhcp_stateful_fixedips(self):
-        # NOTE: With all options below, port shall be able to get
-        # requested IP from fixed IP range not depending on
-        # DHCP stateful (not SLAAC!) settings configured.
+        """Test creating port with fixed ip when setting stateful for subnets
+
+        NOTE: With all options below, port shall be able to get
+        requested IP from fixed IP range not depending on
+        DHCP stateful (not SLAAC!) settings configured.
+        """
         for ra_mode, add_mode in (
                 ('dhcpv6-stateful', 'dhcpv6-stateful'),
                 ('dhcpv6-stateful', None),
@@ -324,8 +345,11 @@
 
     @decorators.idempotent_id('98244d88-d990-4570-91d4-6b25d70d08af')
     def test_dhcp_stateful_fixedips_outrange(self):
-        # NOTE: When port gets IP address from fixed IP range it
-        # shall be checked if it's from subnets range.
+        """Test creating port with fixed ip that is not in the range
+
+        NOTE: When port gets IP address from fixed IP range it
+        shall be checked if it's from subnets range.
+        """
         kwargs = {'ipv6_ra_mode': 'dhcpv6-stateful',
                   'ipv6_address_mode': 'dhcpv6-stateful'}
         subnet = self.create_subnet(self.network, **kwargs)
@@ -342,8 +366,11 @@
 
     @decorators.idempotent_id('57b8302b-cba9-4fbb-8835-9168df029051')
     def test_dhcp_stateful_fixedips_duplicate(self):
-        # NOTE: When port gets IP address from fixed IP range it
-        # shall be checked if it's not duplicate.
+        """Test creating port with duplicate fixed ip
+
+        NOTE: When port gets IP address from fixed IP range it
+        shall be checked if it's not duplicate.
+        """
         kwargs = {'ipv6_ra_mode': 'dhcpv6-stateful',
                   'ipv6_address_mode': 'dhcpv6-stateful'}
         subnet = self.create_subnet(self.network, **kwargs)
@@ -376,8 +403,11 @@
 
     @decorators.idempotent_id('e98f65db-68f4-4330-9fea-abd8c5192d4d')
     def test_dhcp_stateful_router(self):
-        # NOTE: With all options below the router interface shall
-        # receive DHCPv6 IP address from allocation pool.
+        """Test creating router with dhcp stateful
+
+        NOTE: With all options below the router interface shall
+        receive DHCPv6 IP address from allocation pool.
+        """
         for ra_mode, add_mode in (
                 ('dhcpv6-stateful', 'dhcpv6-stateful'),
                 ('dhcpv6-stateful', None),
diff --git a/tempest/api/network/test_extra_dhcp_options.py b/tempest/api/network/test_extra_dhcp_options.py
index d363081..bc6418a 100644
--- a/tempest/api/network/test_extra_dhcp_options.py
+++ b/tempest/api/network/test_extra_dhcp_options.py
@@ -58,7 +58,7 @@
 
     @decorators.idempotent_id('d2c17063-3767-4a24-be4f-a23dbfa133c9')
     def test_create_list_port_with_extra_dhcp_options(self):
-        # Create a port with Extra DHCP Options
+        """Test creating a port with Extra DHCP Options and list those"""
         body = self.ports_client.create_port(
             network_id=self.network['id'],
             name=data_utils.rand_name(self.__class__.__name__),
@@ -76,7 +76,7 @@
 
     @decorators.idempotent_id('9a6aebf4-86ee-4f47-b07a-7f7232c55607')
     def test_update_show_port_with_extra_dhcp_options(self):
-        # Update port with extra dhcp options
+        """Test updating port with extra DHCP options and show that port"""
         name = data_utils.rand_name('new-port-name')
         self.ports_client.update_port(
             self.port['id'],
diff --git a/tempest/api/network/test_floating_ips_negative.py b/tempest/api/network/test_floating_ips_negative.py
index 1688c9d..80df5d6 100644
--- a/tempest/api/network/test_floating_ips_negative.py
+++ b/tempest/api/network/test_floating_ips_negative.py
@@ -58,6 +58,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('22996ea8-4a81-4b27-b6e1-fa5df92fa5e8')
     def test_create_floatingip_with_port_ext_net_unreachable(self):
+        """Creating floating ip when port's external network is unreachable"""
         self.assertRaises(
             lib_exc.NotFound, self.floating_ips_client.create_floatingip,
             floating_network_id=self.ext_net_id, port_id=self.port['id'],
@@ -67,6 +68,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('50b9aeb4-9f0b-48ee-aa31-fa955a48ff54')
     def test_create_floatingip_in_private_network(self):
+        """Test creating floating in private network"""
         self.assertRaises(lib_exc.BadRequest,
                           self.floating_ips_client.create_floatingip,
                           floating_network_id=self.network['id'],
@@ -77,6 +79,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('6b3b8797-6d43-4191-985c-c48b773eb429')
     def test_associate_floatingip_port_ext_net_unreachable(self):
+        """Associate floating ip to port with unreachable external network"""
         # Create floating ip
         body = self.floating_ips_client.create_floatingip(
             floating_network_id=self.ext_net_id)
diff --git a/tempest/api/network/test_networks.py b/tempest/api/network/test_networks.py
index eba1f6c..7646b63 100644
--- a/tempest/api/network/test_networks.py
+++ b/tempest/api/network/test_networks.py
@@ -29,6 +29,7 @@
 
 
 class BaseNetworkTestResources(base.BaseNetworkTest):
+    """Test networks"""
 
     @classmethod
     def resource_setup(cls):
@@ -158,6 +159,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('0e269138-0da6-4efc-a46d-578161e7b221')
     def test_create_update_delete_network_subnet(self):
+        """Verify creating, updating and deleting network subnet"""
         # Create a network
         network = self.create_network()
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
@@ -183,7 +185,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('2bf13842-c93f-4a69-83ed-717d2ec3b44e')
     def test_show_network(self):
-        # Verify the details of a network
+        """Verify the details of a network"""
         body = self.networks_client.show_network(self.network['id'])
         network = body['network']
         for key in ['id', 'name']:
@@ -191,7 +193,7 @@
 
     @decorators.idempotent_id('867819bb-c4b6-45f7-acf9-90edcf70aa5e')
     def test_show_network_fields(self):
-        # Verify specific fields of a network
+        """Verify specific fields of a network"""
         fields = ['id', 'name']
         if utils.is_extension_enabled('net-mtu', 'network'):
             fields.append('mtu')
@@ -207,7 +209,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('f7ffdeda-e200-4a7a-bcbe-05716e86bf43')
     def test_list_networks(self):
-        # Verify the network exists in the list of all networks
+        """Verify the network exists in the list of all networks"""
         body = self.networks_client.list_networks()
         networks = [network['id'] for network in body['networks']
                     if network['id'] == self.network['id']]
@@ -215,7 +217,7 @@
 
     @decorators.idempotent_id('6ae6d24f-9194-4869-9c85-c313cb20e080')
     def test_list_networks_fields(self):
-        # Verify specific fields of the networks
+        """Verify specific fields of the networks"""
         fields = ['id', 'name']
         if utils.is_extension_enabled('net-mtu', 'network'):
             fields.append('mtu')
@@ -228,7 +230,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('bd635d81-6030-4dd1-b3b9-31ba0cfdf6cc')
     def test_show_subnet(self):
-        # Verify the details of a subnet
+        """Verify the details of a subnet"""
         body = self.subnets_client.show_subnet(self.subnet['id'])
         subnet = body['subnet']
         self.assertNotEmpty(subnet, "Subnet returned has no fields")
@@ -238,7 +240,7 @@
 
     @decorators.idempotent_id('270fff0b-8bfc-411f-a184-1e8fd35286f0')
     def test_show_subnet_fields(self):
-        # Verify specific fields of a subnet
+        """Verify specific fields of a subnet"""
         fields = ['id', 'network_id']
         body = self.subnets_client.show_subnet(self.subnet['id'],
                                                fields=fields)
@@ -250,7 +252,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('db68ba48-f4ea-49e9-81d1-e367f6d0b20a')
     def test_list_subnets(self):
-        # Verify the subnet exists in the list of all subnets
+        """Verify the subnet exists in the list of all subnets"""
         body = self.subnets_client.list_subnets()
         subnets = [subnet['id'] for subnet in body['subnets']
                    if subnet['id'] == self.subnet['id']]
@@ -258,7 +260,7 @@
 
     @decorators.idempotent_id('842589e3-9663-46b0-85e4-7f01273b0412')
     def test_list_subnets_fields(self):
-        # Verify specific fields of subnets
+        """Verify specific fields of subnets"""
         fields = ['id', 'network_id']
         body = self.subnets_client.list_subnets(fields=fields)
         subnets = body['subnets']
@@ -268,6 +270,7 @@
 
     @decorators.idempotent_id('f04f61a9-b7f3-4194-90b2-9bcf660d1bfe')
     def test_delete_network_with_subnet(self):
+        """Verify deleting network with subnet"""
         # Creates a network
         network = self.create_network()
         net_id = network['id']
@@ -287,34 +290,41 @@
 
     @decorators.idempotent_id('d2d596e2-8e76-47a9-ac51-d4648009f4d3')
     def test_create_delete_subnet_without_gateway(self):
+        """Verify creating and deleting subnet without gateway"""
         self._create_verify_delete_subnet()
 
     @decorators.idempotent_id('9393b468-186d-496d-aa36-732348cd76e7')
     def test_create_delete_subnet_with_gw(self):
+        """Verify creating and deleting subnet with gateway"""
         self._create_verify_delete_subnet(
             **self.subnet_dict(['gateway']))
 
     @decorators.idempotent_id('bec949c4-3147-4ba6-af5f-cd2306118404')
     def test_create_delete_subnet_with_allocation_pools(self):
+        """Verify creating and deleting subnet with allocation pools"""
         self._create_verify_delete_subnet(
             **self.subnet_dict(['allocation_pools']))
 
     @decorators.idempotent_id('8217a149-0c6c-4cfb-93db-0486f707d13f')
     def test_create_delete_subnet_with_gw_and_allocation_pools(self):
+        """Verify create/delete subnet with gateway and allocation pools"""
         self._create_verify_delete_subnet(**self.subnet_dict(
             ['gateway', 'allocation_pools']))
 
     @decorators.idempotent_id('d830de0a-be47-468f-8f02-1fd996118289')
     def test_create_delete_subnet_with_host_routes_and_dns_nameservers(self):
+        """Verify create/delete subnet with host routes and name servers"""
         self._create_verify_delete_subnet(
             **self.subnet_dict(['host_routes', 'dns_nameservers']))
 
     @decorators.idempotent_id('94ce038d-ff0a-4a4c-a56b-09da3ca0b55d')
     def test_create_delete_subnet_with_dhcp_enabled(self):
+        """Verify create/delete subnet with dhcp enabled"""
         self._create_verify_delete_subnet(enable_dhcp=True)
 
     @decorators.idempotent_id('3d3852eb-3009-49ec-97ac-5ce83b73010a')
     def test_update_subnet_gw_dns_host_routes_dhcp(self):
+        """Verify updating subnet's gateway/nameserver/routes/dhcp"""
         network = self.create_network()
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                         self.networks_client.delete_network, network['id'])
@@ -349,6 +359,7 @@
 
     @decorators.idempotent_id('a4d9ec4c-0306-4111-a75c-db01a709030b')
     def test_create_delete_subnet_all_attributes(self):
+        """Verify create/delete subnet's all attributes"""
         self._create_verify_delete_subnet(
             enable_dhcp=True,
             **self.subnet_dict(['gateway', 'host_routes', 'dns_nameservers']))
@@ -359,6 +370,7 @@
     @testtools.skipUnless(CONF.network.public_network_id,
                           'The public_network_id option must be specified.')
     def test_external_network_visibility(self):
+        """Verify external network's visibility"""
         public_network_id = CONF.network.public_network_id
 
         # find external network matching public_network_id
@@ -394,6 +406,7 @@
     @utils.requires_ext(extension="standard-attr-description",
                         service="network")
     def test_create_update_network_description(self):
+        """Verify creating and updating network's description"""
         body = self.create_network(description='d1')
         self.assertEqual('d1', body['description'])
         net_id = body['id']
@@ -454,6 +467,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('d4f9024d-1e28-4fc1-a6b1-25dbc6fa11e2')
     def test_bulk_create_delete_network(self):
+        """Verify creating and deleting multiple networks in one request"""
         # Creates 2 networks in one request
         network_list = [{'name': data_utils.rand_name('network-')},
                         {'name': data_utils.rand_name('network-')}]
@@ -470,6 +484,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('8936533b-c0aa-4f29-8e53-6cc873aec489')
     def test_bulk_create_delete_subnet(self):
+        """Verify creating and deleting multiple subnets in one request"""
         networks = [self.create_network(), self.create_network()]
         # Creates 2 subnets in one request
         cidrs = [subnet_cidr
@@ -499,6 +514,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('48037ff2-e889-4c3b-b86a-8e3f34d2d060')
     def test_bulk_create_delete_port(self):
+        """Verify creating and deleting multiple ports in one request"""
         networks = [self.create_network(), self.create_network()]
         # Creates 2 ports in one request
         names = [data_utils.rand_name('port-') for i in range(len(networks))]
@@ -532,6 +548,7 @@
 
     @decorators.idempotent_id('e41a4888-65a6-418c-a095-f7c2ef4ad59a')
     def test_create_delete_subnet_with_gw(self):
+        """Verify creating and deleting subnet with gateway"""
         net = netaddr.IPNetwork(CONF.network.project_network_v6_cidr)
         gateway = str(netaddr.IPAddress(net.first + 2))
         network = self.create_network()
@@ -541,6 +558,7 @@
 
     @decorators.idempotent_id('ebb4fd95-524f-46af-83c1-0305b239338f')
     def test_create_delete_subnet_with_default_gw(self):
+        """Verify creating and deleting subnet without specified gateway"""
         net = netaddr.IPNetwork(CONF.network.project_network_v6_cidr)
         gateway_ip = str(netaddr.IPAddress(net.first + 1))
         network = self.create_network()
@@ -550,6 +568,12 @@
 
     @decorators.idempotent_id('a9653883-b2a4-469b-8c3c-4518430a7e55')
     def test_create_list_subnet_with_no_gw64_one_network(self):
+        """Verify subnets with and without gateway are in one network
+
+        First we create a network, then we create one ipv6 subnet with
+        gateway and one ipv4 subnet without gateway, the two subnets
+        should be in the same network
+        """
         network = self.create_network()
         ipv6_gateway = self.subnet_dict(['gateway'])['gateway']
         subnet1 = self.create_subnet(network,
@@ -589,6 +613,7 @@
 
     @decorators.idempotent_id('da40cd1b-a833-4354-9a85-cd9b8a3b74ca')
     def test_create_delete_subnet_with_v6_attributes_stateful(self):
+        """Test create/delete subnet with ipv6 attributes stateful"""
         self._create_verify_delete_subnet(
             gateway=self._subnet_data[self._ip_version]['gateway'],
             ipv6_ra_mode='dhcpv6-stateful',
@@ -596,12 +621,14 @@
 
     @decorators.idempotent_id('176b030f-a923-4040-a755-9dc94329e60c')
     def test_create_delete_subnet_with_v6_attributes_slaac(self):
+        """Test create/delete subnet with ipv6 attributes slaac"""
         self._create_verify_delete_subnet(
             ipv6_ra_mode='slaac',
             ipv6_address_mode='slaac')
 
     @decorators.idempotent_id('7d410310-8c86-4902-adf9-865d08e31adb')
     def test_create_delete_subnet_with_v6_attributes_stateless(self):
+        """Test create/delete subnet with ipv6 attributes stateless"""
         self._create_verify_delete_subnet(
             ipv6_ra_mode='dhcpv6-stateless',
             ipv6_address_mode='dhcpv6-stateless')
diff --git a/tempest/api/network/test_networks_negative.py b/tempest/api/network/test_networks_negative.py
index 3af67dd..0525484 100644
--- a/tempest/api/network/test_networks_negative.py
+++ b/tempest/api/network/test_networks_negative.py
@@ -21,10 +21,12 @@
 
 
 class NetworksNegativeTestJSON(base.BaseNetworkTest):
+    """Negative tests of network"""
 
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('9293e937-824d-42d2-8d5b-e985ea67002a')
     def test_show_non_existent_network(self):
+        """Test showing non existent network"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound, self.networks_client.show_network,
                           non_exist_id)
@@ -32,6 +34,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('d746b40c-5e09-4043-99f7-cba1be8b70df')
     def test_show_non_existent_subnet(self):
+        """Test showing non existent subnet"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound, self.subnets_client.show_subnet,
                           non_exist_id)
@@ -39,6 +42,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('a954861d-cbfd-44e8-b0a9-7fab111f235d')
     def test_show_non_existent_port(self):
+        """Test showing non existent port"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound, self.ports_client.show_port,
                           non_exist_id)
@@ -46,6 +50,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('98bfe4e3-574e-4012-8b17-b2647063de87')
     def test_update_non_existent_network(self):
+        """Test updating non existent network"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(
             lib_exc.NotFound, self.networks_client.update_network,
@@ -54,6 +59,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('03795047-4a94-4120-a0a1-bd376e36fd4e')
     def test_delete_non_existent_network(self):
+        """Test deleting non existent network"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound,
                           self.networks_client.delete_network,
@@ -62,6 +68,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('1cc47884-ac52-4415-a31c-e7ce5474a868')
     def test_update_non_existent_subnet(self):
+        """Test updating non existent subnet"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound, self.subnets_client.update_subnet,
                           non_exist_id, name='new_name')
@@ -69,6 +76,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('a176c859-99fb-42ec-a208-8a85b552a239')
     def test_delete_non_existent_subnet(self):
+        """Test deleting non existent subnet"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound,
                           self.subnets_client.delete_subnet, non_exist_id)
@@ -76,6 +84,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('13d3b106-47e6-4b9b-8d53-dae947f092fe')
     def test_create_port_on_non_existent_network(self):
+        """Test creating port on non existent network"""
         non_exist_net_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound,
                           self.ports_client.create_port,
@@ -85,6 +94,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('cf8eef21-4351-4f53-adcd-cc5cb1e76b92')
     def test_update_non_existent_port(self):
+        """Test updating non existent port"""
         non_exist_port_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound, self.ports_client.update_port,
                           non_exist_port_id, name='new_name')
@@ -92,6 +102,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('49ec2bbd-ac2e-46fd-8054-798e679ff894')
     def test_delete_non_existent_port(self):
+        """Test deleting non existent port"""
         non_exist_port_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound,
                           self.ports_client.delete_port, non_exist_port_id)
diff --git a/tempest/api/network/test_security_groups.py b/tempest/api/network/test_security_groups.py
index ef19122..d75acfc 100644
--- a/tempest/api/network/test_security_groups.py
+++ b/tempest/api/network/test_security_groups.py
@@ -21,6 +21,7 @@
 
 
 class SecGroupTest(base.BaseSecGroupTest):
+    """Test security groups"""
 
     @classmethod
     def skip_checks(cls):
@@ -67,7 +68,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('e30abd17-fef9-4739-8617-dc26da88e686')
     def test_list_security_groups(self):
-        # Verify the security group belonging to project exist in list
+        """Verify that default security group exist"""
         body = self.security_groups_client.list_security_groups()
         security_groups = body['security_groups']
         found = None
@@ -80,6 +81,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('bfd128e5-3c92-44b6-9d66-7fe29d22c802')
     def test_create_list_update_show_delete_security_group(self):
+        """Verify create/list/update/show/delete of security group"""
         group_create_body, _ = self._create_security_group()
 
         # List security groups and verify if created group is there in response
@@ -111,6 +113,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('cfb99e0e-7410-4a3d-8a0c-959a63ee77e9')
     def test_create_show_delete_security_group_rule(self):
+        """Test create/show/delete of security group rule"""
         group_create_body, _ = self._create_security_group()
 
         # Create rules for each protocol
@@ -191,7 +194,7 @@
 
     @decorators.idempotent_id('c2ed2deb-7a0c-44d8-8b4c-a5825b5c310b')
     def test_create_security_group_rule_with_remote_group_id(self):
-        # Verify creating security group rule with remote_group_id works
+        """Verify creating security group rule with remote_group_id works"""
         sg1_body, _ = self._create_security_group()
         sg2_body, _ = self._create_security_group()
 
@@ -209,7 +212,7 @@
 
     @decorators.idempotent_id('16459776-5da2-4634-bce4-4b55ee3ec188')
     def test_create_security_group_rule_with_remote_ip_prefix(self):
-        # Verify creating security group rule with remote_ip_prefix works
+        """Verify creating security group rule with remote_ip_prefix works"""
         sg1_body, _ = self._create_security_group()
 
         sg_id = sg1_body['security_group']['id']
@@ -226,9 +229,10 @@
 
     @decorators.idempotent_id('0a307599-6655-4220-bebc-fd70c64f2290')
     def test_create_security_group_rule_with_protocol_integer_value(self):
-        # Verify creating security group rule with the
-        # protocol as integer value
-        # arguments : "protocol": 17
+        """Verify creating security group rule with the integer protocol value
+
+        arguments : "protocol": 17
+        """
         group_create_body, _ = self._create_security_group()
         direction = 'ingress'
         protocol = 17
diff --git a/tempest/api/network/test_security_groups_negative.py b/tempest/api/network/test_security_groups_negative.py
index d054865..beaeb20 100644
--- a/tempest/api/network/test_security_groups_negative.py
+++ b/tempest/api/network/test_security_groups_negative.py
@@ -24,6 +24,7 @@
 
 
 class NegativeSecGroupTest(base.BaseSecGroupTest):
+    """Negative tests of security groups"""
 
     @classmethod
     def skip_checks(cls):
@@ -35,6 +36,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('424fd5c3-9ddc-486a-b45f-39bf0c820fc6')
     def test_show_non_existent_security_group(self):
+        """Test showing non existent security group"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(
             lib_exc.NotFound, self.security_groups_client.show_security_group,
@@ -43,6 +45,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('4c094c09-000b-4e41-8100-9617600c02a6')
     def test_show_non_existent_security_group_rule(self):
+        """Test showing non existent security group rule"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(
             lib_exc.NotFound,
@@ -52,6 +55,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('1f1bb89d-5664-4956-9fcd-83ee0fa603df')
     def test_delete_non_existent_security_group(self):
+        """Test deleting non existent security group"""
         non_exist_id = data_utils.rand_uuid()
         self.assertRaises(lib_exc.NotFound,
                           self.security_groups_client.delete_security_group,
@@ -61,6 +65,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('981bdc22-ce48-41ed-900a-73148b583958')
     def test_create_security_group_rule_with_bad_protocol(self):
+        """Test creating security group rule with bad protocol"""
         group_create_body, _ = self._create_security_group()
 
         # Create rule with bad protocol name
@@ -74,6 +79,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('5f8daf69-3c5f-4aaa-88c9-db1d66f68679')
     def test_create_security_group_rule_with_bad_remote_ip_prefix(self):
+        """Test creating security group rule with bad remote ip prefix"""
         group_create_body, _ = self._create_security_group()
 
         # Create rule with bad remote_ip_prefix
@@ -89,6 +95,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('4bf786fd-2f02-443c-9716-5b98e159a49a')
     def test_create_security_group_rule_with_non_existent_remote_groupid(self):
+        """Creating security group rule with non existent remote group id"""
         group_create_body, _ = self._create_security_group()
         non_exist_id = data_utils.rand_uuid()
 
@@ -105,6 +112,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('b5c4b247-6b02-435b-b088-d10d45650881')
     def test_create_security_group_rule_with_remote_ip_and_group(self):
+        """Test creating security group rule with remote ip and group"""
         sg1_body, _ = self._create_security_group()
         sg2_body, _ = self._create_security_group()
 
@@ -121,6 +129,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('5666968c-fff3-40d6-9efc-df1c8bd01abb')
     def test_create_security_group_rule_with_bad_ethertype(self):
+        """Test creating security group rule with bad bad ethertype"""
         group_create_body, _ = self._create_security_group()
 
         # Create rule with bad ethertype
@@ -134,6 +143,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('0d9c7791-f2ad-4e2f-ac73-abf2373b0d2d')
     def test_create_security_group_rule_with_invalid_ports(self):
+        """Test creating security group rule with invalid ports"""
         group_create_body, _ = self._create_security_group()
 
         # Create rule for tcp protocol with invalid ports
@@ -168,7 +178,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('2323061e-9fbf-4eb0-b547-7e8fafc90849')
     def test_create_additional_default_security_group_fails(self):
-        # Create security group named 'default', it should be failed.
+        """Test creating additional default security group
+
+        Create security group named 'default', it should be failed.
+        """
         name = 'default'
         self.assertRaises(lib_exc.Conflict,
                           self.security_groups_client.create_security_group,
@@ -177,7 +190,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('966e2b96-023a-11e7-a9e4-fa163e4fa634')
     def test_create_security_group_update_name_default(self):
-        # Update security group name to 'default', it should be failed.
+        """Test updating security group's name to default
+
+        Update security group name to 'default', it should be failed.
+        """
         group_create_body, _ = self._create_security_group()
         self.assertRaises(lib_exc.Conflict,
                           self.security_groups_client.update_security_group,
@@ -187,7 +203,10 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('8fde898f-ce88-493b-adc9-4e4692879fc5')
     def test_create_duplicate_security_group_rule_fails(self):
-        # Create duplicate security group rule, it should fail.
+        """Test creating duplicate security group rule
+
+        Create duplicate security group rule, it should fail.
+        """
         body, _ = self._create_security_group()
 
         min_port = 66
@@ -213,7 +232,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('be308db6-a7cf-4d5c-9baf-71bafd73f35e')
     def test_create_security_group_rule_with_non_existent_security_group(self):
-        # Create security group rules with not existing security group.
+        """Creating security group rules with not existing security group"""
         non_existent_sg = data_utils.rand_uuid()
         self.assertRaises(
             lib_exc.NotFound,
@@ -228,6 +247,7 @@
     @decorators.attr(type=['negative'])
     @decorators.idempotent_id('7607439c-af73-499e-bf64-f687fd12a842')
     def test_create_security_group_rule_wrong_ip_prefix_version(self):
+        """Test creating security group rule with wrong ip prefix version"""
         group_create_body, _ = self._create_security_group()
 
         # Create rule with bad remote_ip_prefix