)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"cb6c2fca4440604b5f1a75ea173a0bdf3e62128a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test for subnet gateway IPv4 and IPv6"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Four tests were adding for testing neutron subnets with and"},{"line_number":10,"context_line":"without gateway defined as a subnet attribute (gateway_ip)"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I7862da41e62a47c274f170d29ceeeaeb89b2c976"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"AAAAVn%2F%2FvzU%3D","line":9,"updated":"2014-03-04 10:31:46.000000000","message":"nit: adding-\u003eadded","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"c31396d21a3dea891d9b9e23017468b2f51692cb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add test for subnet gateway IPv4 and IPv6"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Four tests were adding for testing neutron subnets with and"},{"line_number":10,"context_line":"without gateway defined as a subnet attribute (gateway_ip)"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I7862da41e62a47c274f170d29ceeeaeb89b2c976"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"AAAAWH%2F%2Fl6o%3D","line":9,"in_reply_to":"AAAAVn%2F%2FvzU%3D","updated":"2014-03-15 16:46:46.000000000","message":"Done","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"}],"tempest/api/network/base.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"935446e3a710df20f031229653430f1f6a540764","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":158,"context_line":"        for subnet_cidr in cidr.subnet(mask_bits):"},{"line_number":159,"context_line":"            if not gateway:"},{"line_number":160,"context_line":"                gateway \u003d str(netaddr.IPAddress(subnet_cidr) + 1)"},{"line_number":161,"context_line":"            try:"},{"line_number":162,"context_line":"                resp, body \u003d cls.client.create_subnet("},{"line_number":163,"context_line":"                    network_id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad9bd40_c1711979","line":160,"updated":"2014-04-30 08:57:37.000000000","message":"looks to me this should be set from: CONF.network.tenant_network_gateway/CONF.network.tenant_network_v6_gateway","commit_id":"da03ea0d69116f2c1a99b0aed99ef67a76e3db5f"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"2a1be8cc2afcc1cf0d716892c2772f5bee442685","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":158,"context_line":"        for subnet_cidr in cidr.subnet(mask_bits):"},{"line_number":159,"context_line":"            if not gateway:"},{"line_number":160,"context_line":"                gateway \u003d str(netaddr.IPAddress(subnet_cidr) + 1)"},{"line_number":161,"context_line":"            try:"},{"line_number":162,"context_line":"                resp, body \u003d cls.client.create_subnet("},{"line_number":163,"context_line":"                    network_id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad9bd40_21645cb8","line":160,"in_reply_to":"9ad9bd40_6974a2fd","updated":"2014-05-01 18:32:27.000000000","message":"I do agree with Henry.. Let\u0027s keep this one for one. It seems that Tempest folks are fine with it.","commit_id":"da03ea0d69116f2c1a99b0aed99ef67a76e3db5f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"fcd4722425bf991dc62817643fb1fb1196c6a033","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":158,"context_line":"        for subnet_cidr in cidr.subnet(mask_bits):"},{"line_number":159,"context_line":"            if not gateway:"},{"line_number":160,"context_line":"                gateway \u003d str(netaddr.IPAddress(subnet_cidr) + 1)"},{"line_number":161,"context_line":"            try:"},{"line_number":162,"context_line":"                resp, body \u003d cls.client.create_subnet("},{"line_number":163,"context_line":"                    network_id\u003dnetwork[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad9bd40_6974a2fd","line":160,"in_reply_to":"9ad9bd40_c1711979","updated":"2014-04-30 20:58:59.000000000","message":"Possibly, but I am beginning to feel there are too many config options already. Can we go with this method until we run into any shortcomings it might have?","commit_id":"da03ea0d69116f2c1a99b0aed99ef67a76e3db5f"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"935446e3a710df20f031229653430f1f6a540764","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                break"},{"line_number":168,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":169,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":170,"context_line":"                gateway \u003d None"},{"line_number":171,"context_line":"                if not is_overlapping_cidr:"},{"line_number":172,"context_line":"                    raise"},{"line_number":173,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad9bd40_4137c9b0","line":170,"updated":"2014-04-30 08:57:37.000000000","message":"nit: unneeded initialization.","commit_id":"da03ea0d69116f2c1a99b0aed99ef67a76e3db5f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"fcd4722425bf991dc62817643fb1fb1196c6a033","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                break"},{"line_number":168,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":169,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":170,"context_line":"                gateway \u003d None"},{"line_number":171,"context_line":"                if not is_overlapping_cidr:"},{"line_number":172,"context_line":"                    raise"},{"line_number":173,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad9bd40_8931e60d","line":170,"in_reply_to":"9ad9bd40_4137c9b0","updated":"2014-04-30 20:58:59.000000000","message":"Hmm, I think you may have found a bug here.\n\nWe need to distinguish between gateway passed to this method (which could be None) and the gateway used in each iteration of this loop. If the gateway is specified in the call, then we should be trying that gateway on each subnet_cidr. I think.","commit_id":"da03ea0d69116f2c1a99b0aed99ef67a76e3db5f"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"2a1be8cc2afcc1cf0d716892c2772f5bee442685","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                break"},{"line_number":168,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":169,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":170,"context_line":"                gateway \u003d None"},{"line_number":171,"context_line":"                if not is_overlapping_cidr:"},{"line_number":172,"context_line":"                    raise"},{"line_number":173,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9ad9bd40_7c4b672b","line":170,"in_reply_to":"9ad9bd40_8931e60d","updated":"2014-05-01 18:32:27.000000000","message":"It seems that some of the router tests will fail without the gateway \u003d None\nYou can tale now that it is not an initialization, it is basically cleaning up the gateway whenever a overlapping IP is happening.\nI will add a note.","commit_id":"da03ea0d69116f2c1a99b0aed99ef67a76e3db5f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"12390fe40778adfd5e181d44f28a88cd9b330e68","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":169,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":170,"context_line":"                # Unset gateway value if there is an overlapping subnet"},{"line_number":171,"context_line":"                gateway \u003d None"},{"line_number":172,"context_line":"                if not is_overlapping_cidr:"},{"line_number":173,"context_line":"                    raise"},{"line_number":174,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"9ad9bd40_07892826","line":171,"updated":"2014-05-01 19:28:56.000000000","message":"So when the caller specifies a gateway, but it overlaps, then this method goes off and silently finds another gateway to use. This does not affect the current set of API tests, but it is something that should be fixed at some point. I think we should file a bug for it.","commit_id":"6a9ac349830ce5fe113948f0442bfd14187a935f"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"0643c6ac7c3330738fc20476dafde2bfa42bfeaa","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":169,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":170,"context_line":"                # Unset gateway value if there is an overlapping subnet"},{"line_number":171,"context_line":"                gateway \u003d None"},{"line_number":172,"context_line":"                if not is_overlapping_cidr:"},{"line_number":173,"context_line":"                    raise"},{"line_number":174,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7adec928_7fed0b25","line":171,"in_reply_to":"7adec928_7f96f995","updated":"2014-05-09 18:38:23.000000000","message":"Filed bug 1318013.","commit_id":"6a9ac349830ce5fe113948f0442bfd14187a935f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"fc647b4d61bdcaf08234c532b213a63f8e85d23d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":169,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":170,"context_line":"                # Unset gateway value if there is an overlapping subnet"},{"line_number":171,"context_line":"                gateway \u003d None"},{"line_number":172,"context_line":"                if not is_overlapping_cidr:"},{"line_number":173,"context_line":"                    raise"},{"line_number":174,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":30,"id":"7adec928_7f96f995","line":171,"in_reply_to":"9ad9bd40_07892826","updated":"2014-05-09 04:53:23.000000000","message":"Yes, please file a bug.","commit_id":"6a9ac349830ce5fe113948f0442bfd14187a935f"}],"tempest/api/network/test_networks.py":[{"author":{"_account_id":7930,"name":"jun xie","email":"easonxie160@163.com","username":"jeffreycoho"},"change_message_id":"72fa657d7f0e19aa94a4a87f21a80cb64fc38ddd","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":191,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":192,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":193,"context_line":"        gateway \u003d \u002710.10.1.1\u0027"},{"line_number":194,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":195,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":196,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FIuE%3D","line":193,"updated":"2014-01-17 03:55:40.000000000","message":"seems the tenant_network_cidr defaults to 10.100.0.0/16, did u intend u test the case when the gateway is not within the range of the cidr?  seems that no matter it is within the cidr range or not, it is set to be the gateway of the subnet, is it the right/expected behavior?","commit_id":"c352c6bc0e494ee7f6a39cdfc00b7d453d9ee7da"},{"author":{"_account_id":7930,"name":"jun xie","email":"easonxie160@163.com","username":"jeffreycoho"},"change_message_id":"4a985541333ed8c2c1b6e72f57ce4fdbffb2aca9","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":191,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":192,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":193,"context_line":"        gateway \u003d \u002710.10.1.1\u0027"},{"line_number":194,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":195,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":196,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FH9s%3D","line":193,"in_reply_to":"AAAAUH%2F%2FIao%3D","updated":"2014-01-17 07:29:03.000000000","message":"then do u think it\u0027s necessary to  test both?  IMHO, the one within the range of cidr is needed at least","commit_id":"c352c6bc0e494ee7f6a39cdfc00b7d453d9ee7da"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"6613bc10bb1e75dda449fdda92fcefcf99f3d5d5","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":191,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":192,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":193,"context_line":"        gateway \u003d \u002710.10.1.1\u0027"},{"line_number":194,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":195,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":196,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FIao%3D","line":193,"in_reply_to":"AAAAUH%2F%2FIuE%3D","updated":"2014-01-17 05:37:42.000000000","message":"Neutron allows to have both gateway cases for the gateway_ip. In this case I am test outside but it should not really matter","commit_id":"c352c6bc0e494ee7f6a39cdfc00b7d453d9ee7da"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8bf8cf7f157d55a94d3a16b90e03d807b5f7057c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        resp, body \u003d self.client.delete_subnet(subnet_id)"},{"line_number":214,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":215,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"},{"line_number":216,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":219,"context_line":"    def test_create_delete_subnet_without_gw(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FEQQ%3D","line":216,"updated":"2014-01-17 19:16:48.000000000","message":"We are encouraging the use of addCleanup() to delete resources.","commit_id":"8acfda368e3df5eaa24c76679c4b16a2cbe962eb"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"b621b01fb54663b0910d135e0512a730ff3f912c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        resp, body \u003d self.client.delete_subnet(subnet_id)"},{"line_number":214,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":215,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"},{"line_number":216,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":219,"context_line":"    def test_create_delete_subnet_without_gw(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FDu4%3D","line":216,"in_reply_to":"AAAAUH%2F%2FEQQ%3D","updated":"2014-01-27 06:11:39.000000000","message":"Very good idea! I will add a new patch","commit_id":"8acfda368e3df5eaa24c76679c4b16a2cbe962eb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8bf8cf7f157d55a94d3a16b90e03d807b5f7057c","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        resp, body \u003d self.client.delete_subnet(subnet_id)"},{"line_number":246,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":247,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"},{"line_number":248,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":251,"context_line":"    def test_create_update_delete_port(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FEQI%3D","line":248,"updated":"2014-01-17 19:16:48.000000000","message":"Ditto.","commit_id":"8acfda368e3df5eaa24c76679c4b16a2cbe962eb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8bf8cf7f157d55a94d3a16b90e03d807b5f7057c","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        resp, body \u003d self.client.delete_subnet(subnet_id)"},{"line_number":495,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":496,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"},{"line_number":497,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":500,"context_line":"    def test_create_delete_subnet_without_gw(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FEP8%3D","line":497,"updated":"2014-01-17 19:16:48.000000000","message":"Ditto.","commit_id":"8acfda368e3df5eaa24c76679c4b16a2cbe962eb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"8bf8cf7f157d55a94d3a16b90e03d807b5f7057c","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        resp, body \u003d self.client.delete_subnet(subnet_id)"},{"line_number":527,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":528,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"},{"line_number":529,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"class NetworksIpV6TestXML(NetworksIpV6TestJSON):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FEP4%3D","line":529,"updated":"2014-01-17 19:16:48.000000000","message":"Ditto.","commit_id":"8acfda368e3df5eaa24c76679c4b16a2cbe962eb"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"287a71b66679c3a17c6391fc23f6070c29edc441","unresolved":false,"context_lines":[{"line_number":485,"context_line":"    _tenant_network_mask_bits \u003d CONF.network.tenant_network_v6_mask_bits"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":488,"context_line":"    def test_create_delete_subnet_with_gw(self):"},{"line_number":489,"context_line":"        # Creates a network"},{"line_number":490,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":491,"context_line":"        resp, body \u003d self.client.create_network(name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2BUrM%3D","line":488,"updated":"2014-01-28 01:04:35.000000000","message":"This is a lot of repeated code with a few tweaks for ipv6 instead of ipv4. I suggest creating a private method (not starting with test_ so that the test runner doesn\u0027t discover it) in NetworksTestJSON that takes the gateway as an argument. Then call it from NetworksTestJSON and NetworksIpV6TestJSON.","commit_id":"824fa53b501b79304aa0a85d6b7983ede5bacbd6"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"841230d1fc5ef1945e491356e82ceac1d200627d","unresolved":false,"context_lines":[{"line_number":485,"context_line":"    _tenant_network_mask_bits \u003d CONF.network.tenant_network_v6_mask_bits"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":488,"context_line":"    def test_create_delete_subnet_with_gw(self):"},{"line_number":489,"context_line":"        # Creates a network"},{"line_number":490,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":491,"context_line":"        resp, body \u003d self.client.create_network(name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2BTHU%3D","line":488,"in_reply_to":"AAAAUH%2F%2BUrM%3D","updated":"2014-01-28 08:56:48.000000000","message":"Done","commit_id":"824fa53b501b79304aa0a85d6b7983ede5bacbd6"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"287a71b66679c3a17c6391fc23f6070c29edc441","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":521,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":522,"context_line":"        # Creates a network"},{"line_number":523,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":524,"context_line":"        resp, body \u003d self.client.create_network(name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2BUrI%3D","line":521,"updated":"2014-01-28 01:04:35.000000000","message":"Ditto.","commit_id":"824fa53b501b79304aa0a85d6b7983ede5bacbd6"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"841230d1fc5ef1945e491356e82ceac1d200627d","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":521,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":522,"context_line":"        # Creates a network"},{"line_number":523,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":524,"context_line":"        resp, body \u003d self.client.create_network(name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2BTHQ%3D","line":521,"in_reply_to":"AAAAUH%2F%2BUrI%3D","updated":"2014-01-28 08:56:48.000000000","message":"Done","commit_id":"824fa53b501b79304aa0a85d6b7983ede5bacbd6"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"d203dff7363caf2ad5592ff0e31d7f9ab9f4999c","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # Creates a network"},{"line_number":89,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":90,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":91,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":92,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":93,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":94,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BRnc%3D","line":91,"updated":"2014-01-28 13:55:57.000000000","message":"addCleanup() for this network should be done here.","commit_id":"939ec90610dce1a2d3e4ba39d7fb9ed815aca970"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"2a142361ccf7c46bae66f38b5bc4d1f90095e48f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # Creates a network"},{"line_number":89,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":90,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":91,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":92,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":93,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":94,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BP%2Fk%3D","line":91,"in_reply_to":"AAAAUH%2F%2BRnc%3D","updated":"2014-01-28 17:42:40.000000000","message":"will do but just after I got the net_id and subnet_id  :-)","commit_id":"939ec90610dce1a2d3e4ba39d7fb9ed815aca970"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"d203dff7363caf2ad5592ff0e31d7f9ab9f4999c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    break"},{"line_number":117,"context_line":"                except exceptions.BadRequest as e:"},{"line_number":118,"context_line":"                    raise"},{"line_number":119,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":120,"context_line":"        subnet \u003d body[\u0027subnet\u0027]"},{"line_number":121,"context_line":"        subnet_id \u003d subnet[\u0027id\u0027]"},{"line_number":122,"context_line":"        #Verifies Subnet GW in IPv4"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2BRm8%3D","line":119,"updated":"2014-01-28 13:55:57.000000000","message":"addCleanup() for the subnet should be done here.","commit_id":"939ec90610dce1a2d3e4ba39d7fb9ed815aca970"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"c7fd1f133b9313747006359abd32209a7d5532af","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        resp, body \u003d self.client.list_networks()"},{"line_number":72,"context_line":"        networks_list \u003d list()"},{"line_number":73,"context_line":"        for network in body[\u0027networks\u0027]:"},{"line_number":74,"context_line":"            networks_list.append(network[\u0027id\u0027])"},{"line_number":75,"context_line":"        self.assertNotIn(created_network, networks_list)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _delete_subnet(self, created_subnet):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2BPSU%3D","line":74,"updated":"2014-01-28 19:48:25.000000000","message":"Wouldn\u0027t it be more compact to replace the above 3 lines with:\n\nnetworks_list \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]","commit_id":"026c5e0dd0ca56bda02d83dbabc42e84295c938e"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"47bcb50077c08a8ef76fb409b5e282137cea8a4e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        resp, body \u003d self.client.list_networks()"},{"line_number":72,"context_line":"        networks_list \u003d list()"},{"line_number":73,"context_line":"        for network in body[\u0027networks\u0027]:"},{"line_number":74,"context_line":"            networks_list.append(network[\u0027id\u0027])"},{"line_number":75,"context_line":"        self.assertNotIn(created_network, networks_list)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _delete_subnet(self, created_subnet):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2BJFE%3D","line":74,"in_reply_to":"AAAAUH%2F%2BPSU%3D","updated":"2014-01-29 19:25:47.000000000","message":"good suggestion. It is done for the next patch!","commit_id":"026c5e0dd0ca56bda02d83dbabc42e84295c938e"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"c7fd1f133b9313747006359abd32209a7d5532af","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        resp, body \u003d self.client.list_subnets()"},{"line_number":82,"context_line":"        subnets_list \u003d list()"},{"line_number":83,"context_line":"        for subnet in body[\u0027subnets\u0027]:"},{"line_number":84,"context_line":"            subnets_list.append(subnet[\u0027id\u0027])"},{"line_number":85,"context_line":"        self.assertNotIn(created_subnet, subnets_list)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _create_subnet_gw(self, gateway):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2BPQg%3D","line":84,"updated":"2014-01-28 19:48:25.000000000","message":"Same comment as above in line 74","commit_id":"026c5e0dd0ca56bda02d83dbabc42e84295c938e"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"47bcb50077c08a8ef76fb409b5e282137cea8a4e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        resp, body \u003d self.client.list_subnets()"},{"line_number":82,"context_line":"        subnets_list \u003d list()"},{"line_number":83,"context_line":"        for subnet in body[\u0027subnets\u0027]:"},{"line_number":84,"context_line":"            subnets_list.append(subnet[\u0027id\u0027])"},{"line_number":85,"context_line":"        self.assertNotIn(created_subnet, subnets_list)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def _create_subnet_gw(self, gateway):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2BJFA%3D","line":84,"in_reply_to":"AAAAUH%2F%2BPQg%3D","updated":"2014-01-29 19:25:47.000000000","message":"Done","commit_id":"026c5e0dd0ca56bda02d83dbabc42e84295c938e"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"c7fd1f133b9313747006359abd32209a7d5532af","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":94,"context_line":"        # Delete network"},{"line_number":95,"context_line":"        self.addCleanup(self._delete_network, net_id)"},{"line_number":96,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":97,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":98,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":99,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2BPQQ%3D","line":96,"updated":"2014-01-28 19:48:25.000000000","message":"This is a duplicate of line 91. Needs to be removed","commit_id":"026c5e0dd0ca56bda02d83dbabc42e84295c938e"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"47bcb50077c08a8ef76fb409b5e282137cea8a4e","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":94,"context_line":"        # Delete network"},{"line_number":95,"context_line":"        self.addCleanup(self._delete_network, net_id)"},{"line_number":96,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":97,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":98,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":99,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2BJE8%3D","line":96,"in_reply_to":"AAAAUH%2F%2BPQQ%3D","updated":"2014-01-29 19:25:47.000000000","message":"Done","commit_id":"026c5e0dd0ca56bda02d83dbabc42e84295c938e"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"efcdeb7b5a18cacb05838342816d9150c5001344","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        subnets_list \u003d [subnet[\u0027id\u0027] for subnet in body[\u0027subnets\u0027]]"},{"line_number":81,"context_line":"        self.assertNotIn(created_subnet, subnets_list)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _create_subnet_gw(self, gateway):"},{"line_number":84,"context_line":"        # Creates a network"},{"line_number":85,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":86,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BCdo%3D","line":83,"updated":"2014-01-30 20:45:11.000000000","message":"def _create_subnet_gw(self, gateway\u003dNone)","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"8c4c6290d3e6f3968c9d8cb78b84527a30f360cd","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        subnets_list \u003d [subnet[\u0027id\u0027] for subnet in body[\u0027subnets\u0027]]"},{"line_number":81,"context_line":"        self.assertNotIn(created_subnet, subnets_list)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _create_subnet_gw(self, gateway):"},{"line_number":84,"context_line":"        # Creates a network"},{"line_number":85,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":86,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BAxE%3D","line":83,"in_reply_to":"AAAAUH%2F%2BCdo%3D","updated":"2014-01-31 02:56:56.000000000","message":"Done","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"efcdeb7b5a18cacb05838342816d9150c5001344","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        # Delete network"},{"line_number":91,"context_line":"        self.addCleanup(self._delete_network, net_id)"},{"line_number":92,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":93,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":94,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"},{"line_number":95,"context_line":"        if gateway is None:"},{"line_number":96,"context_line":"            gateway \u003d str(netaddr.IPAddress(cidr) + 1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BCQA%3D","line":93,"updated":"2014-01-30 20:45:11.000000000","message":"Replace lines 93 to 118 with:\n\ngateway, subnet \u003d self._find_cidr_and_create_subnet(net_id, gateway(net_id, gateway)\n\nand the new method declaration is:\n\ndef _find_cidr_and_create_subnet(net_id, gateway\u003dNone):\n    cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)\n    mask_bits \u003d self._tenant_network_mask_bits\n    kwargs \u003d {\u0027network_id\u0027: net_id, \u0027ip_version\u0027: self._ip_version}\n    if gateway:\n        kwargs[\u0027gateway_ip\u0027] \u003d gateway\n    body \u003d None\n    failure \u003d None\n    for subnet_cidr in cidr.subnet(mask_bits):\n        try:\n            kwargs[\u0027cidr\u0027] \u003d str(subnet_cidr)\n            resp, body \u003d self.client.create_subnet(**kwargs)\n            gateway \u003d str(subnet_cidr + 1)\n            break\n        except exceptions.BadRequest as e:\n            is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)\n            if not is_overlapping_cidr:\n                raise e\n            failure \u003d e\n    \n    if not body and failure:\n        raise failure\n    self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])\n    return gateway, body[\u0027subnet\u0027]","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"8c4c6290d3e6f3968c9d8cb78b84527a30f360cd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        # Delete network"},{"line_number":91,"context_line":"        self.addCleanup(self._delete_network, net_id)"},{"line_number":92,"context_line":"        # Find a cidr that is not in use yet and create a subnet with it"},{"line_number":93,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":94,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"},{"line_number":95,"context_line":"        if gateway is None:"},{"line_number":96,"context_line":"            gateway \u003d str(netaddr.IPAddress(cidr) + 1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BAw8%3D","line":93,"in_reply_to":"AAAAUH%2F%2BCQA%3D","updated":"2014-01-31 02:56:56.000000000","message":"I like the proposal, I will implemented it.","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"efcdeb7b5a18cacb05838342816d9150c5001344","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":94,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"},{"line_number":95,"context_line":"        if gateway is None:"},{"line_number":96,"context_line":"            gateway \u003d str(netaddr.IPAddress(cidr) + 1)"},{"line_number":97,"context_line":"            for subnet_cidr in cidr.subnet(mask_bits):"},{"line_number":98,"context_line":"                try:"},{"line_number":99,"context_line":"                    resp, body \u003d self.client.create_subnet("}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BB9E%3D","line":96,"updated":"2014-01-30 20:45:11.000000000","message":"Shouldn\u0027t this be inside the loop? If the first cidr range you try is not available, I think gateway is going to be wrong","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"8c4c6290d3e6f3968c9d8cb78b84527a30f360cd","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        cidr \u003d netaddr.IPNetwork(self._tenant_network_cidr)"},{"line_number":94,"context_line":"        mask_bits \u003d self._tenant_network_mask_bits"},{"line_number":95,"context_line":"        if gateway is None:"},{"line_number":96,"context_line":"            gateway \u003d str(netaddr.IPAddress(cidr) + 1)"},{"line_number":97,"context_line":"            for subnet_cidr in cidr.subnet(mask_bits):"},{"line_number":98,"context_line":"                try:"},{"line_number":99,"context_line":"                    resp, body \u003d self.client.create_subnet("}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BAXM%3D","line":96,"in_reply_to":"AAAAUH%2F%2BB9E%3D","updated":"2014-01-31 02:56:56.000000000","message":"Done","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"efcdeb7b5a18cacb05838342816d9150c5001344","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        subnet_id \u003d subnet[\u0027id\u0027]"},{"line_number":120,"context_line":"        # Delete subnet"},{"line_number":121,"context_line":"        self.addCleanup(self._delete_subnet, subnet_id)"},{"line_number":122,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":123,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":124,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], gateway)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BB80%3D","line":122,"updated":"2014-01-30 20:45:11.000000000","message":"This line is duplicated. Please remove","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"8c4c6290d3e6f3968c9d8cb78b84527a30f360cd","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        subnet_id \u003d subnet[\u0027id\u0027]"},{"line_number":120,"context_line":"        # Delete subnet"},{"line_number":121,"context_line":"        self.addCleanup(self._delete_subnet, subnet_id)"},{"line_number":122,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":123,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":124,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], gateway)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BAw4%3D","line":122,"in_reply_to":"AAAAUH%2F%2BB80%3D","updated":"2014-01-31 02:56:56.000000000","message":"Done","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"efcdeb7b5a18cacb05838342816d9150c5001344","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":250,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":251,"context_line":"        gateway \u003d None"},{"line_number":252,"context_line":"        self._create_subnet_gw(gateway)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BCdY%3D","line":251,"updated":"2014-01-30 20:45:11.000000000","message":"Delete this line","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"8c4c6290d3e6f3968c9d8cb78b84527a30f360cd","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":250,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":251,"context_line":"        gateway \u003d None"},{"line_number":252,"context_line":"        self._create_subnet_gw(gateway)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BAw0%3D","line":251,"in_reply_to":"AAAAUH%2F%2BCdY%3D","updated":"2014-01-31 02:56:56.000000000","message":"Done","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"efcdeb7b5a18cacb05838342816d9150c5001344","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":250,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":251,"context_line":"        gateway \u003d None"},{"line_number":252,"context_line":"        self._create_subnet_gw(gateway)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":255,"context_line":"    def test_create_update_delete_port(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BCdA%3D","line":252,"updated":"2014-01-30 20:45:11.000000000","message":"self._create_subnet_gw()","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"8c4c6290d3e6f3968c9d8cb78b84527a30f360cd","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":250,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":251,"context_line":"        gateway \u003d None"},{"line_number":252,"context_line":"        self._create_subnet_gw(gateway)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":255,"context_line":"    def test_create_update_delete_port(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BAWw%3D","line":252,"in_reply_to":"AAAAUH%2F%2BCdA%3D","updated":"2014-01-31 02:56:56.000000000","message":"Done","commit_id":"09597f9f9dd2a87e90c9aa5be2580c0f1491b924"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"28d9d76846105bc589d51108b6200fb20e622062","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        gateway, subnet \u003d self._find_cidr_and_create_subnet(net_id, gateway)"},{"line_number":100,"context_line":"        # Delete subnet"},{"line_number":101,"context_line":"        self.addCleanup(self._delete_subnet, subnet[\u0027id\u0027])"},{"line_number":102,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":103,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], gateway)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _find_cidr_and_create_subnet(self, net_id, gateway\u003dNone):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BALM%3D","line":102,"updated":"2014-02-01 15:50:15.000000000","message":"Minor nit: this will be ipv4 or ipv6, depending where it is called from.","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"c31396d21a3dea891d9b9e23017468b2f51692cb","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        gateway, subnet \u003d self._find_cidr_and_create_subnet(net_id, gateway)"},{"line_number":100,"context_line":"        # Delete subnet"},{"line_number":101,"context_line":"        self.addCleanup(self._delete_subnet, subnet[\u0027id\u0027])"},{"line_number":102,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":103,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], gateway)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _find_cidr_and_create_subnet(self, net_id, gateway\u003dNone):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2FmEM%3D","line":102,"in_reply_to":"AAAAUH%2F%2BALM%3D","updated":"2014-03-15 16:46:46.000000000","message":"Done","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e18fa92098aa133961320033bdb132c234567a43","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    gateway \u003d str(netaddr.IPAddress(cidr) + 1)"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":121,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":122,"context_line":"                if not is_overlapping_cidr:"},{"line_number":123,"context_line":"                    raise e"},{"line_number":124,"context_line":"                failure \u003d e"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVX%2F%2FqVs%3D","line":121,"updated":"2014-03-01 16:55:10.000000000","message":"I\u0027m not sure why this needs to be stored in a variable, it\u0027s not like it\u0027s being reused.","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"c31396d21a3dea891d9b9e23017468b2f51692cb","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    gateway \u003d str(netaddr.IPAddress(cidr) + 1)"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":121,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":122,"context_line":"                if not is_overlapping_cidr:"},{"line_number":123,"context_line":"                    raise e"},{"line_number":124,"context_line":"                failure \u003d e"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2Fl%2FA%3D","line":121,"in_reply_to":"AAAAVX%2F%2FqVs%3D","updated":"2014-03-15 16:46:46.000000000","message":"without the variable pep8 complains, we need it","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e18fa92098aa133961320033bdb132c234567a43","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":121,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":122,"context_line":"                if not is_overlapping_cidr:"},{"line_number":123,"context_line":"                    raise e"},{"line_number":124,"context_line":"                failure \u003d e"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if not body and failure:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVX%2F%2FqVk%3D","line":123,"updated":"2014-03-01 16:55:10.000000000","message":"You can just do raise here because you\u0027re in the except block","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"c31396d21a3dea891d9b9e23017468b2f51692cb","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            except exceptions.BadRequest as e:"},{"line_number":121,"context_line":"                is_overlapping_cidr \u003d \u0027overlaps with another subnet\u0027 in str(e)"},{"line_number":122,"context_line":"                if not is_overlapping_cidr:"},{"line_number":123,"context_line":"                    raise e"},{"line_number":124,"context_line":"                failure \u003d e"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if not body and failure:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2Fl%2B8%3D","line":123,"in_reply_to":"AAAAVX%2F%2FqVk%3D","updated":"2014-03-15 16:46:46.000000000","message":"Done","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e18fa92098aa133961320033bdb132c234567a43","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    raise e"},{"line_number":124,"context_line":"                failure \u003d e"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if not body and failure:"},{"line_number":127,"context_line":"            raise failure"},{"line_number":128,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":129,"context_line":"        return gateway, body[\u0027subnet\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAVX%2F%2FqUs%3D","line":126,"updated":"2014-03-01 16:55:10.000000000","message":"This is a little weird to me, why not just make this an else. The flow here is a little weird, using a for else is what you\u0027ve basically done but with a bit more work.\n\nAlso, when you use an else here you can raise a specific exception about not having an available CIDR to make the subnet. The generic exception about having an overlap I think will get confusing, because you\u0027ve already exhausted the list of options.","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"c31396d21a3dea891d9b9e23017468b2f51692cb","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                    raise e"},{"line_number":124,"context_line":"                failure \u003d e"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if not body and failure:"},{"line_number":127,"context_line":"            raise failure"},{"line_number":128,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":129,"context_line":"        return gateway, body[\u0027subnet\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F%2Fl%2FI%3D","line":126,"in_reply_to":"AAAAVX%2F%2FqUs%3D","updated":"2014-03-15 16:46:46.000000000","message":"Matthew, you are totally right!\nThat is the consequence of-reusing old code without proper analysis. I am making those changes in my next patch","commit_id":"1721bbcb492b52aff42d6b62ae748df2f4bf3826"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"0ab50f68de562e401684408425aab45b7c760500","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":103,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], gateway)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _find_cidr_and_create_subnet(self, net_id, gateway\u003dNone):"},{"line_number":106,"context_line":"        if self._ip_version \u003d\u003d 4:"},{"line_number":107,"context_line":"            cidr \u003d netaddr.IPNetwork(CONF.network.tenant_network_cidr)"},{"line_number":108,"context_line":"            mask_bits \u003d CONF.network.tenant_network_mask_bits"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAWH%2F%2FlgY%3D","line":105,"updated":"2014-03-16 02:47:30.000000000","message":"You don\u0027t need this method anymore, see create_subnet() in base.py. The only difference is the optional gateway param. Just add that to the base method.","commit_id":"26ab18901c58ff239a8807205614774821112df5"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"5cd0f2414e5a5b60478c52021e91cccc18588b7e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":103,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], gateway)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _find_cidr_and_create_subnet(self, net_id, gateway\u003dNone):"},{"line_number":106,"context_line":"        if self._ip_version \u003d\u003d 4:"},{"line_number":107,"context_line":"            cidr \u003d netaddr.IPNetwork(CONF.network.tenant_network_cidr)"},{"line_number":108,"context_line":"            mask_bits \u003d CONF.network.tenant_network_mask_bits"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAWH%2F%2Fjco%3D","line":105,"in_reply_to":"AAAAWH%2F%2FlgY%3D","updated":"2014-03-17 04:21:07.000000000","message":"sounds good, will use that one instead.","commit_id":"26ab18901c58ff239a8807205614774821112df5"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"3f7f073f707c0e22c1634a0074e81b4315ba8526","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def _delete_network(self, network):"},{"line_number":75,"context_line":"        # Delete network"},{"line_number":76,"context_line":"        resp, body \u003d self.client.delete_network(network[\u0027id\u0027])"},{"line_number":77,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _delete_subnet(self, subnet):"},{"line_number":80,"context_line":"        # Delete subnet"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAWH%2F%2BmCk%3D","line":77,"updated":"2014-03-25 17:27:05.000000000","message":"missing the networks.pop() like you did for subnets","commit_id":"31fadcf602d7cc0f7ca74e611695ddce639fb1a6"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"44678dd2f23909ae40d3b1988097adc1ffdfb3ab","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def _delete_network(self, network):"},{"line_number":75,"context_line":"        # Delete network"},{"line_number":76,"context_line":"        resp, body \u003d self.client.delete_network(network[\u0027id\u0027])"},{"line_number":77,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _delete_subnet(self, subnet):"},{"line_number":80,"context_line":"        # Delete subnet"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAW3%2F%2FO74%3D","line":77,"in_reply_to":"AAAAWH%2F%2BmCk%3D","updated":"2014-04-15 21:49:40.000000000","message":"I will completely remove this functions, are not needed anymore","commit_id":"31fadcf602d7cc0f7ca74e611695ddce639fb1a6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d88475c2b988ac7c3ae784430819539222283441","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":421,"context_line":"        subnet \u003d self.create_subnet(network, gateway)"},{"line_number":422,"context_line":"        self._delete_subnet(subnet)"},{"line_number":423,"context_line":"        self._delete_network(network)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":426,"context_line":"    def test_create_delete_subnet_without_gw(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAWH%2F%2BmAY%3D","line":423,"updated":"2014-03-25 17:15:07.000000000","message":"Could you use self._delete_networks instead of self._delete_networks here ? Both function does the same thing, and it would avoid code duplicate.","commit_id":"31fadcf602d7cc0f7ca74e611695ddce639fb1a6"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"44678dd2f23909ae40d3b1988097adc1ffdfb3ab","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":421,"context_line":"        subnet \u003d self.create_subnet(network, gateway)"},{"line_number":422,"context_line":"        self._delete_subnet(subnet)"},{"line_number":423,"context_line":"        self._delete_network(network)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":426,"context_line":"    def test_create_delete_subnet_without_gw(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAW3%2F%2FO7c%3D","line":423,"in_reply_to":"AAAAWH%2F%2BhYw%3D","updated":"2014-04-15 21:49:40.000000000","message":"I have completely removed those delete functions and using the native API for deleting networks","commit_id":"31fadcf602d7cc0f7ca74e611695ddce639fb1a6"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"ca2e4e55cbc6e8d2d5194f80c21c9f5b52a7d8c2","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":421,"context_line":"        subnet \u003d self.create_subnet(network, gateway)"},{"line_number":422,"context_line":"        self._delete_subnet(subnet)"},{"line_number":423,"context_line":"        self._delete_network(network)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":426,"context_line":"    def test_create_delete_subnet_without_gw(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAWH%2F%2BhYw%3D","line":423,"in_reply_to":"AAAAWH%2F%2BmAY%3D","updated":"2014-03-26 07:43:33.000000000","message":"I agree, you can use _delete_networks from line 294","commit_id":"31fadcf602d7cc0f7ca74e611695ddce639fb1a6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d88475c2b988ac7c3ae784430819539222283441","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":430,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":431,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":432,"context_line":"        self._delete_subnet(subnet)"},{"line_number":433,"context_line":"        self._delete_network(network)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAWH%2F%2BmAA%3D","line":432,"updated":"2014-03-25 17:15:07.000000000","message":"Same here.","commit_id":"31fadcf602d7cc0f7ca74e611695ddce639fb1a6"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"44678dd2f23909ae40d3b1988097adc1ffdfb3ab","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"},{"line_number":430,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":431,"context_line":"        subnet \u003d self.create_subnet(network)"},{"line_number":432,"context_line":"        self._delete_subnet(subnet)"},{"line_number":433,"context_line":"        self._delete_network(network)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAW3%2F%2FO7k%3D","line":432,"in_reply_to":"AAAAWH%2F%2BmAA%3D","updated":"2014-04-15 21:49:40.000000000","message":"removing these functions","commit_id":"31fadcf602d7cc0f7ca74e611695ddce639fb1a6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"6a3bf8c1d6e8c9399632ad3284a16f291c53efad","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":252,"context_line":"    def test_create_delete_subnet_with_gw(self):"},{"line_number":253,"context_line":"        gateway \u003d \u002710.100.0.1\u0027"},{"line_number":254,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":255,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":256,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXH%2F%2FM4Q%3D","line":253,"updated":"2014-04-23 11:43:10.000000000","message":"You define a variable here but you are not using it line 261. \n\nI\u0027d rather to have gateway set explicitely to 10.100.0.13 (for instance) because usually (without specifying anything) you would end up with the gateway being 10.100.0.1.","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"010b90c3a2d2256553ca003d8aae91bfecbb2645","unresolved":false,"context_lines":[{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":252,"context_line":"    def test_create_delete_subnet_with_gw(self):"},{"line_number":253,"context_line":"        gateway \u003d \u002710.100.0.1\u0027"},{"line_number":254,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":255,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":256,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXX%2F%2F%2FK4%3D","line":253,"in_reply_to":"AAAAXH%2F%2FM4Q%3D","updated":"2014-04-24 20:33:06.000000000","message":"good catch, I will make the suggested change.","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"86d096212a5dd7eaef638cd8add1b2b748347d2d","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":258,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":259,"context_line":"        subnet \u003d self.create_subnet(network, gateway)"},{"line_number":260,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":261,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], \u002710.100.0.1\u0027)"},{"line_number":262,"context_line":"        # Delete network and subnet"},{"line_number":263,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXH%2F%2FekQ%3D","line":260,"updated":"2014-04-21 13:28:53.000000000","message":"Nit: Space after #, same as on line 275, 445, and 460.","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"010b90c3a2d2256553ca003d8aae91bfecbb2645","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        network \u003d body[\u0027network\u0027]"},{"line_number":258,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":259,"context_line":"        subnet \u003d self.create_subnet(network, gateway)"},{"line_number":260,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":261,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], \u002710.100.0.1\u0027)"},{"line_number":262,"context_line":"        # Delete network and subnet"},{"line_number":263,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXX%2F%2F%2FKw%3D","line":260,"in_reply_to":"AAAAXH%2F%2FekQ%3D","updated":"2014-04-24 20:33:06.000000000","message":"Done","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"6a3bf8c1d6e8c9399632ad3284a16f291c53efad","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":259,"context_line":"        subnet \u003d self.create_subnet(network, gateway)"},{"line_number":260,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":261,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], \u002710.100.0.1\u0027)"},{"line_number":262,"context_line":"        # Delete network and subnet"},{"line_number":263,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"},{"line_number":264,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXH%2F%2FM4I%3D","line":261,"updated":"2014-04-23 11:43:10.000000000","message":"s/\u002710.100.0.1\u0027/gateway/","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"010b90c3a2d2256553ca003d8aae91bfecbb2645","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        net_id \u003d network[\u0027id\u0027]"},{"line_number":259,"context_line":"        subnet \u003d self.create_subnet(network, gateway)"},{"line_number":260,"context_line":"        #Verifies Subnet GW in IPv4"},{"line_number":261,"context_line":"        self.assertEqual(subnet[\u0027gateway_ip\u0027], \u002710.100.0.1\u0027)"},{"line_number":262,"context_line":"        # Delete network and subnet"},{"line_number":263,"context_line":"        resp, body \u003d self.client.delete_network(net_id)"},{"line_number":264,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXX%2F%2F%2FKs%3D","line":261,"in_reply_to":"AAAAXH%2F%2FM4I%3D","updated":"2014-04-24 20:33:06.000000000","message":"Done","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"6a3bf8c1d6e8c9399632ad3284a16f291c53efad","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        self.subnets.pop()"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":268,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":269,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":270,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":271,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXH%2F%2FMzA%3D","line":268,"updated":"2014-04-23 11:43:10.000000000","message":"Maybe you could merge the one and only check of this test with \u0027test_create_update_delete_network_subnet\u0027 ? I mean maybe there\u0027s no need to create a seperate test just to check that an absence of parameter lead to a correct result.","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"010b90c3a2d2256553ca003d8aae91bfecbb2645","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        self.subnets.pop()"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":268,"context_line":"    def test_create_delete_subnet_without_gw(self):"},{"line_number":269,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":270,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":271,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXX%2F%2F%2FE8%3D","line":268,"in_reply_to":"AAAAXH%2F%2FMzA%3D","updated":"2014-04-24 20:33:06.000000000","message":"I am following the best practices from the tempest team on having separate tests, in previous patched this new test was fine for the tempest team.","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"6a3bf8c1d6e8c9399632ad3284a16f291c53efad","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"class NetworksIpV6TestJSON(NetworksTestJSON):"},{"line_number":426,"context_line":"    _ip_version \u003d 6"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    @classmethod"},{"line_number":429,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXH%2F%2FMy8%3D","line":426,"updated":"2014-04-23 11:43:10.000000000","message":"Comments about IPv4 tests also stand for IPv6 tests.","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"010b90c3a2d2256553ca003d8aae91bfecbb2645","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"class NetworksIpV6TestJSON(NetworksTestJSON):"},{"line_number":426,"context_line":"    _ip_version \u003d 6"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"    @classmethod"},{"line_number":429,"context_line":"    def setUpClass(cls):"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAXX%2F%2F%2FKA%3D","line":426,"in_reply_to":"AAAAXH%2F%2FMy8%3D","updated":"2014-04-24 20:33:06.000000000","message":"Done","commit_id":"663f9718f0842dfe47153c55dd7a31875c39bd85"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"9328229e14842021a3af90a494be5be7a6ea97a4","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":405,"context_line":"    def test_create_delete_subnet_with_gw(self):"},{"line_number":406,"context_line":"        gateway \u003d \u00272003::1\u0027"},{"line_number":407,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":408,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":409,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"AAAAXX%2F%2FwRI%3D","line":406,"updated":"2014-04-28 08:26:41.000000000","message":"As far as I understand subnet will always have gateway 2003::1. May be, it will be better to use other gateway, for example, 2003::2.","commit_id":"e43eb0c99c01139006a7adcccb33553c35240755"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"ac83ffe57ebbdda8980f13104cc3cfb23bac4aa3","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":405,"context_line":"    def test_create_delete_subnet_with_gw(self):"},{"line_number":406,"context_line":"        gateway \u003d \u00272003::1\u0027"},{"line_number":407,"context_line":"        name \u003d data_utils.rand_name(\u0027network-\u0027)"},{"line_number":408,"context_line":"        resp, body \u003d self.client.create_network(name\u003dname)"},{"line_number":409,"context_line":"        self.assertEqual(\u0027201\u0027, resp[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":28,"id":"bad4c104_ecda89e8","line":406,"in_reply_to":"AAAAXX%2F%2FwRI%3D","updated":"2014-04-29 17:07:59.000000000","message":"Done","commit_id":"e43eb0c99c01139006a7adcccb33553c35240755"}]}
