)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":333,"name":"Isaku Yamahata","email":"isaku.yamahata@gmail.com","username":"yamahata"},"change_message_id":"ddb29c0d75f3ac0888e945852780f55308632f85","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All commands executing \u0027run_vsctl\u0027 should appropriately raise the"},{"line_number":10,"context_line":"RuntimeError when do a adding/setting operation and avoid raising the"},{"line_number":11,"context_line":"RuntimeError when do a getting operation."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"* Add \u0027check_error\u003dTrue\u0027 option for vsctl cammands to add/set values"},{"line_number":14,"context_line":"* Add \u0027--if-exist\u0027 option for vsctl cammands to get value without unwanted"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAUX%2F%2B6wM%3D","line":11,"updated":"2014-02-18 07:56:57.000000000","message":"Is this requirement for ovs agent?\nHow about other ovs-based agents? This patch affects all the ovs-based agents. ryu and nec. Did you check it?\n\nSince ovs_lib should be generic, check_error options should be added to each method, not run_vsctl.\nProbably default argument can be set True for add/set, False for get.","commit_id":"cadc7be293e624f8e8a71a62466f2f4173627a50"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"f7978b6265320aa74ed06828fce40757fd1dcd84","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"All commands executing \u0027run_vsctl\u0027 should appropriately raise the"},{"line_number":10,"context_line":"RuntimeError when do a adding/setting operation and avoid raising the"},{"line_number":11,"context_line":"RuntimeError when do a getting operation."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"* Add \u0027check_error\u003dTrue\u0027 option for vsctl cammands to add/set values"},{"line_number":14,"context_line":"* Add \u0027--if-exist\u0027 option for vsctl cammands to get value without unwanted"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAUX%2F%2B4Oo%3D","line":11,"in_reply_to":"AAAAUX%2F%2B6wM%3D","updated":"2014-02-18 13:20:30.000000000","message":"Yes, IMO, this is requirement for ovs agent, for example it\u0027s supposed to report an error when adding bridge failed to avoid further more wrong jobs.\n\nI didn\u0027t check any ovs-based agents, don\u0027t know why ryu failed, it should be work, but I\u0027ll check later.\n\nthe check_error options is provided by the command run_vsctl, default is false indeed, so  I don\u0027t think it\u0027s neccessary to add check_error option fro each method, maybe I miss your point? thanks for your comments.","commit_id":"cadc7be293e624f8e8a71a62466f2f4173627a50"}],"neutron/agent/linux/ovs_lib.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95c5be3a4597d33037c82dce27ca54f5cef2008d","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            self.run_vsctl([\"--\", \"--may-exist\", \"add-port\", self.br_name,"},{"line_number":123,"context_line":"                            port_name], check_error\u003dTrue)"},{"line_number":124,"context_line":"        except RuntimeError:"},{"line_number":125,"context_line":"            raise"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        return self.get_port_ofport(port_name)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F89O0%3D","line":125,"updated":"2013-12-18 12:19:35.000000000","message":"you should not be ignoring other exceptions.\nI would therefore just remove the try..except","commit_id":"0dd7681b1d2f672d360a0d5bcb7b2a1539e2fe13"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"77ff48e7d5065fc9fc667f4e8d5ea7bcae8444e0","unresolved":false,"context_lines":[{"line_number":122,"context_line":"            self.run_vsctl([\"--\", \"--may-exist\", \"add-port\", self.br_name,"},{"line_number":123,"context_line":"                            port_name], check_error\u003dTrue)"},{"line_number":124,"context_line":"        except RuntimeError:"},{"line_number":125,"context_line":"            raise"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        return self.get_port_ofport(port_name)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F82l8%3D","line":125,"in_reply_to":"AAAATn%2F89O0%3D","updated":"2013-12-19 15:32:01.000000000","message":"Will update,  thanks.","commit_id":"0dd7681b1d2f672d360a0d5bcb7b2a1539e2fe13"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95c5be3a4597d33037c82dce27ca54f5cef2008d","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_port(self, port_name):"},{"line_number":130,"context_line":"        self.run_vsctl([\"--\", \"--if-exists\", \"del-port\", self.br_name,"},{"line_number":131,"context_line":"                        port_name])"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def set_db_attribute(self, table_name, record, column, value):"},{"line_number":134,"context_line":"        args \u003d [\"set\", table_name, record, \"%s\u003d%s\" % (column, value)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F89Ow%3D","line":131,"updated":"2013-12-18 12:19:35.000000000","message":"what about all the other commands where we ignore the error?","commit_id":"0dd7681b1d2f672d360a0d5bcb7b2a1539e2fe13"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"77ff48e7d5065fc9fc667f4e8d5ea7bcae8444e0","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def delete_port(self, port_name):"},{"line_number":130,"context_line":"        self.run_vsctl([\"--\", \"--if-exists\", \"del-port\", self.br_name,"},{"line_number":131,"context_line":"                        port_name])"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def set_db_attribute(self, table_name, record, column, value):"},{"line_number":134,"context_line":"        args \u003d [\"set\", table_name, record, \"%s\u003d%s\" % (column, value)]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F82lc%3D","line":131,"in_reply_to":"AAAATn%2F89Ow%3D","updated":"2013-12-19 15:32:01.000000000","message":"Yeah, nice thoughts, I will try to find out all other commands.","commit_id":"0dd7681b1d2f672d360a0d5bcb7b2a1539e2fe13"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4adb550cf174f649b3fb4ac93dda7617ff098603","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.run_vsctl(args, check_error\u003dTrue)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def clear_db_attribute(self, table_name, record, column):"},{"line_number":137,"context_line":"        args \u003d [\"--\", \"--if-exists\", \"clear\", table_name, record, column]"},{"line_number":138,"context_line":"        self.run_vsctl(args)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def run_ofctl(self, cmd, args, process_input\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F3%2FM%3D","line":137,"updated":"2014-01-07 11:06:16.000000000","message":"to the best of my knowledge if-exists applies only to commands for removing bridges or ports.\nIt should have not effect here, and should be removed in this case.","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"59736289c0f3a6227de71c64592a5f5351ea1270","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        self.run_vsctl(args, check_error\u003dTrue)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def clear_db_attribute(self, table_name, record, column):"},{"line_number":137,"context_line":"        args \u003d [\"--\", \"--if-exists\", \"clear\", table_name, record, column]"},{"line_number":138,"context_line":"        self.run_vsctl(args)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def run_ofctl(self, cmd, args, process_input\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FsGo%3D","line":137,"in_reply_to":"AAAAUH%2F%2F3%2FM%3D","updated":"2014-01-09 15:41:22.000000000","message":"Pls see the following compared results:\nxianghui@xianghui:~$ sudo ovs-vsctl clear Interface tap99 ofport\novs-vsctl: no row \"tap99\" in table Interface\nxianghui@xianghui:~$ sudo ovs-vsctl --if-exists clear Interface tap99 ofport\n\nBut I am not sure the \"clear\" action should return an empty value if the clear contents do not exist, help to give more comments.","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4adb550cf174f649b3fb4ac93dda7617ff098603","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        return self.get_port_ofport(port_name)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def add_patch_port(self, local_name, remote_name):"},{"line_number":269,"context_line":"        self.run_vsctl([\"--\", \"--may-exist\", \"add-port\", self.br_name,"},{"line_number":270,"context_line":"                        local_name, \"--\", \"set\", \"Interface\","},{"line_number":271,"context_line":"                        local_name, \"type\u003dpatch\", \"options:peer\u003d%s\""},{"line_number":272,"context_line":"                        % remote_name], check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F3%2B0%3D","line":269,"updated":"2014-01-07 11:06:16.000000000","message":"I would let the commands fail if the port already exists in this case. Do you have any reason for using --may-exist?","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"59736289c0f3a6227de71c64592a5f5351ea1270","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        return self.get_port_ofport(port_name)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    def add_patch_port(self, local_name, remote_name):"},{"line_number":269,"context_line":"        self.run_vsctl([\"--\", \"--may-exist\", \"add-port\", self.br_name,"},{"line_number":270,"context_line":"                        local_name, \"--\", \"set\", \"Interface\","},{"line_number":271,"context_line":"                        local_name, \"type\u003dpatch\", \"options:peer\u003d%s\""},{"line_number":272,"context_line":"                        % remote_name], check_error\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FsGk%3D","line":269,"in_reply_to":"AAAAUH%2F%2F3%2B0%3D","updated":"2014-01-09 15:41:22.000000000","message":"ok, got it.","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4adb550cf174f649b3fb4ac93dda7617ff098603","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def db_get_map(self, table, record, column):"},{"line_number":276,"context_line":"        output \u003d self.run_vsctl("},{"line_number":277,"context_line":"            [\"--\", \"--if-exists\", \"get\", table, record, column])"},{"line_number":278,"context_line":"        if output:"},{"line_number":279,"context_line":"            output_str \u003d output.rstrip(\"\\n\\r\")"},{"line_number":280,"context_line":"            return self.db_str_to_map(output_str)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F3%2FU%3D","line":277,"updated":"2014-01-07 11:06:16.000000000","message":"to the best of my knowledge if-exists applies only to commands for removing bridges or ports.\nIt should have not effect here, and should be removed in this case.","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"59736289c0f3a6227de71c64592a5f5351ea1270","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def db_get_map(self, table, record, column):"},{"line_number":276,"context_line":"        output \u003d self.run_vsctl("},{"line_number":277,"context_line":"            [\"--\", \"--if-exists\", \"get\", table, record, column])"},{"line_number":278,"context_line":"        if output:"},{"line_number":279,"context_line":"            output_str \u003d output.rstrip(\"\\n\\r\")"},{"line_number":280,"context_line":"            return self.db_str_to_map(output_str)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FsHg%3D","line":277,"in_reply_to":"AAAAUH%2F%2F3%2FU%3D","updated":"2014-01-09 15:41:22.000000000","message":"I just try the following command and personally I think the \"get\" action should not throw exception but an empty value is ok.\n\nxianghui@xianghui:~$ sudo ovs-vsctl --if-exists get Interface tap99 ofport\nxianghui@xianghui:~$ sudo ovs-vsctl get Interface tap99 ofport\novs-vsctl: no row \"tap99\" in table Interface","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"4adb550cf174f649b3fb4ac93dda7617ff098603","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def db_get_val(self, table, record, column):"},{"line_number":284,"context_line":"        output \u003d self.run_vsctl("},{"line_number":285,"context_line":"            [\"--\", \"--if-exists\", \"get\", table, record, column])"},{"line_number":286,"context_line":"        if output:"},{"line_number":287,"context_line":"            return output.rstrip(\"\\n\\r\")"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F3%2FE%3D","line":285,"updated":"2014-01-07 11:06:16.000000000","message":"to the best of my knowledge if-exists applies only to commands for removing bridges or ports.\nIt should have not effect here, and should be removed in this case.","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"59736289c0f3a6227de71c64592a5f5351ea1270","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def db_get_val(self, table, record, column):"},{"line_number":284,"context_line":"        output \u003d self.run_vsctl("},{"line_number":285,"context_line":"            [\"--\", \"--if-exists\", \"get\", table, record, column])"},{"line_number":286,"context_line":"        if output:"},{"line_number":287,"context_line":"            return output.rstrip(\"\\n\\r\")"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2FsHY%3D","line":285,"in_reply_to":"AAAAUH%2F%2F3%2FE%3D","updated":"2014-01-09 15:41:22.000000000","message":"Same as above","commit_id":"c5aa61d737eba7e6993a641937c20585c3710942"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b482ed8a2cc75f4f336f3bddc90d61d612ce8c02","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def db_get_map(self, table, record, column):"},{"line_number":287,"context_line":"        output \u003d self.run_vsctl("},{"line_number":288,"context_line":"            [\"--\", \"--if-exists\", \"get\", table, record, column])"},{"line_number":289,"context_line":"        if output:"},{"line_number":290,"context_line":"            output_str \u003d output.rstrip(\"\\n\\r\")"},{"line_number":291,"context_line":"            return self.db_str_to_map(output_str)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2BcN8%3D","line":288,"updated":"2014-01-26 12:37:04.000000000","message":"Regarding the comment I left on the previous patch...\n\nThis what I do not understand yet:\n\nsalvatore@ubuntu:/opt/stack/neutron$ sudo ovs-vsctl -- --if-exists get port does-not-exist name\novs-vsctl: no row \"does-not-exist\" in table Port\n\nsalvatore@ubuntu:/opt/stack/neutron$ echo $?\n1\n\nsalvatore@ubuntu:/opt/stack/neutron$ sudo ovs-vsctl -- get port does-not-exist name\n\novs-vsctl: no row \"does-not-exist\" in table Port\n\nsalvatore@ubuntu:/opt/stack/neutron$ echo $?\n1\n\n\nIn both cases, either with the --if-exists or without it, there it the same error message and error code.\nSo I do not understand how this change will prevent from raising the runtime error.","commit_id":"c42247ebb37f11315df145a1a43f1ead6e6223a9"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"3ad2247c96256be34719943b8d671c03c0ef118a","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def db_get_map(self, table, record, column):"},{"line_number":287,"context_line":"        output \u003d self.run_vsctl("},{"line_number":288,"context_line":"            [\"--\", \"--if-exists\", \"get\", table, record, column])"},{"line_number":289,"context_line":"        if output:"},{"line_number":290,"context_line":"            output_str \u003d output.rstrip(\"\\n\\r\")"},{"line_number":291,"context_line":"            return self.db_str_to_map(output_str)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2F3l8%3D","line":288,"in_reply_to":"AAAAUH%2F%2BcN8%3D","updated":"2014-02-10 09:31:46.000000000","message":"This is weird~,  the output is different with my env:\nxianghui@xianghui:~$ sudo ovs-vsctl --if-exists get port does-not-exist name\nxianghui@xianghui:~$ sudo ovs-vsctl get port does-not-exist name \novs-vsctl: no row \"does-not-exist\" in table Port\n\nAlso I have found part of a paragraph from the book online named \"ovs-vsctl.pdf\"\nit mentioned as below:\n\n[??if?exists] [??id\u003d@name] get table record [column[:key]]...\nPrints the value of each specified column in the given record in table. For map columns, a key\nmay optionally be specified, in which case the value associated with key in the column is printed,\ninstead of the entire map.\nWithout ??if?exists, it is an error if record does not exist or key is specified, if key does not exist\nin record. With ??if?exists, a missing record yields no output and a missing key prints a blank line.\n\n....\n\nLooks like the db operations could have such an option \"--if-exists\", sorry for my persistent. Any thought is appreciated : )","commit_id":"c42247ebb37f11315df145a1a43f1ead6e6223a9"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"bb528926bd843b57e266360c784beda419e4fa5d","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def db_get_map(self, table, record, column):"},{"line_number":287,"context_line":"        output \u003d self.run_vsctl("},{"line_number":288,"context_line":"            [\"--\", \"--if-exists\", \"get\", table, record, column])"},{"line_number":289,"context_line":"        if output:"},{"line_number":290,"context_line":"            output_str \u003d output.rstrip(\"\\n\\r\")"},{"line_number":291,"context_line":"            return self.db_str_to_map(output_str)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2F5VE%3D","line":288,"in_reply_to":"AAAAUX%2F%2F3l8%3D","updated":"2014-02-24 08:08:23.000000000","message":"Correct the above \"??\" into \"--\"\n[--if-exists] [--id\u003d@name] get table record [column[:key]]... Prints the value of each specified column in the given record in table. For map columns, a key may optionally be specified, in which case the value associated with key in the column is printed, instead of the entire map. Without --if-exists, it is an error if record does not exist or key is specified, if key does not exist in record. With --if-exists, a missing record yields no output and a missing key prints a blank line.\n....\n\n\nI don\u0027t know why in your env, they are the same but in my env you could find the difference:\n\nxianghui@xianghui:~$ sudo ovs-vsctl --if-exists get port does-not-exist name \n\u003cnothing output\u003e\nxianghui@xianghui:~$ sudo ovs-vsctl get port does-not-exist name ovs-vsctl: no row \"does-not-exist\" in table Port","commit_id":"c42247ebb37f11315df145a1a43f1ead6e6223a9"}],"neutron/tests/unit/openvswitch/test_ovs_lib.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"95c5be3a4597d33037c82dce27ca54f5cef2008d","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self.br.reset_bridge()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_add_port_with_ofport(self):"},{"line_number":155,"context_line":"        port_name \u003d \u0027foo\u0027"},{"line_number":156,"context_line":"        ofport \u003d \u00275\u0027"},{"line_number":157,"context_line":"        with mock.patch.object(self.br, \u0027run_vsctl\u0027) as mock_vsctl:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F89N8%3D","line":154,"updated":"2013-12-18 12:19:35.000000000","message":"I am not sure what kind of coverage this specific unit test is adding. Can you explain?\n\nthe other unit test is fine.","commit_id":"0dd7681b1d2f672d360a0d5bcb7b2a1539e2fe13"},{"author":{"_account_id":7823,"name":"Xiang Hui","email":"xianghuir@gmail.com","username":"xianghui"},"change_message_id":"77ff48e7d5065fc9fc667f4e8d5ea7bcae8444e0","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self.br.reset_bridge()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def test_add_port_with_ofport(self):"},{"line_number":155,"context_line":"        port_name \u003d \u0027foo\u0027"},{"line_number":156,"context_line":"        ofport \u003d \u00275\u0027"},{"line_number":157,"context_line":"        with mock.patch.object(self.br, \u0027run_vsctl\u0027) as mock_vsctl:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F82eU%3D","line":154,"in_reply_to":"AAAATn%2F89N8%3D","updated":"2013-12-19 15:32:01.000000000","message":"Hmm. sure, I just saw that lacking the positive unit test about test_add_port(), maybe   it\u0027s better to be renamed to \"test_add_port()\" opposite to \"test_delete_port\".\n\nIs it ok to add this unit test in this patch?","commit_id":"0dd7681b1d2f672d360a0d5bcb7b2a1539e2fe13"}]}
