)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"6824bfba97eb39dda64919b7b1e1a0070b07e278","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This change removes BaseIPVethTestCase class and moves Pinger class to"},{"line_number":10,"context_line":"allow its use from a fake machine."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0636f11a327e9535828e7b52e60195e52831a0b2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"fa963961_8b7715d4","line":12,"updated":"2015-03-26 14:44:56.000000000","message":"Is this part of a blueprint?","commit_id":"99daf1ecc80eeaa0f6203dbd575e7f80cb2ea8d6"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"f9bd404ff1cefba43974e954ffa24dd0204599ff","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This change removes BaseIPVethTestCase class and moves Pinger class to"},{"line_number":10,"context_line":"allow its use from a fake machine."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I0636f11a327e9535828e7b52e60195e52831a0b2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"fa963961_d6e6e4e7","line":12,"in_reply_to":"fa963961_8b7715d4","updated":"2015-03-26 14:53:47.000000000","message":"No, it\u0027s only a code improvement discussed in [1] which could help to read/write functional tests and also fullstack tests to come. It\u0027s done by many small changes to allow easy review.\n\n[1] https://review.openstack.org/136511","commit_id":"99daf1ecc80eeaa0f6203dbd575e7f80cb2ea8d6"}],"neutron/tests/common/helpers.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"92d4039767e6e22be7f3bd8831f1542609ec515f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def assert_no_ping(self, dst_ip):"},{"line_number":37,"context_line":"        try:"},{"line_number":38,"context_line":"            self._ping_destination(dst_ip)"},{"line_number":39,"context_line":"            tools.fail(\"destination ip %(dst_ip)s is replying to ping\""},{"line_number":40,"context_line":"                       \"from namespace %(ns)s, but it shouldn\u0027t\" %"},{"line_number":41,"context_line":"                       {\u0027ns\u0027: self.namespace.namespace, \u0027dst_ip\u0027: dst_ip})"},{"line_number":42,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_af7d301e","line":39,"updated":"2015-03-26 09:37:27.000000000","message":"missing space at the end of the line","commit_id":"a9ee01c537563db0d6aae826bd85734d1a0bbedd"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"95a7d4614d9f60526772cfa6573bb329cb7298e2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def assert_no_ping(self, dst_ip):"},{"line_number":37,"context_line":"        try:"},{"line_number":38,"context_line":"            self._ping_destination(dst_ip)"},{"line_number":39,"context_line":"            tools.fail(\"destination ip %(dst_ip)s is replying to ping\""},{"line_number":40,"context_line":"                       \"from namespace %(ns)s, but it shouldn\u0027t\" %"},{"line_number":41,"context_line":"                       {\u0027ns\u0027: self.namespace.namespace, \u0027dst_ip\u0027: dst_ip})"},{"line_number":42,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_0f1ba4ca","line":39,"in_reply_to":"1a6ced46_4f0bdc8d","updated":"2015-03-26 09:42:13.000000000","message":"Done","commit_id":"a9ee01c537563db0d6aae826bd85734d1a0bbedd"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"4e5462d830c8277ababd854ea765351fc242ab71","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def assert_no_ping(self, dst_ip):"},{"line_number":37,"context_line":"        try:"},{"line_number":38,"context_line":"            self._ping_destination(dst_ip)"},{"line_number":39,"context_line":"            tools.fail(\"destination ip %(dst_ip)s is replying to ping\""},{"line_number":40,"context_line":"                       \"from namespace %(ns)s, but it shouldn\u0027t\" %"},{"line_number":41,"context_line":"                       {\u0027ns\u0027: self.namespace.namespace, \u0027dst_ip\u0027: dst_ip})"},{"line_number":42,"context_line":"        except RuntimeError:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_4f0bdc8d","line":39,"in_reply_to":"1a6ced46_af7d301e","updated":"2015-03-26 09:40:16.000000000","message":"good catch!","commit_id":"a9ee01c537563db0d6aae826bd85734d1a0bbedd"}],"neutron/tests/common/machine_helpers.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c99d546f166fd1bfa4e94392450037d925415772","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        ns_fixture \u003d self.useFixture("},{"line_number":71,"context_line":"            net_helpers.NamespaceFixture())"},{"line_number":72,"context_line":"        self.namespace \u003d ns_fixture.name"},{"line_number":73,"context_line":"        self.ns_ip_wrapper \u003d ns_fixture.ip_wrapper"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self.port \u003d self.useFixture("},{"line_number":76,"context_line":"            net_helpers.PortFixture.get(self.bridge, self.namespace)).port"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ab14d0d_3b4977d1","line":73,"updated":"2015-04-17 23:39:26.000000000","message":"(No action required) Given how cheap IPWrapper instances here, I\u0027m not sure why saving this on the instance is suggested.","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"31babb3d2e8944ccf3d9d0b8623323f7544cd723","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        ns_fixture \u003d self.useFixture("},{"line_number":71,"context_line":"            net_helpers.NamespaceFixture())"},{"line_number":72,"context_line":"        self.namespace \u003d ns_fixture.name"},{"line_number":73,"context_line":"        self.ns_ip_wrapper \u003d ns_fixture.ip_wrapper"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        self.port \u003d self.useFixture("},{"line_number":76,"context_line":"            net_helpers.PortFixture.get(self.bridge, self.namespace)).port"}],"source_content_type":"text/x-python","patch_set":19,"id":"dac4157f_97903bee","line":73,"in_reply_to":"1ab14d0d_3b4977d1","updated":"2015-04-20 18:43:25.000000000","message":"Done","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c99d546f166fd1bfa4e94392450037d925415772","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        Can be used only after setUp."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        pinger \u003d Pinger(self.ns_ip_wrapper)"},{"line_number":95,"context_line":"        pinger.assert_ping(dst_ip)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def assert_no_ping(self, dst_ip):"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ab14d0d_fb2aefe6","line":94,"updated":"2015-04-17 23:39:26.000000000","message":"(No action required) Maybe we should have static methods for ping assertions?  e.g. Pinger.assert_ping(self.ns_ip_wrapper, dst_ip)","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"31babb3d2e8944ccf3d9d0b8623323f7544cd723","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        Can be used only after setUp."},{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        pinger \u003d Pinger(self.ns_ip_wrapper)"},{"line_number":95,"context_line":"        pinger.assert_ping(dst_ip)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def assert_no_ping(self, dst_ip):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dac4157f_f292e556","line":94,"in_reply_to":"1ab14d0d_fb2aefe6","updated":"2015-04-20 18:43:25.000000000","message":"we could remove Pinger class if we move to static method ... i will see our i can refactor it when i will split net_helpers and net_fixtures (fixtures currently in net_helpers)","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"}],"neutron/tests/functional/agent/linux/helpers.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"7bb051d23ebe89e5ecfd6e6e1f5af2bab4d4cbb7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        while previous_directory !\u003d current_directory:"},{"line_number":50,"context_line":"            perms \u003d os.stat(current_directory).st_mode"},{"line_number":51,"context_line":"            if perms \u0026 self.least_perms !\u003d self.least_perms:"},{"line_number":52,"context_line":"                os.chmod(current_directory, perms | self.least_perms)"},{"line_number":53,"context_line":"                self.addCleanup(self.safe_chmod, current_directory, perms)"},{"line_number":54,"context_line":"            previous_directory \u003d current_directory"},{"line_number":55,"context_line":"            current_directory \u003d os.path.dirname(current_directory)"}],"source_content_type":"text/x-python","patch_set":24,"id":"bab921fb_2815453f","line":52,"updated":"2015-04-24 16:33:06.000000000","message":"(No action required) Why is it necessary to revert permissions?  Tests should always be interacting with non-temp paths that are removed on teardown.  Please fix this when you get a chance.","commit_id":"8a4540acac511cacb0d4f5680ce285e913f7ff50"}],"neutron/tests/functional/agent/linux/test_ipset.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c99d546f166fd1bfa4e94392450037d925415772","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(IpsetBase, self).setUp()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        bridge \u003d self.useFixture(net_helpers.VethBridgeFixture()).bridge"},{"line_number":35,"context_line":"        self.client, self.server \u003d self.useFixture("},{"line_number":36,"context_line":"            machine_helpers.PeerMachines(bridge)).machines"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self.ipset \u003d self._create_ipset_manager_and_set("}],"source_content_type":"text/x-python","patch_set":19,"id":"1ab14d0d_bb0b477d","line":35,"updated":"2015-04-17 23:39:26.000000000","message":"What is the reason for switching to the terms \u0027client\u0027 and \u0027server\u0027 here instead of the previous \u0027source\u0027 and \u0027destination\u0027?  The previous terms were unambiguous to me, but client and server have specific meaning that wouldn\u0027t seem to apply here.","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"31babb3d2e8944ccf3d9d0b8623323f7544cd723","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        super(IpsetBase, self).setUp()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        bridge \u003d self.useFixture(net_helpers.VethBridgeFixture()).bridge"},{"line_number":35,"context_line":"        self.client, self.server \u003d self.useFixture("},{"line_number":36,"context_line":"            machine_helpers.PeerMachines(bridge)).machines"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self.ipset \u003d self._create_ipset_manager_and_set("}],"source_content_type":"text/x-python","patch_set":19,"id":"dac4157f_f251c563","line":35,"in_reply_to":"1ab14d0d_bb0b477d","updated":"2015-04-20 18:43:25.000000000","message":"Done","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"}],"neutron/tests/functional/agent/linux/test_iptables.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"c99d546f166fd1bfa4e94392450037d925415772","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        return chain, rule"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _test_with_nc(self, fw_manager, direction, port, udp):"},{"line_number":81,"context_line":"        netcat \u003d helpers.NetcatTester("},{"line_number":82,"context_line":"            self.client.ns_ip_wrapper, self.server.ns_ip_wrapper,"},{"line_number":83,"context_line":"            self.server.ip, self.port, run_as_root\u003dTrue, udp\u003dudp)"},{"line_number":84,"context_line":"        self.addCleanup(netcat.stop_processes)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1ab14d0d_9bec0b91","line":81,"updated":"2015-04-17 23:39:26.000000000","message":"(No action required) Maybe we can investigate incorporating NetcatTester functionality into the FakeMachine fixtures to make initialization easier.","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"31babb3d2e8944ccf3d9d0b8623323f7544cd723","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        return chain, rule"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _test_with_nc(self, fw_manager, direction, port, udp):"},{"line_number":81,"context_line":"        netcat \u003d helpers.NetcatTester("},{"line_number":82,"context_line":"            self.client.ns_ip_wrapper, self.server.ns_ip_wrapper,"},{"line_number":83,"context_line":"            self.server.ip, self.port, run_as_root\u003dTrue, udp\u003dudp)"},{"line_number":84,"context_line":"        self.addCleanup(netcat.stop_processes)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dac4157f_12dc39e3","line":81,"in_reply_to":"1ab14d0d_9bec0b91","updated":"2015-04-20 18:43:25.000000000","message":"that\u0027s on the todolist","commit_id":"37c8b036f82b55ca8a8183b9f20af586addc7d3f"}]}
