)]}'
{"tempest/scenario/lbaas_manager.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6f48c9347603ed6e5f0532c43aa477368461a66","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                                              net_common.DeletableVip),"},{"line_number":163,"context_line":"                             self.vips[0][\u0027id\u0027],"},{"line_number":164,"context_line":"                             expected_status\u003d\u0027ACTIVE\u0027)"},{"line_number":165,"context_line":"        self._assign_floating_ip_to_vip(self.vips[0])"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"class NeutronRetriever(object):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BXUU%3D","line":165,"updated":"2014-01-27 17:49:25.000000000","message":"All of the above _create_ and _assign_ methods should just be added to the  tempest.scenario.manager.NetworkScenarioTest class.","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6f48c9347603ed6e5f0532c43aa477368461a66","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def get(self, thing_id):"},{"line_number":175,"context_line":"        obj \u003d self.network_client.get(self.path % thing_id)"},{"line_number":176,"context_line":"        return self.resource(client\u003dself.network_client, **obj.values()[0])"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BXTc%3D","line":176,"updated":"2014-01-27 17:49:25.000000000","message":"I don\u0027t care for this class. It is relying on undocumented and non-public-API behaviour in the neutronclient. Why not just add methods to NetworkScenarioTest for the _get_$resource, like all the other Neutron API resources?","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"80d9d50797bf451bd37c1578e49fd919bb5df6be","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2BMw4%3D","line":2,"updated":"2014-01-29 05:50:05.000000000","message":"Please remove this vim header.","commit_id":"853472c4ad68438ddc9475418118729c30ab29dc"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"d25b2e642a4dd5a1e7102fc4decfee5058d38db1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F9%2FHM%3D","line":2,"in_reply_to":"AAAAUH%2F%2BLOY%3D","updated":"2014-01-31 10:27:57.000000000","message":"Done","commit_id":"853472c4ad68438ddc9475418118729c30ab29dc"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"51111e9e811b618f6310c5c600f6cf6eb641110b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2BLOY%3D","line":2,"in_reply_to":"AAAAUH%2F%2BMw4%3D","updated":"2014-01-29 12:40:02.000000000","message":"Will fix it","commit_id":"853472c4ad68438ddc9475418118729c30ab29dc"}],"tempest/scenario/manager.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5ddc305177f5e1dd00daae4b395922e0ee566b12","unresolved":false,"context_lines":[{"line_number":392,"context_line":"            except AttributeError:"},{"line_number":393,"context_line":"                # NOTE (eezhova): this is needed to allow this function work"},{"line_number":394,"context_line":"                # with neutron objects which are represented as dictionaries."},{"line_number":395,"context_line":"                new_status \u003d thing.itervalues().next()[\u0027status\u0027]"},{"line_number":396,"context_line":"            # Some components are reporting error status in lower case"},{"line_number":397,"context_line":"            # so case sensitive comparisons can really mess things"},{"line_number":398,"context_line":"            # up."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAT3%2F%2FsJQ%3D","line":395,"updated":"2014-01-03 12:48:12.000000000","message":"wait, why are neutron objects providing attributes here? I\u0027m -2 on any special casing for neutron objects here. This is horribly obtuse.","commit_id":"4ad6be9e9f56359b4ce11825e44e1d99e8c130df"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"698aeaf8e13d88349cbf4f10a56ff8f4146d2166","unresolved":false,"context_lines":[{"line_number":392,"context_line":"            except AttributeError:"},{"line_number":393,"context_line":"                # NOTE (eezhova): this is needed to allow this function work"},{"line_number":394,"context_line":"                # with neutron objects which are represented as dictionaries."},{"line_number":395,"context_line":"                new_status \u003d thing.itervalues().next()[\u0027status\u0027]"},{"line_number":396,"context_line":"            # Some components are reporting error status in lower case"},{"line_number":397,"context_line":"            # so case sensitive comparisons can really mess things"},{"line_number":398,"context_line":"            # up."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Fw%2BE%3D","line":395,"in_reply_to":"AAAAT3%2F%2FsJQ%3D","updated":"2014-01-08 18:29:09.000000000","message":"I agree. \nSomehow the \u0027thing\u0027 here should return \u0027DeletableVip\u0027 which is a AttributeDict wrapper allowing field access translated to dict access.","commit_id":"4ad6be9e9f56359b4ce11825e44e1d99e8c130df"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6f48c9347603ed6e5f0532c43aa477368461a66","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        return ports[0][\u0027id\u0027]"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"    def _create_floating_ip(self, thing, external_network_id,"},{"line_number":670,"context_line":"                            port_filters\u003dNone):"},{"line_number":671,"context_line":"        if port_filters is None:"},{"line_number":672,"context_line":"            port_id \u003d self._get_server_port_id(thing)"},{"line_number":673,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BXSY%3D","line":670,"updated":"2014-01-27 17:49:25.000000000","message":"Please add a quick code comment indicating what \"thing\" can be... (server and LB instance, as I understand it?). Remember that code is read many more times than written, and making a change such as above, without any code comments indicating why the need for the change will result in contributors getting confused in the future.","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6f48c9347603ed6e5f0532c43aa477368461a66","unresolved":false,"context_lines":[{"line_number":761,"context_line":"                                      **resp[\u0027vip\u0027])"},{"line_number":762,"context_line":"        self.assertEqual(vip[\u0027name\u0027], name)"},{"line_number":763,"context_line":"        self.set_resource(name, vip)"},{"line_number":764,"context_line":"        return vip"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"    def _check_vm_connectivity(self, ip_address,"},{"line_number":767,"context_line":"                               username\u003dNone,"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BXSI%3D","line":764,"updated":"2014-01-27 17:49:25.000000000","message":"++. The above is exactly what I expected to see -- not the lbaas_manager.py file :)","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"584091aa7a56bf30e7c5ad642d083699b301098b","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                    raise"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"            new_status \u003d thing.status"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"            # Some components are reporting error status in lower case"},{"line_number":392,"context_line":"            # so case sensitive comparisons can really mess things"},{"line_number":393,"context_line":"            # up."}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAUH%2F95yE%3D","side":"PARENT","line":390,"updated":"2014-02-02 01:52:20.000000000","message":"Is the deletion of these lines intentional?\nI feel this deletion is not so good.","commit_id":"29269a641e2211892b4387c9467eeb2042f4fe05"}],"tempest/scenario/neutron_lbaas/lbaas_manager.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"df19fe2ec488fb599b9ac8611fe39149c9283e7b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                break"},{"line_number":67,"context_line":"        self.assertTrue(self.servers)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _create_pools(self):"},{"line_number":70,"context_line":"        \"\"\"Create a pool with ROUND_ROBIN algorithm.\"\"\""},{"line_number":71,"context_line":"        name \u003d data_utils.rand_name(\u0027pool-\u0027)"},{"line_number":72,"context_line":"        subnets \u003d self.network_client.list_subnets()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPKA%3D","line":69,"updated":"2013-11-28 14:00:20.000000000","message":"why plural if only one pool is created? Looks a bit confusing","commit_id":"29660d1a48a931e27afff9ceef3ed026942a88d0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"df19fe2ec488fb599b9ac8611fe39149c9283e7b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                self.members.extend([member1, member2])"},{"line_number":97,"context_line":"        self.assertTrue(self.members)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _create_vips(self):"},{"line_number":100,"context_line":"        \"\"\"Create a VIP.\"\"\""},{"line_number":101,"context_line":"        name \u003d data_utils.rand_name(\u0027vip-\u0027)"},{"line_number":102,"context_line":"        subnet_id \u003d self.subnets[0][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPJg%3D","line":99,"updated":"2013-11-28 14:00:20.000000000","message":"ditto","commit_id":"29660d1a48a931e27afff9ceef3ed026942a88d0"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"63abd62818db5f3390c189d4e122a86c5d3f612c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                server \u003d self.create_server(name\u003dname,"},{"line_number":59,"context_line":"                                            create_kwargs\u003dcreate_kwargs)"},{"line_number":60,"context_line":"                self.servers[server] \u003d keypair"},{"line_number":61,"context_line":"                #self.servers.append(server)"},{"line_number":62,"context_line":"                break"},{"line_number":63,"context_line":"        self.assertTrue(self.servers)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F8tbE%3D","line":61,"updated":"2013-12-22 06:29:53.000000000","message":"This comment out line should be removed.","commit_id":"d0a9aae259194903c3e695eadf2a67feabe3e19d"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"d400ff4d63bf6d5168edc950424b6151c42cb293","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                server \u003d self.create_server(name\u003dname,"},{"line_number":59,"context_line":"                                            create_kwargs\u003dcreate_kwargs)"},{"line_number":60,"context_line":"                self.servers[server] \u003d keypair"},{"line_number":61,"context_line":"                #self.servers.append(server)"},{"line_number":62,"context_line":"                break"},{"line_number":63,"context_line":"        self.assertTrue(self.servers)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F8m68%3D","line":61,"in_reply_to":"AAAATn%2F8tbE%3D","updated":"2013-12-24 11:43:54.000000000","message":"Done","commit_id":"d0a9aae259194903c3e695eadf2a67feabe3e19d"},{"author":{"_account_id":9461,"name":"Vijay Kumar Venkatachalam","email":"vijay.venkatachalam@citrix.com","username":"vijayvenkatachalam"},"change_message_id":"33a16a7f6e7e2f954ba5a9a08dee49371d04f668","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def _create_server(self):"},{"line_number":43,"context_line":"        tenant_id \u003d self.tenant_id"},{"line_number":44,"context_line":"        name \u003d data_utils.rand_name(\"smoke_server-\")"},{"line_number":45,"context_line":"        keypair \u003d self.create_keypair(name\u003d\u0027keypair-%s\u0027 % name)"},{"line_number":46,"context_line":"        security_groups \u003d [self.security_groups[tenant_id].name]"},{"line_number":47,"context_line":"        nets \u003d self.network_client.list_networks()"},{"line_number":48,"context_line":"        for net in nets[\u0027networks\u0027]:"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAT3%2F%2F2E0%3D","line":45,"updated":"2013-12-30 09:40:28.000000000","message":"Any special ssh-config, like privatekey path \u0026 public key file, needs to be done in tempest.conf? The scenario test is failing at ssh login to the server. The servers are UP and I am able to ping them from using \"ip netns exec dhcp...\".","commit_id":"4ad6be9e9f56359b4ce11825e44e1d99e8c130df"}],"tempest/scenario/neutron_lbaas/test_load_balancer_basic.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"df19fe2ec488fb599b9ac8611fe39149c9283e7b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import time"},{"line_number":19,"context_line":"import urllib"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from tempest.common import ssh"},{"line_number":23,"context_line":"from tempest.scenario.neutron_lbaas import lbaas_manager"},{"line_number":24,"context_line":"from tempest.test import attr"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPJA%3D","line":21,"updated":"2013-11-28 14:00:20.000000000","message":"one blank line is enough","commit_id":"29660d1a48a931e27afff9ceef3ed026942a88d0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"df19fe2ec488fb599b9ac8611fe39149c9283e7b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        self._create_load_balancer(self.networks[0][\u0027name\u0027],"},{"line_number":61,"context_line":"                                   self.servers[0].id)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _check_load_balancing(self):"},{"line_number":64,"context_line":"        ssh_login \u003d self.config.compute.image_ssh_user"},{"line_number":65,"context_line":"        private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":66,"context_line":"        network_name \u003d self.networks[0][\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPG4%3D","line":63,"updated":"2013-11-28 14:00:20.000000000","message":"some comments in this function describing steps would be helpful","commit_id":"29660d1a48a931e27afff9ceef3ed026942a88d0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"df19fe2ec488fb599b9ac8611fe39149c9283e7b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                  \"| sudo nc -l -p %(port)s ; done \u0026\" \\"},{"line_number":74,"context_line":"                  % {\u0027port\u0027: self.port1}"},{"line_number":75,"context_line":"        ssh_client.exec_command(command)"},{"line_number":76,"context_line":"        command \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\n\\nserver2\u0027 \" \\"},{"line_number":77,"context_line":"                  \"| sudo nc -l -p %(port)s ; done \u0026\" \\"},{"line_number":78,"context_line":"                  % {\u0027port\u0027: self.port2}"},{"line_number":79,"context_line":"        ssh_client.exec_command(command)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPG0%3D","line":76,"updated":"2013-11-28 14:00:20.000000000","message":"consider making this a constant","commit_id":"29660d1a48a931e27afff9ceef3ed026942a88d0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"df19fe2ec488fb599b9ac8611fe39149c9283e7b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        resp \u003d []"},{"line_number":84,"context_line":"        for count in range(10):"},{"line_number":85,"context_line":"            resp.append(urllib.urlopen(\"http://{0}/\".format(vip_ip)).read())"},{"line_number":86,"context_line":"        self.assertTrue(set([\"server1\\n\", \"server2\\n\"]).issubset(set(resp)))"},{"line_number":87,"context_line":"        self.assertTrue(resp.count(\"server1\\n\") \u003d\u003d 5 and"},{"line_number":88,"context_line":"                        resp.count(\"server2\\n\") \u003d\u003d 5)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPFw%3D","line":86,"updated":"2013-11-28 14:00:20.000000000","message":"why issubset? shouldn\u0027t they be equal? Also no need for [] in set([..])","commit_id":"29660d1a48a931e27afff9ceef3ed026942a88d0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"df19fe2ec488fb599b9ac8611fe39149c9283e7b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        for count in range(10):"},{"line_number":85,"context_line":"            resp.append(urllib.urlopen(\"http://{0}/\".format(vip_ip)).read())"},{"line_number":86,"context_line":"        self.assertTrue(set([\"server1\\n\", \"server2\\n\"]).issubset(set(resp)))"},{"line_number":87,"context_line":"        self.assertTrue(resp.count(\"server1\\n\") \u003d\u003d 5 and"},{"line_number":88,"context_line":"                        resp.count(\"server2\\n\") \u003d\u003d 5)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BPFU%3D","line":87,"updated":"2013-11-28 14:00:20.000000000","message":"consider\n self.assertEqual(5, resp.count(\"server1\\n\"))\n self.assertEqual(5, resp.count(\"server2\\n\"))","commit_id":"29660d1a48a931e27afff9ceef3ed026942a88d0"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"22f12c0ff4cc1f552ca4c727919264164a6cdd97","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        resp \u003d []"},{"line_number":91,"context_line":"        for count in range(10):"},{"line_number":92,"context_line":"            resp.append(urllib.urlopen(\"http://{0}/\".format(vip_ip)).read())"},{"line_number":93,"context_line":"        self.assertTrue({\"server1\\n\", \"server2\\n\"} \u003d\u003d set(resp))"},{"line_number":94,"context_line":"        self.assertEqual(5, resp.count(\"server1\\n\"))"},{"line_number":95,"context_line":"        self.assertEqual(5, resp.count(\"server2\\n\"))"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BIlU%3D","line":93,"updated":"2013-12-02 07:06:49.000000000","message":"nit: self.assertEqual() is more suitable here","commit_id":"94731ce27729170141a9a1d9d6a9d0cad519ce25"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"f6c9d6281dfda008fc2a06743e73f197af39ec5f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        resp \u003d []"},{"line_number":91,"context_line":"        for count in range(10):"},{"line_number":92,"context_line":"            resp.append(urllib.urlopen(\"http://{0}/\".format(vip_ip)).read())"},{"line_number":93,"context_line":"        self.assertTrue({\"server1\\n\", \"server2\\n\"} \u003d\u003d set(resp))"},{"line_number":94,"context_line":"        self.assertEqual(5, resp.count(\"server1\\n\"))"},{"line_number":95,"context_line":"        self.assertEqual(5, resp.count(\"server2\\n\"))"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BAhg%3D","line":93,"in_reply_to":"AAAATn%2F%2BIlU%3D","updated":"2013-12-03 14:58:54.000000000","message":"Done","commit_id":"94731ce27729170141a9a1d9d6a9d0cad519ce25"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"63abd62818db5f3390c189d4e122a86c5d3f612c","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import ssh"},{"line_number":22,"context_line":"from tempest.scenario.neutron_lbaas import lbaas_manager"},{"line_number":23,"context_line":"from tempest.test import attr"},{"line_number":24,"context_line":"from tempest.test import services"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F8tTI%3D","line":23,"updated":"2013-12-22 06:29:53.000000000","message":"OpenStack Hacking[1] says \"Do not import objects, only modules\". So I think \u0027from tempest import test\u0027 is better here.\nI know there are many violations in Tempest now. But I think we should avoid it in a new file.\n\n[1] http://docs.openstack.org/developer/hacking/\n\nAnd we have H302 rule for this. But it\u0027s in \u0027ignore\u0027 list of tox.ini.  I\u0027d like to cleanup and enable the rule.","commit_id":"d0a9aae259194903c3e695eadf2a67feabe3e19d"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"d400ff4d63bf6d5168edc950424b6151c42cb293","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.common import ssh"},{"line_number":22,"context_line":"from tempest.scenario.neutron_lbaas import lbaas_manager"},{"line_number":23,"context_line":"from tempest.test import attr"},{"line_number":24,"context_line":"from tempest.test import services"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F8m64%3D","line":23,"in_reply_to":"AAAATn%2F8tTI%3D","updated":"2013-12-24 11:43:54.000000000","message":"Done","commit_id":"d0a9aae259194903c3e695eadf2a67feabe3e19d"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"63abd62818db5f3390c189d4e122a86c5d3f612c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from tempest.common import ssh"},{"line_number":22,"context_line":"from tempest.scenario.neutron_lbaas import lbaas_manager"},{"line_number":23,"context_line":"from tempest.test import attr"},{"line_number":24,"context_line":"from tempest.test import services"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestLoadBalancerBasic(lbaas_manager.LbaasManager):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F8tTE%3D","line":24,"updated":"2013-12-22 06:29:53.000000000","message":"ditto","commit_id":"d0a9aae259194903c3e695eadf2a67feabe3e19d"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"d400ff4d63bf6d5168edc950424b6151c42cb293","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from tempest.common import ssh"},{"line_number":22,"context_line":"from tempest.scenario.neutron_lbaas import lbaas_manager"},{"line_number":23,"context_line":"from tempest.test import attr"},{"line_number":24,"context_line":"from tempest.test import services"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestLoadBalancerBasic(lbaas_manager.LbaasManager):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F8m60%3D","line":24,"in_reply_to":"AAAATn%2F8tTE%3D","updated":"2013-12-24 11:43:54.000000000","message":"Done","commit_id":"d0a9aae259194903c3e695eadf2a67feabe3e19d"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"73832c0085274971645083bbc02210066918fd87","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            cmd \u003d start_server % {\u0027server\u0027: \u0027server2\u0027,"},{"line_number":85,"context_line":"                                  \u0027port\u0027: self.port2}"},{"line_number":86,"context_line":"            ssh_client.exec_command(cmd)"},{"line_number":87,"context_line":"            time.sleep(10)"},{"line_number":88,"context_line":"            vip \u003d self.vips[0]"},{"line_number":89,"context_line":"            floating_ip_vip \u003d self.floating_ips["},{"line_number":90,"context_line":"                vip[\u0027id\u0027]][0][\u0027floating_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAT3%2F%2F3PE%3D","line":87,"updated":"2013-12-29 20:42:49.000000000","message":"What are we waiting for here, and how was 10s picked as the right amount of time? We have seen many instances where things run slowly in the gate. I am concerned this might introduce flaky failures if whatever is being waited for takes longer.","commit_id":"3317b750195c9fbedeafb15e7ca3557c0514d5c4"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"7076b6ec6c4bdae6bad90935bacdfcba8cf93986","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            cmd \u003d start_server % {\u0027server\u0027: \u0027server2\u0027,"},{"line_number":85,"context_line":"                                  \u0027port\u0027: self.port2}"},{"line_number":86,"context_line":"            ssh_client.exec_command(cmd)"},{"line_number":87,"context_line":"            time.sleep(10)"},{"line_number":88,"context_line":"            vip \u003d self.vips[0]"},{"line_number":89,"context_line":"            floating_ip_vip \u003d self.floating_ips["},{"line_number":90,"context_line":"                vip[\u0027id\u0027]][0][\u0027floating_ip_address\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAT3%2F%2F2c8%3D","line":87,"in_reply_to":"AAAAT3%2F%2F3PE%3D","updated":"2013-12-30 06:57:29.000000000","message":"Thank you for pointing this out!\nThis was needed when this test was also checking health monitoring and we had to wait some time for the monitor to mark both members as ACTIVE. By now this sleep really is redundant.\nSo I\u0027ll make sure it\u0027s not here in the next patchset.","commit_id":"3317b750195c9fbedeafb15e7ca3557c0514d5c4"},{"author":{"_account_id":9461,"name":"Vijay Kumar Venkatachalam","email":"vijay.venkatachalam@citrix.com","username":"vijayvenkatachalam"},"change_message_id":"4c45c9ac5b7af118f7bb48fbf344ee9da0f1ceb7","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        for server in self.servers.keys():"},{"line_number":69,"context_line":"            ssh_login \u003d self.config.compute.image_ssh_user"},{"line_number":70,"context_line":"            private_key \u003d self.servers[server].private_key"},{"line_number":71,"context_line":"            network_name \u003d self.networks[0][\u0027name\u0027]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"            ip_address \u003d server.networks[network_name][0]"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAT3%2F%2F03M%3D","line":70,"updated":"2013-12-30 17:00:40.000000000","message":"Minor Comment: the \"server\" object is not stored in self.servers, it is actually the keypairs. Can you rename this appropriately? It confused my dumb brain while reading the code!!\n\nAlso, it would be preferable to use scenario.manager.get_remote_client (part of the super class) at line 74, it honors the settings from tempest configuration file.","commit_id":"4ad6be9e9f56359b4ce11825e44e1d99e8c130df"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"8c7a16d52e8c9f5ecef829e4fa3d35a73ca77754","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def check_preconditions(cls):"},{"line_number":42,"context_line":"        super(TestLoadBalancerBasic, cls).check_preconditions()"},{"line_number":43,"context_line":"        cfg \u003d cls.config.network"},{"line_number":44,"context_line":"        if not (cfg.tenant_networks_reachable or cfg.public_network_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2FsWE%3D","line":41,"updated":"2014-01-09 15:04:34.000000000","message":"Please make sure this test can be skipped backed on the enabled-api-extensions. Some Neutron plugins do not implement the lbaas extension.","commit_id":"b73d36420dc5dc7b0ab446588566e1f595e6e88f"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"11db2e068ddd9583f67b0072ff108cfe0ff735ba","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def check_preconditions(cls):"},{"line_number":42,"context_line":"        super(TestLoadBalancerBasic, cls).check_preconditions()"},{"line_number":43,"context_line":"        cfg \u003d cls.config.network"},{"line_number":44,"context_line":"        if not (cfg.tenant_networks_reachable or cfg.public_network_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2FosA%3D","line":41,"in_reply_to":"AAAAUH%2F%2FsWE%3D","updated":"2014-01-10 08:44:02.000000000","message":"Done","commit_id":"b73d36420dc5dc7b0ab446588566e1f595e6e88f"},{"author":{"_account_id":9461,"name":"Vijay Kumar Venkatachalam","email":"vijay.venkatachalam@citrix.com","username":"vijayvenkatachalam"},"change_message_id":"9b4f53b8637fe321cebbfb3191471e492bd352bc","unresolved":false,"context_lines":[{"line_number":55,"context_line":"           the two servers and that both of them get equal portions"},{"line_number":56,"context_line":"           of the requests"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        for server in self.servers.keys():"},{"line_number":59,"context_line":"            ssh_login \u003d self.config.compute.image_ssh_user"},{"line_number":60,"context_line":"            private_key \u003d self.servers[server].private_key"},{"line_number":61,"context_line":"            network_name \u003d self.networks[0][\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2FkB8%3D","line":58,"updated":"2014-01-11 03:51:06.000000000","message":"Starting of the HTTP services (the nc command) should happen before creating the lb configuration. If VIP is tested immediately after the HTTP service creation the LB appliance might not have marked the members as ACTIVE and the GETs could fail.\n\nThe following could be an order of workflow.\n1. boot the servers\n2. start the services by logging in using ssh\n3. create loadbalancing configuration\n4. check by sending traffic.","commit_id":"2bdef6bc70fd742788d54a73baf08ca89b383ecd"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"5a2db147e89c7edb27fb9498d8af0accf8ee2807","unresolved":false,"context_lines":[{"line_number":55,"context_line":"           the two servers and that both of them get equal portions"},{"line_number":56,"context_line":"           of the requests"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        for server in self.servers.keys():"},{"line_number":59,"context_line":"            ssh_login \u003d self.config.compute.image_ssh_user"},{"line_number":60,"context_line":"            private_key \u003d self.servers[server].private_key"},{"line_number":61,"context_line":"            network_name \u003d self.networks[0][\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2FfU0%3D","line":58,"in_reply_to":"AAAAUH%2F%2Fjxw%3D","updated":"2014-01-13 11:45:53.000000000","message":"Vijay, even though in this case GET really isn\u0027t supposed to fail, I think that this approach makes the code more readable and logical. So I changed the workflow in the way you suggested.","commit_id":"2bdef6bc70fd742788d54a73baf08ca89b383ecd"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"b590aaece583d4af0289b2d9dbca46952eaa3414","unresolved":false,"context_lines":[{"line_number":55,"context_line":"           the two servers and that both of them get equal portions"},{"line_number":56,"context_line":"           of the requests"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        for server in self.servers.keys():"},{"line_number":59,"context_line":"            ssh_login \u003d self.config.compute.image_ssh_user"},{"line_number":60,"context_line":"            private_key \u003d self.servers[server].private_key"},{"line_number":61,"context_line":"            network_name \u003d self.networks[0][\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAUH%2F%2Fjxw%3D","line":58,"in_reply_to":"AAAAUH%2F%2FkB8%3D","updated":"2014-01-11 06:21:33.000000000","message":"Good suggestion, however without health monitoring it should not be an issue.","commit_id":"2bdef6bc70fd742788d54a73baf08ca89b383ecd"}],"tempest/scenario/test_load_balancer_basic.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f151747bdd42ab953f88b6a17aad4637ba940bee","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    5. SSH to the instance and start two servers"},{"line_number":40,"context_line":"    6. Send 10 requests to the VIP and check that they are shared between"},{"line_number":41,"context_line":"       the two servers and that both of them get equal portions of the"},{"line_number":42,"context_line":"       requests"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVXM%3D","line":42,"updated":"2013-11-27 09:43:53.000000000","message":"please mention ROUND_ROBIN balancing algorithm","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fd6f2a1f11eabb23486ccd50b6dc86a143036f0e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    5. SSH to the instance and start two servers"},{"line_number":40,"context_line":"    6. Send 10 requests to the VIP and check that they are shared between"},{"line_number":41,"context_line":"       the two servers and that both of them get equal portions of the"},{"line_number":42,"context_line":"       requests"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVRE%3D","line":42,"in_reply_to":"AAAATn%2F%2BVXM%3D","updated":"2013-11-27 09:56:47.000000000","message":"OK, will do it","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f151747bdd42ab953f88b6a17aad4637ba940bee","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.security_groups[self.tenant_id] \u003d self._create_security_group()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _create_server(self):"},{"line_number":78,"context_line":"        nets \u003d self.network_client.list_networks()"},{"line_number":79,"context_line":"        for net in nets[\u0027networks\u0027]:"},{"line_number":80,"context_line":"            if net[\u0027name\u0027] \u003d\u003d \"private\":"},{"line_number":81,"context_line":"                self.networks.append(net)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVXA%3D","line":78,"updated":"2013-11-27 09:43:53.000000000","message":"in fact it\u0027s better to filter networks by tenant_id, that should give you only networks belonging to the tenant","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fd6f2a1f11eabb23486ccd50b6dc86a143036f0e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.security_groups[self.tenant_id] \u003d self._create_security_group()"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _create_server(self):"},{"line_number":78,"context_line":"        nets \u003d self.network_client.list_networks()"},{"line_number":79,"context_line":"        for net in nets[\u0027networks\u0027]:"},{"line_number":80,"context_line":"            if net[\u0027name\u0027] \u003d\u003d \"private\":"},{"line_number":81,"context_line":"                self.networks.append(net)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVRA%3D","line":78,"in_reply_to":"AAAATn%2F%2BVXA%3D","updated":"2013-11-27 09:56:47.000000000","message":"understood","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f151747bdd42ab953f88b6a17aad4637ba940bee","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _create_pools(self):"},{"line_number":100,"context_line":"        name \u003d data_utils.rand_name(\u0027pool-\u0027)"},{"line_number":101,"context_line":"        subnets \u003d self.network_client.list_subnets()"},{"line_number":102,"context_line":"        for subnet in subnets[\u0027subnets\u0027]:"},{"line_number":103,"context_line":"            if subnet[\u0027name\u0027] \u003d\u003d \u0027private-subnet\u0027:"},{"line_number":104,"context_line":"                self.subnets.append(subnet)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVWw%3D","line":101,"updated":"2013-11-27 09:43:53.000000000","message":"same here: once network has been defined - filter subnets by network_id, that should give you just the subnet you need","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f151747bdd42ab953f88b6a17aad4637ba940bee","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        ip \u003d server.networks[network_name][0]"},{"line_number":116,"context_line":"        pool_id \u003d self.pools[0][\u0027id\u0027]"},{"line_number":117,"context_line":"        member1 \u003d self._create_member(ip, 80, pool_id)"},{"line_number":118,"context_line":"        member2 \u003d self._create_member(ip, 88, pool_id)"},{"line_number":119,"context_line":"        self.members.extend([member1, member2])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _create_vips(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVWU%3D","line":118,"updated":"2013-11-27 09:43:53.000000000","message":"why different ports? Suggest defining a constant and using it on lines 139, 143","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"b98cda0f2033f19f216a13738bfd1ca2f83ad43c","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        ip \u003d server.networks[network_name][0]"},{"line_number":116,"context_line":"        pool_id \u003d self.pools[0][\u0027id\u0027]"},{"line_number":117,"context_line":"        member1 \u003d self._create_member(ip, 80, pool_id)"},{"line_number":118,"context_line":"        member2 \u003d self._create_member(ip, 88, pool_id)"},{"line_number":119,"context_line":"        self.members.extend([member1, member2])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _create_vips(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BUhg%3D","line":118,"in_reply_to":"AAAATn%2F%2BUlE%3D","updated":"2013-11-27 12:25:23.000000000","message":"Okay then. I\u0027ll make them constants.","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"10e2f86266ecfa80e253b9bbafcd1b91dea9db25","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        ip \u003d server.networks[network_name][0]"},{"line_number":116,"context_line":"        pool_id \u003d self.pools[0][\u0027id\u0027]"},{"line_number":117,"context_line":"        member1 \u003d self._create_member(ip, 80, pool_id)"},{"line_number":118,"context_line":"        member2 \u003d self._create_member(ip, 88, pool_id)"},{"line_number":119,"context_line":"        self.members.extend([member1, member2])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _create_vips(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BUlE%3D","line":118,"in_reply_to":"AAAATn%2F%2BUmQ%3D","updated":"2013-11-27 12:15:14.000000000","message":"right, i\u0027ve missed that you were creating only 1 server, it makes sense then. Still it\u0027s better to use literal constants then.","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fd833cd764dfc5c041df6e85474b885f09cbc85b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        ip \u003d server.networks[network_name][0]"},{"line_number":116,"context_line":"        pool_id \u003d self.pools[0][\u0027id\u0027]"},{"line_number":117,"context_line":"        member1 \u003d self._create_member(ip, 80, pool_id)"},{"line_number":118,"context_line":"        member2 \u003d self._create_member(ip, 88, pool_id)"},{"line_number":119,"context_line":"        self.members.extend([member1, member2])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _create_vips(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BUmQ%3D","line":118,"in_reply_to":"AAAATn%2F%2BVQM%3D","updated":"2013-11-27 12:12:50.000000000","message":"I mean, if I want to have two servers running on one instance shouldn\u0027t I make them listen to the requests on different ports?","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fd6f2a1f11eabb23486ccd50b6dc86a143036f0e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        ip \u003d server.networks[network_name][0]"},{"line_number":116,"context_line":"        pool_id \u003d self.pools[0][\u0027id\u0027]"},{"line_number":117,"context_line":"        member1 \u003d self._create_member(ip, 80, pool_id)"},{"line_number":118,"context_line":"        member2 \u003d self._create_member(ip, 88, pool_id)"},{"line_number":119,"context_line":"        self.members.extend([member1, member2])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _create_vips(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVQM%3D","line":118,"in_reply_to":"AAAATn%2F%2BVWU%3D","updated":"2013-11-27 09:56:47.000000000","message":"But I have two servers which should be listening on different ports. Should not these members have the corresponding values as protocol-ports?","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f151747bdd42ab953f88b6a17aad4637ba940bee","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self._create_pools()"},{"line_number":162,"context_line":"        self._create_members()"},{"line_number":163,"context_line":"        self._create_vips()"},{"line_number":164,"context_line":"        self._check_load_balancing()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVVs%3D","line":164,"updated":"2013-11-27 09:43:53.000000000","message":"The test should cleanup resources afterwards. Please add cleanup method. Also I suggest to extract balancer creation in a separate method that could be used across several scenarios.\nAlso It might worth to share servers across several scenarios to speedup the tests (you\u0027ll only have to wait once to bring nodes up)","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"fd6f2a1f11eabb23486ccd50b6dc86a143036f0e","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self._create_pools()"},{"line_number":162,"context_line":"        self._create_members()"},{"line_number":163,"context_line":"        self._create_vips()"},{"line_number":164,"context_line":"        self._check_load_balancing()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BVRI%3D","line":164,"in_reply_to":"AAAATn%2F%2BVVs%3D","updated":"2013-11-27 09:56:47.000000000","message":"These resources are cleaned up in tearDownClass in OfficialClientTest in tempest/scenario/manager.py. As for the other comments, I\u0027ll fix it.","commit_id":"287127e97b3b6d0eb0a5628049e5b128eeb1fea9"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"6cdf1e7762529ef322d5da0360f8df10d7f21214","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        vip \u003d self.vips[0]"},{"line_number":82,"context_line":"        floating_ip_vip \u003d self.floating_ips["},{"line_number":83,"context_line":"            vip[\u0027id\u0027]][0][\u0027floating_ip_address\u0027]"},{"line_number":84,"context_line":"        time.sleep(2)"},{"line_number":85,"context_line":"        resp \u003d []"},{"line_number":86,"context_line":"        for count in range(10):"},{"line_number":87,"context_line":"            resp.append("}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F%2FGgs%3D","line":84,"updated":"2014-01-17 12:35:12.000000000","message":"I think we should defing max_retries or timeout and send requests via urllib.urlopen() until it succeeds or timeout/max_retries is hit. Otherwise bare sleep() looks confusing and may not provideenough time for floating ip wiring, especially some other tests are executed concurrently.","commit_id":"12c670fed4bd5dde849c8dba0143438393382e57"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"2e1d87f910cf4fabeb96e51ef8ed9efacd7dd372","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        vip \u003d self.vips[0]"},{"line_number":82,"context_line":"        floating_ip_vip \u003d self.floating_ips["},{"line_number":83,"context_line":"            vip[\u0027id\u0027]][0][\u0027floating_ip_address\u0027]"},{"line_number":84,"context_line":"        time.sleep(2)"},{"line_number":85,"context_line":"        resp \u003d []"},{"line_number":86,"context_line":"        for count in range(10):"},{"line_number":87,"context_line":"            resp.append("}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F%2B%2Bls%3D","line":84,"in_reply_to":"AAAAUH%2F%2FA98%3D","updated":"2014-01-20 08:23:55.000000000","message":"Done","commit_id":"12c670fed4bd5dde849c8dba0143438393382e57"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"a8b514049c1332599e5961e469309cf2843f8c41","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        vip \u003d self.vips[0]"},{"line_number":82,"context_line":"        floating_ip_vip \u003d self.floating_ips["},{"line_number":83,"context_line":"            vip[\u0027id\u0027]][0][\u0027floating_ip_address\u0027]"},{"line_number":84,"context_line":"        time.sleep(2)"},{"line_number":85,"context_line":"        resp \u003d []"},{"line_number":86,"context_line":"        for count in range(10):"},{"line_number":87,"context_line":"            resp.append("}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUH%2F%2FA98%3D","line":84,"in_reply_to":"AAAAUH%2F%2FGgs%3D","updated":"2014-01-19 02:43:12.000000000","message":"+1 to enikanorv.\nI don\u0027t understand this \u00272 seconds\u0027 is enough for this test.","commit_id":"12c670fed4bd5dde849c8dba0143438393382e57"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"416fafd83816530a6cbe518c178e6c46e795aedc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            ssh_client \u003d ssh.Client(ip_address, ssh_login,"},{"line_number":57,"context_line":"                                    pkey\u003dprivate_key,"},{"line_number":58,"context_line":"                                    timeout\u003d100)"},{"line_number":59,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\n\\n\" \\"},{"line_number":60,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""},{"line_number":61,"context_line":"            cmd \u003d start_server % {\u0027server\u0027: \u0027server1\u0027,"},{"line_number":62,"context_line":"                                  \u0027port\u0027: self.port1}"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2Baj4%3D","line":59,"updated":"2014-01-27 07:17:54.000000000","message":"HTTP header newlines should be \u0027\\r\\n\u0027, not \u0027\\n\u0027.","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"2d055fb0401eea5adb70c8afe8d67686172fd08b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            ssh_client \u003d ssh.Client(ip_address, ssh_login,"},{"line_number":57,"context_line":"                                    pkey\u003dprivate_key,"},{"line_number":58,"context_line":"                                    timeout\u003d100)"},{"line_number":59,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\n\\n\" \\"},{"line_number":60,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""},{"line_number":61,"context_line":"            cmd \u003d start_server % {\u0027server\u0027: \u0027server1\u0027,"},{"line_number":62,"context_line":"                                  \u0027port\u0027: self.port1}"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BTBY%3D","line":59,"in_reply_to":"AAAAUH%2F%2BUtw%3D","updated":"2014-01-28 09:23:00.000000000","message":"@IWAMOTO: Done","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6f48c9347603ed6e5f0532c43aa477368461a66","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            ssh_client \u003d ssh.Client(ip_address, ssh_login,"},{"line_number":57,"context_line":"                                    pkey\u003dprivate_key,"},{"line_number":58,"context_line":"                                    timeout\u003d100)"},{"line_number":59,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\n\\n\" \\"},{"line_number":60,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""},{"line_number":61,"context_line":"            cmd \u003d start_server % {\u0027server\u0027: \u0027server1\u0027,"},{"line_number":62,"context_line":"                                  \u0027port\u0027: self.port1}"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BXRc%3D","line":59,"in_reply_to":"AAAAUH%2F%2BaNU%3D","updated":"2014-01-27 17:49:25.000000000","message":"Elena, the hacking guidelines are for code files, not strings that are intended to be output to a command line or other program.\n\nThe hacking rule is meant to prevent contributors using Windows development environments from having ^M and other characters from being injected into the source files.","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"ae4af39b03adf515850050a4c7279a5a0901ecfd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            ssh_client \u003d ssh.Client(ip_address, ssh_login,"},{"line_number":57,"context_line":"                                    pkey\u003dprivate_key,"},{"line_number":58,"context_line":"                                    timeout\u003d100)"},{"line_number":59,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\n\\n\" \\"},{"line_number":60,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""},{"line_number":61,"context_line":"            cmd \u003d start_server % {\u0027server\u0027: \u0027server1\u0027,"},{"line_number":62,"context_line":"                                  \u0027port\u0027: self.port1}"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BUtw%3D","line":59,"in_reply_to":"AAAAUH%2F%2BaNU%3D","updated":"2014-01-28 00:53:41.000000000","message":"Network protocols in general use \u0027\\r\\n\u0027 for newlines. HTTP is no exception. Please check RFC2616.","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"7da23ea520648cc1414946accba47f02b266c9bc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            ssh_client \u003d ssh.Client(ip_address, ssh_login,"},{"line_number":57,"context_line":"                                    pkey\u003dprivate_key,"},{"line_number":58,"context_line":"                                    timeout\u003d100)"},{"line_number":59,"context_line":"            start_server \u003d \"while true; do echo -e \u0027HTTP/1.0 200 OK\\n\\n\" \\"},{"line_number":60,"context_line":"                           \"%(server)s\u0027 | sudo nc -l -p %(port)s ; done \u0026\""},{"line_number":61,"context_line":"            cmd \u003d start_server % {\u0027server\u0027: \u0027server1\u0027,"},{"line_number":62,"context_line":"                                  \u0027port\u0027: self.port1}"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BaNU%3D","line":59,"in_reply_to":"AAAAUH%2F%2Baj4%3D","updated":"2014-01-27 08:42:47.000000000","message":"As OpenStack Hacking (https://github.com/openstack-dev/hacking/blob/master/HACKING.rst) says:\n\nUse only UNIX style newlines (\\n), not Windows style (\\r\\n)","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6f48c9347603ed6e5f0532c43aa477368461a66","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self._create_server()"},{"line_number":98,"context_line":"        self._start_servers()"},{"line_number":99,"context_line":"        self._create_lb()"},{"line_number":100,"context_line":"        self._check_load_balancing()"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUH%2F%2BXQ8%3D","line":100,"updated":"2014-01-27 17:49:25.000000000","message":"I like the tests above. Nice job.","commit_id":"38673b77c918133a748408773a28f7376d665338"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"80d9d50797bf451bd37c1578e49fd919bb5df6be","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2BMwk%3D","line":2,"updated":"2014-01-29 05:50:05.000000000","message":"Please remove this vim header.","commit_id":"853472c4ad68438ddc9475418118729c30ab29dc"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"d25b2e642a4dd5a1e7102fc4decfee5058d38db1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F9%2FHE%3D","line":2,"in_reply_to":"AAAAUH%2F%2BLOo%3D","updated":"2014-01-31 10:27:57.000000000","message":"Done","commit_id":"853472c4ad68438ddc9475418118729c30ab29dc"},{"author":{"_account_id":7293,"name":"Elena Ezhova","email":"ezhovaelena19@gmail.com","username":"elena"},"change_message_id":"51111e9e811b618f6310c5c600f6cf6eb641110b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAUH%2F%2BLOo%3D","line":2,"in_reply_to":"AAAAUH%2F%2BMwk%3D","updated":"2014-01-29 12:40:02.000000000","message":"Understood, will fix it","commit_id":"853472c4ad68438ddc9475418118729c30ab29dc"}]}
