)]}'
{"dragonflow/tests/fullstack/test_common.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"59506c5e3b82af3af371b00e07cf7d67738b532e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import re"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class OvsTestWarapper(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def _get_ovs_flows(self):"},{"line_number":20,"context_line":"        full_args \u003d [\"ovs-ofctl\", \"dump-flows\", \u0027br-int\u0027, \u0027-O Openflow13\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_d7cddc85","line":17,"updated":"2016-01-31 16:01:05.000000000","message":"Consider changing the name to OvsFlowsParser.\nConsider placing in dragonflow/tests/common/utils.py (Or something similar).","commit_id":"0f5cc55b27ec2464541da8fd646a6d0333e590c7"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"53dbc46f5af2a14e2dab5f26872182cd8fdaa288","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import re"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class OvsTestWarapper(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def _get_ovs_flows(self):"},{"line_number":20,"context_line":"        full_args \u003d [\"ovs-ofctl\", \"dump-flows\", \u0027br-int\u0027, \u0027-O Openflow13\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_d2d63c4e","line":17,"in_reply_to":"7a5de9d1_d7cddc85","updated":"2016-02-01 09:16:12.000000000","message":"I changed the name.\n\nRegarding location with check this with Gal.","commit_id":"0f5cc55b27ec2464541da8fd646a6d0333e590c7"}],"dragonflow/tests/fullstack/test_dhcp_flows.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            if flow[\u0027table\u0027] \u003d\u003d \u00279,\u0027 and flow[\u0027actions\u0027] \u003d\u003d \u0027goto_table:11\u0027:"},{"line_number":39,"context_line":"                if (\u0027udp,dl_dst\u003dff:ff:ff:ff:ff:ff,tp_src\u003d68,tp_dst\u003d67\u0027"},{"line_number":40,"context_line":"                    in flow[\u0027match\u0027]):"},{"line_number":41,"context_line":"                    return"},{"line_number":42,"context_line":"        self.assertEqual(\u0027no_default_dhcp_rule\u0027, 0)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_update_subnet_with_dhcp(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_95e10b9d","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":26},"updated":"2016-01-28 14:33:01.000000000","message":"found_dhcp_cast_flow\u003dTrue","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            if flow[\u0027table\u0027] \u003d\u003d \u00279,\u0027 and flow[\u0027actions\u0027] \u003d\u003d \u0027goto_table:11\u0027:"},{"line_number":39,"context_line":"                if (\u0027udp,dl_dst\u003dff:ff:ff:ff:ff:ff,tp_src\u003d68,tp_dst\u003d67\u0027"},{"line_number":40,"context_line":"                    in flow[\u0027match\u0027]):"},{"line_number":41,"context_line":"                    return"},{"line_number":42,"context_line":"        self.assertEqual(\u0027no_default_dhcp_rule\u0027, 0)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_update_subnet_with_dhcp(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_2ecdfdb6","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":26},"in_reply_to":"7a5de9d1_95e10b9d","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                if (\u0027udp,dl_dst\u003dff:ff:ff:ff:ff:ff,tp_src\u003d68,tp_dst\u003d67\u0027"},{"line_number":40,"context_line":"                    in flow[\u0027match\u0027]):"},{"line_number":41,"context_line":"                    return"},{"line_number":42,"context_line":"        self.assertEqual(\u0027no_default_dhcp_rule\u0027, 0)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_update_subnet_with_dhcp(self):"},{"line_number":45,"context_line":"        ovs \u003d objects.OvsTestWarapper()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_f59f1f01","line":42,"range":{"start_line":42,"start_character":26,"end_line":42,"end_character":46},"updated":"2016-01-28 14:33:01.000000000","message":"found_dhcp_cast_flow\u003dTrue","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                if (\u0027udp,dl_dst\u003dff:ff:ff:ff:ff:ff,tp_src\u003d68,tp_dst\u003d67\u0027"},{"line_number":40,"context_line":"                    in flow[\u0027match\u0027]):"},{"line_number":41,"context_line":"                    return"},{"line_number":42,"context_line":"        self.assertEqual(\u0027no_default_dhcp_rule\u0027, 0)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_update_subnet_with_dhcp(self):"},{"line_number":45,"context_line":"        ovs \u003d objects.OvsTestWarapper()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_cec6a999","line":42,"range":{"start_line":42,"start_character":26,"end_line":42,"end_character":46},"in_reply_to":"7a5de9d1_f59f1f01","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_update_subnet_with_dhcp(self):"},{"line_number":45,"context_line":"        ovs \u003d objects.OvsTestWarapper()"},{"line_number":46,"context_line":"        flows1 \u003d ovs.dump()"},{"line_number":47,"context_line":"        network \u003d objects.NetworkTestWrapper(self.neutron, self.nb_api)"},{"line_number":48,"context_line":"        network_id \u003d network.create()"},{"line_number":49,"context_line":"        subnet \u003d {\u0027network_id\u0027: network_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_cb3b6237","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":14},"updated":"2016-01-28 14:33:01.000000000","message":"a more descriptive name will be better \n\nflows_before_add_net","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def test_create_update_subnet_with_dhcp(self):"},{"line_number":45,"context_line":"        ovs \u003d objects.OvsTestWarapper()"},{"line_number":46,"context_line":"        flows1 \u003d ovs.dump()"},{"line_number":47,"context_line":"        network \u003d objects.NetworkTestWrapper(self.neutron, self.nb_api)"},{"line_number":48,"context_line":"        network_id \u003d network.create()"},{"line_number":49,"context_line":"        subnet \u003d {\u0027network_id\u0027: network_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_8ebc3107","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":14},"in_reply_to":"7a5de9d1_cb3b6237","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        ports \u003d self.neutron.list_ports(network_id\u003dnetwork_id)"},{"line_number":58,"context_line":"        ports \u003d ports[\u0027ports\u0027]"},{"line_number":59,"context_line":"        dhcp_ip \u003d False"},{"line_number":60,"context_line":"        for port in ports:"},{"line_number":61,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d \u0027network:dhcp\u0027:"},{"line_number":62,"context_line":"                ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":63,"context_line":"                for ip in ips:"},{"line_number":64,"context_line":"                    if ip[\u0027subnet_id\u0027] \u003d\u003d subnet_id:"},{"line_number":65,"context_line":"                        dhcp_ip \u003d ip[\u0027ip_address\u0027]"},{"line_number":66,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":67,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":68,"context_line":"        flows2 \u003d ovs.dump()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_abdce6e4","line":65,"range":{"start_line":60,"start_character":7,"end_line":65,"end_character":50},"updated":"2016-01-28 14:33:01.000000000","message":"please move into a utility function to avoid code duplication","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        ports \u003d self.neutron.list_ports(network_id\u003dnetwork_id)"},{"line_number":58,"context_line":"        ports \u003d ports[\u0027ports\u0027]"},{"line_number":59,"context_line":"        dhcp_ip \u003d False"},{"line_number":60,"context_line":"        for port in ports:"},{"line_number":61,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d \u0027network:dhcp\u0027:"},{"line_number":62,"context_line":"                ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":63,"context_line":"                for ip in ips:"},{"line_number":64,"context_line":"                    if ip[\u0027subnet_id\u0027] \u003d\u003d subnet_id:"},{"line_number":65,"context_line":"                        dhcp_ip \u003d ip[\u0027ip_address\u0027]"},{"line_number":66,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":67,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":68,"context_line":"        flows2 \u003d ovs.dump()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_0e3fe187","line":65,"range":{"start_line":60,"start_character":7,"end_line":65,"end_character":50},"in_reply_to":"7a5de9d1_abdce6e4","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                        dhcp_ip \u003d ip[\u0027ip_address\u0027]"},{"line_number":66,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":67,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":68,"context_line":"        flows2 \u003d ovs.dump()"},{"line_number":69,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":70,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":71,"context_line":"        # change dhcp"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_4b1692a8","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":14},"updated":"2016-01-28 14:33:01.000000000","message":"more descriptive name","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                        dhcp_ip \u003d ip[\u0027ip_address\u0027]"},{"line_number":66,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":67,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":68,"context_line":"        flows2 \u003d ovs.dump()"},{"line_number":69,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":70,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":71,"context_line":"        # change dhcp"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_2e441d19","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":14},"in_reply_to":"7a5de9d1_4b1692a8","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":70,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":71,"context_line":"        # change dhcp"},{"line_number":72,"context_line":"        subnet3 \u003d {\u0027enable_dhcp\u0027: False}"},{"line_number":73,"context_line":"        self.neutron.update_subnet(subnet_id, {\u0027subnet\u0027: subnet3})"},{"line_number":74,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":75,"context_line":"        flows3 \u003d ovs.dump()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_2b7a36f2","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":15},"updated":"2016-01-28 14:33:01.000000000","message":"ditto","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":70,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":71,"context_line":"        # change dhcp"},{"line_number":72,"context_line":"        subnet3 \u003d {\u0027enable_dhcp\u0027: False}"},{"line_number":73,"context_line":"        self.neutron.update_subnet(subnet_id, {\u0027subnet\u0027: subnet3})"},{"line_number":74,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":75,"context_line":"        flows3 \u003d ovs.dump()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_6e0c55ed","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":15},"in_reply_to":"7a5de9d1_2b7a36f2","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_create_update_subnet_without_dhcp(self):"},{"line_number":80,"context_line":"        ovs \u003d objects.OvsTestWarapper()"},{"line_number":81,"context_line":"        flows1 \u003d ovs.dump()"},{"line_number":82,"context_line":"        network \u003d objects.NetworkTestWrapper(self.neutron, self.nb_api)"},{"line_number":83,"context_line":"        network_id \u003d network.create()"},{"line_number":84,"context_line":"        subnet \u003d {\u0027network_id\u0027: network_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_4b99b21e","line":81,"range":{"start_line":81,"start_character":8,"end_line":81,"end_character":14},"updated":"2016-01-28 14:33:01.000000000","message":"ditto","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_create_update_subnet_without_dhcp(self):"},{"line_number":80,"context_line":"        ovs \u003d objects.OvsTestWarapper()"},{"line_number":81,"context_line":"        flows1 \u003d ovs.dump()"},{"line_number":82,"context_line":"        network \u003d objects.NetworkTestWrapper(self.neutron, self.nb_api)"},{"line_number":83,"context_line":"        network_id \u003d network.create()"},{"line_number":84,"context_line":"        subnet \u003d {\u0027network_id\u0027: network_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_2e12dd09","line":81,"range":{"start_line":81,"start_character":8,"end_line":81,"end_character":14},"in_reply_to":"7a5de9d1_4b99b21e","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        subnet2 \u003d self.neutron.create_subnet({\u0027subnet\u0027: subnet})"},{"line_number":91,"context_line":"        subnet_id \u003d subnet2[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":92,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":93,"context_line":"        flows2 \u003d ovs.dump()"},{"line_number":94,"context_line":"        # change dhcp"},{"line_number":95,"context_line":"        subnet3 \u003d {\u0027enable_dhcp\u0027: True}"},{"line_number":96,"context_line":"        self.neutron.update_subnet(subnet_id, {\u0027subnet\u0027: subnet3})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_cb504261","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":14},"updated":"2016-01-28 14:33:01.000000000","message":"ditto","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        subnet2 \u003d self.neutron.create_subnet({\u0027subnet\u0027: subnet})"},{"line_number":91,"context_line":"        subnet_id \u003d subnet2[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":92,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":93,"context_line":"        flows2 \u003d ovs.dump()"},{"line_number":94,"context_line":"        # change dhcp"},{"line_number":95,"context_line":"        subnet3 \u003d {\u0027enable_dhcp\u0027: True}"},{"line_number":96,"context_line":"        self.neutron.update_subnet(subnet_id, {\u0027subnet\u0027: subnet3})"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_cefb09c0","line":93,"range":{"start_line":93,"start_character":8,"end_line":93,"end_character":14},"in_reply_to":"7a5de9d1_cb504261","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        ports \u003d self.neutron.list_ports(network_id\u003dnetwork_id)"},{"line_number":98,"context_line":"        ports \u003d ports[\u0027ports\u0027]"},{"line_number":99,"context_line":"        dhcp_ip \u003d False"},{"line_number":100,"context_line":"        for port in ports:"},{"line_number":101,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d \u0027network:dhcp\u0027:"},{"line_number":102,"context_line":"                ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":103,"context_line":"                for ip in ips:"},{"line_number":104,"context_line":"                    if ip[\u0027subnet_id\u0027] \u003d\u003d subnet_id:"},{"line_number":105,"context_line":"                        dhcp_ip \u003d ip[\u0027ip_address\u0027]"},{"line_number":106,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":107,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":108,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows2, dhcp_ip))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_8b8faacb","line":105,"range":{"start_line":100,"start_character":8,"end_line":105,"end_character":50},"updated":"2016-01-28 14:33:01.000000000","message":"utility method","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        ports \u003d self.neutron.list_ports(network_id\u003dnetwork_id)"},{"line_number":98,"context_line":"        ports \u003d ports[\u0027ports\u0027]"},{"line_number":99,"context_line":"        dhcp_ip \u003d False"},{"line_number":100,"context_line":"        for port in ports:"},{"line_number":101,"context_line":"            if port[\u0027device_owner\u0027] \u003d\u003d \u0027network:dhcp\u0027:"},{"line_number":102,"context_line":"                ips \u003d port[\u0027fixed_ips\u0027]"},{"line_number":103,"context_line":"                for ip in ips:"},{"line_number":104,"context_line":"                    if ip[\u0027subnet_id\u0027] \u003d\u003d subnet_id:"},{"line_number":105,"context_line":"                        dhcp_ip \u003d ip[\u0027ip_address\u0027]"},{"line_number":106,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":107,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":108,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows2, dhcp_ip))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_eef845c5","line":105,"range":{"start_line":100,"start_character":8,"end_line":105,"end_character":50},"in_reply_to":"7a5de9d1_8b8faacb","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":108,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":109,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":110,"context_line":"        flows3 \u003d ovs.dump()"},{"line_number":111,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows3, dhcp_ip))"},{"line_number":112,"context_line":"        network.delete()"},{"line_number":113,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_4bc0d2e0","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":14},"updated":"2016-01-28 14:33:01.000000000","message":"ditto","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":108,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":109,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":110,"context_line":"        flows3 \u003d ovs.dump()"},{"line_number":111,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows3, dhcp_ip))"},{"line_number":112,"context_line":"        network.delete()"},{"line_number":113,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_8e0191b1","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":14},"in_reply_to":"7a5de9d1_4bc0d2e0","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows3, dhcp_ip))"},{"line_number":112,"context_line":"        network.delete()"},{"line_number":113,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":114,"context_line":"        flows4 \u003d ovs.dump()"},{"line_number":115,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows4, dhcp_ip))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_router_interface(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_ebb65e89","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":14},"updated":"2016-01-28 14:33:01.000000000","message":"ditto","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows3, dhcp_ip))"},{"line_number":112,"context_line":"        network.delete()"},{"line_number":113,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":114,"context_line":"        flows4 \u003d ovs.dump()"},{"line_number":115,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows4, dhcp_ip))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_router_interface(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_aefecdab","line":114,"range":{"start_line":114,"start_character":8,"end_line":114,"end_character":14},"in_reply_to":"7a5de9d1_ebb65e89","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        flows4 \u003d ovs.dump()"},{"line_number":115,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows4, dhcp_ip))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_router_interface(self):"},{"line_number":118,"context_line":"        ovs \u003d objects.OvsTestWarapper()"},{"line_number":119,"context_line":"        flows1 \u003d ovs.dump()"},{"line_number":120,"context_line":"        router \u003d objects.RouterTestWrapper(self.neutron, self.nb_api)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_4ed46046","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":36},"updated":"2016-01-28 14:33:01.000000000","message":"I am not sure I understand why we need a router test in the DHCP pipeline test ?","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        flows4 \u003d ovs.dump()"},{"line_number":115,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows4, dhcp_ip))"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def test_create_router_interface(self):"},{"line_number":118,"context_line":"        ovs \u003d objects.OvsTestWarapper()"},{"line_number":119,"context_line":"        flows1 \u003d ovs.dump()"},{"line_number":120,"context_line":"        router \u003d objects.RouterTestWrapper(self.neutron, self.nb_api)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_4e915946","line":117,"range":{"start_line":117,"start_character":8,"end_line":117,"end_character":36},"in_reply_to":"7a5de9d1_4ed46046","updated":"2016-01-31 08:39:45.000000000","message":"To have more API coverage.","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9ee85788fd4c7c89721cbbea47f4a611d7922b60","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        flows2 \u003d ovs.dump()"},{"line_number":147,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":148,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":149,"context_line":"        #diff \u003d ovs.diff_flows(flows1, flows2)"},{"line_number":150,"context_line":"        #for d in diff:"},{"line_number":151,"context_line":"        #    print d"},{"line_number":152,"context_line":"        self.neutron.remove_interface_router(router_id, body\u003dsubnet_msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_8e3018ea","line":149,"range":{"start_line":149,"start_character":16,"end_line":149,"end_character":19},"updated":"2016-01-28 14:33:01.000000000","message":"Please remove comments","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"7f975b3144fc36110af60dc76d8fccc2f5e20bc2","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        flows2 \u003d ovs.dump()"},{"line_number":147,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows1, dhcp_ip))"},{"line_number":148,"context_line":"        self.assertTrue(self.check_dhcp_rule(flows2, dhcp_ip))"},{"line_number":149,"context_line":"        #diff \u003d ovs.diff_flows(flows1, flows2)"},{"line_number":150,"context_line":"        #for d in diff:"},{"line_number":151,"context_line":"        #    print d"},{"line_number":152,"context_line":"        self.neutron.remove_interface_router(router_id, body\u003dsubnet_msg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a5de9d1_4e2e3944","line":149,"range":{"start_line":149,"start_character":16,"end_line":149,"end_character":19},"in_reply_to":"7a5de9d1_8e3018ea","updated":"2016-01-31 08:39:45.000000000","message":"Done","commit_id":"9540650719b5fccc51a878c60187f1606c6fea65"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6f7ea7c9d709005de926e664e3ae689512d2d382","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        subnet \u003d self.neutron.create_subnet({\u0027subnet\u0027: subnet})"},{"line_number":68,"context_line":"        subnet_id \u003d subnet[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":69,"context_line":"        dhcp_ip \u003d self.get_dhcp_ip(network_id, subnet_id)"},{"line_number":70,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":71,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":72,"context_line":"        flows_after_change \u003d ovs.dump()"},{"line_number":73,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_before_change, dhcp_ip))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_514c9c9d","line":70,"updated":"2016-01-31 11:25:57.000000000","message":"This test should be assertIsNotNone.","commit_id":"205193a08f52180598c37698e99840adbc18a666"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"824ce414f4c04c0508fcd16938180b709c5f92c1","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        subnet \u003d self.neutron.create_subnet({\u0027subnet\u0027: subnet})"},{"line_number":68,"context_line":"        subnet_id \u003d subnet[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":69,"context_line":"        dhcp_ip \u003d self.get_dhcp_ip(network_id, subnet_id)"},{"line_number":70,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":71,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":72,"context_line":"        flows_after_change \u003d ovs.dump()"},{"line_number":73,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_before_change, dhcp_ip))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_dc40a336","line":70,"in_reply_to":"7a5de9d1_514c9c9d","updated":"2016-01-31 11:49:25.000000000","message":"Done","commit_id":"205193a08f52180598c37698e99840adbc18a666"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6f7ea7c9d709005de926e664e3ae689512d2d382","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        updated_subnet \u003d {\u0027enable_dhcp\u0027: True}"},{"line_number":100,"context_line":"        self.neutron.update_subnet(subnet_id, {\u0027subnet\u0027: updated_subnet})"},{"line_number":101,"context_line":"        dhcp_ip \u003d self.get_dhcp_ip(network_id, subnet_id)"},{"line_number":102,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":103,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_before_change, dhcp_ip))"},{"line_number":104,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_after_change, dhcp_ip))"},{"line_number":105,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_1142a468","line":102,"updated":"2016-01-31 11:25:57.000000000","message":"Same here","commit_id":"205193a08f52180598c37698e99840adbc18a666"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"824ce414f4c04c0508fcd16938180b709c5f92c1","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        updated_subnet \u003d {\u0027enable_dhcp\u0027: True}"},{"line_number":100,"context_line":"        self.neutron.update_subnet(subnet_id, {\u0027subnet\u0027: updated_subnet})"},{"line_number":101,"context_line":"        dhcp_ip \u003d self.get_dhcp_ip(network_id, subnet_id)"},{"line_number":102,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":103,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_before_change, dhcp_ip))"},{"line_number":104,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_after_change, dhcp_ip))"},{"line_number":105,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_7c496f5f","line":102,"in_reply_to":"7a5de9d1_1142a468","updated":"2016-01-31 11:49:25.000000000","message":"Done","commit_id":"205193a08f52180598c37698e99840adbc18a666"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6f7ea7c9d709005de926e664e3ae689512d2d382","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        subnet_msg \u003d {\u0027subnet_id\u0027: subnet_id}"},{"line_number":130,"context_line":"        self.neutron.add_interface_router(router_id, body\u003dsubnet_msg)"},{"line_number":131,"context_line":"        dhcp_ip \u003d self.get_dhcp_ip(network_id, subnet_id)"},{"line_number":132,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":133,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":134,"context_line":"        flows_after_change \u003d ovs.dump()"},{"line_number":135,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_before_change, dhcp_ip))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_d1608c03","line":132,"updated":"2016-01-31 11:25:57.000000000","message":"Same here","commit_id":"205193a08f52180598c37698e99840adbc18a666"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"824ce414f4c04c0508fcd16938180b709c5f92c1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        subnet_msg \u003d {\u0027subnet_id\u0027: subnet_id}"},{"line_number":130,"context_line":"        self.neutron.add_interface_router(router_id, body\u003dsubnet_msg)"},{"line_number":131,"context_line":"        dhcp_ip \u003d self.get_dhcp_ip(network_id, subnet_id)"},{"line_number":132,"context_line":"        self.assertTrue(dhcp_ip)"},{"line_number":133,"context_line":"        time.sleep(DEFAULT_CMD_TIMEOUT)"},{"line_number":134,"context_line":"        flows_after_change \u003d ovs.dump()"},{"line_number":135,"context_line":"        self.assertFalse(self.check_dhcp_rule(flows_before_change, dhcp_ip))"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_9c46ab4d","line":132,"in_reply_to":"7a5de9d1_d1608c03","updated":"2016-01-31 11:49:25.000000000","message":"Done","commit_id":"205193a08f52180598c37698e99840adbc18a666"}],"dragonflow/tests/fullstack/test_objects.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6f7ea7c9d709005de926e664e3ae689512d2d382","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return False"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class OvsTestWarapper(object):"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_ovs_flows(self):"},{"line_number":89,"context_line":"        full_args \u003d [\"ovs-ofctl\", \"dump-flows\", \u0027br-int\u0027, \u0027-O Openflow13\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_91569428","line":86,"updated":"2016-01-31 11:25:57.000000000","message":"This looks more like a (very handy) utility class, rather than a test wrapper. Maybe move to a utility file?","commit_id":"205193a08f52180598c37698e99840adbc18a666"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"684f0fd2ce07eab39b565ed98c24cd6ce89b330e","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        return False"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"class OvsTestWarapper(object):"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def _get_ovs_flows(self):"},{"line_number":89,"context_line":"        full_args \u003d [\"ovs-ofctl\", \"dump-flows\", \u0027br-int\u0027, \u0027-O Openflow13\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_5c67d34c","line":86,"in_reply_to":"7a5de9d1_91569428","updated":"2016-01-31 13:15:53.000000000","message":"Done","commit_id":"205193a08f52180598c37698e99840adbc18a666"}]}
