)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5290c6f2a81841cbb025ee0d11f608ccf0027331","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix security group list when not defined for an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If an instance have an empty security group list and exception"},{"line_number":10,"context_line":"is thrown due to iteration attempt of None."},{"line_number":11,"context_line":"get_instance_security_group will return an empty list instead"},{"line_number":12,"context_line":"of None"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAXH%2F%2FdKc%3D","line":9,"updated":"2014-04-21 16:32:38.000000000","message":"s/have/has/\n\ns/and/an/","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"f4725a254e0d3fffcdf9108a93a3d508d4bc2e5c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix security group list when not defined for an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If an instance have an empty security group list and exception"},{"line_number":10,"context_line":"is thrown due to iteration attempt of None."},{"line_number":11,"context_line":"get_instance_security_group will return an empty list instead"},{"line_number":12,"context_line":"of None"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAXX%2F%2F4Vg%3D","line":9,"in_reply_to":"AAAAXH%2F%2FdKc%3D","updated":"2014-04-25 16:04:38.000000000","message":"Done. ( i don\u0027t see any \u0027and\u0027 for the second suggestion)","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5290c6f2a81841cbb025ee0d11f608ccf0027331","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If an instance have an empty security group list and exception"},{"line_number":10,"context_line":"is thrown due to iteration attempt of None."},{"line_number":11,"context_line":"get_instance_security_group will return an empty list instead"},{"line_number":12,"context_line":"of None"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7efb3c3a58d7e20501d126c6d194479ca1d14166"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAXH%2F%2FdKE%3D","line":11,"updated":"2014-04-21 16:32:38.000000000","message":"Please separate these with a blank line and preface with something like \"To fix this, this patch modifies get_instance_security_group to return an empty list instead of None.\"","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"f4725a254e0d3fffcdf9108a93a3d508d4bc2e5c","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If an instance have an empty security group list and exception"},{"line_number":10,"context_line":"is thrown due to iteration attempt of None."},{"line_number":11,"context_line":"get_instance_security_group will return an empty list instead"},{"line_number":12,"context_line":"of None"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I7efb3c3a58d7e20501d126c6d194479ca1d14166"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAXX%2F%2F4VY%3D","line":11,"in_reply_to":"AAAAXH%2F%2FdKE%3D","updated":"2014-04-25 16:04:38.000000000","message":"Done","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"771181caa5f6e95cd674fe963eaca14be35b7ec4","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix security group list when not defined for an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If an instance has an empty security group list and exception"},{"line_number":10,"context_line":"is thrown due to iteration attempt of None."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"To fix this, this patch modifies get_instance_security_group"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9ad9bd40_1f3c242f","line":9,"updated":"2014-04-30 21:07:38.000000000","message":"s/and exception/an exception/","commit_id":"d9a5747081b2f92fcd263df3a54a3a0e8e71143c"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"5c33d2e909f20fffb49e8629458508ef4fb3db1a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix security group list when not defined for an instance"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If an instance has an empty security group list and exception"},{"line_number":10,"context_line":"is thrown due to iteration attempt of None."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"To fix this, this patch modifies get_instance_security_group"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9ad9bd40_2118ee80","line":9,"in_reply_to":"9ad9bd40_1f3c242f","updated":"2014-05-01 00:39:44.000000000","message":"thanks","commit_id":"d9a5747081b2f92fcd263df3a54a3a0e8e71143c"}],"nova/api/openstack/compute/contrib/security_groups.py":[{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"d9bcfca074a58bc9c549c95d51581e84d859b4a8","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        with translate_exceptions():"},{"line_number":432,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"},{"line_number":433,"context_line":"            groups \u003d self.security_group_api.get_instance_security_groups("},{"line_number":434,"context_line":"                context, instance[\u0027uuid\u0027], True)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        if groups:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Fn9Q%3D","line":433,"updated":"2014-04-18 18:18:29.000000000","message":"Shouldn\u0027t the bug be fixed here?  I would assume that get_instance_security_groups returns an empty list (what would make sense).","commit_id":"b5ea8357c08e9c408d40d757f7fc03c12591c6d7"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"3b2b5c14f80c78524fa7d513ec5cea8d0eb9f9d1","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":"        with translate_exceptions():"},{"line_number":432,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"},{"line_number":433,"context_line":"            groups \u003d self.security_group_api.get_instance_security_groups("},{"line_number":434,"context_line":"                context, instance[\u0027uuid\u0027], True)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        if groups:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2Flf4%3D","line":433,"in_reply_to":"AAAAXH%2F%2Fn9Q%3D","updated":"2014-04-19 00:34:12.000000000","message":"Yes, i will check first in the code if that assumption is expected or not ( ex: if someone is expecting None or not ).\nIn that case, will fix it there.\nthanks","commit_id":"b5ea8357c08e9c408d40d757f7fc03c12591c6d7"}],"nova/network/security_group/neutron_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5290c6f2a81841cbb025ee0d11f608ccf0027331","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        servers \u003d [{\u0027id\u0027: instance_uuid}]"},{"line_number":381,"context_line":"        sg_bindings \u003d self.get_instances_security_groups_bindings("},{"line_number":382,"context_line":"                                  context, servers, detailed)"},{"line_number":383,"context_line":"        return sg_bindings.get(instance_uuid, [])"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _has_security_group_requirements(self, port):"},{"line_number":386,"context_line":"        port_security_enabled \u003d port.get(\u0027port_security_enabled\u0027, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FdIs%3D","line":383,"updated":"2014-04-21 16:32:38.000000000","message":"Looks like you could have the same problem with nova-network:\n\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L3914","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"f4725a254e0d3fffcdf9108a93a3d508d4bc2e5c","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        servers \u003d [{\u0027id\u0027: instance_uuid}]"},{"line_number":381,"context_line":"        sg_bindings \u003d self.get_instances_security_groups_bindings("},{"line_number":382,"context_line":"                                  context, servers, detailed)"},{"line_number":383,"context_line":"        return sg_bindings.get(instance_uuid, [])"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _has_security_group_requirements(self, port):"},{"line_number":386,"context_line":"        port_security_enabled \u003d port.get(\u0027port_security_enabled\u0027, True)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2F4Tk%3D","line":383,"in_reply_to":"AAAAXH%2F%2FdIs%3D","updated":"2014-04-25 16:04:38.000000000","message":"Done","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"}],"nova/tests/api/openstack/compute/contrib/test_neutron_security_groups.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d22247e4668732422f154363874c4a2bdae0fdaf","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from lxml import etree"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_0596694c","line":15,"updated":"2014-05-02 17:28:46.000000000","message":"mock is a third party import. can you please this in the section below","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"32b6d7539de85b17ecec4f654ca29b74da2a60b3","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from lxml import etree"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_125ea812","line":15,"in_reply_to":"9ad9bd40_0596694c","updated":"2014-05-02 18:02:43.000000000","message":"It\u0027s not a 3rd party import if you\u0027re using python 3, so I\u0027d consider this a nit and not worth rev\u0027ing unless there are other changes worth respinning.","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"2e48311579f39bcc3149ad31558bead0b3937a5f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"import mock"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from lxml import etree"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_c8b00c8e","line":15,"in_reply_to":"9ad9bd40_125ea812","updated":"2014-05-02 23:10:20.000000000","message":"Will update it , since need to upload a new patchset. thanks","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ce72a7e65add9fec966417db8d91091009542326","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            context.get_admin_context(), test_security_groups.FAKE_UUID1)"},{"line_number":358,"context_line":"        self.assertEqual(sgs, expected)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    @mock.patch(\u0027nova.network.security_group.neutron_driver.SecurityGroupAPI.\u0027"},{"line_number":361,"context_line":"                \u0027get_instances_security_groups_bindings\u0027)"},{"line_number":362,"context_line":"    def test_get_security_group_empty_for_instance(self, neutron_sg_bind_mock):"},{"line_number":363,"context_line":"        servers \u003d [{\u0027id\u0027: test_security_groups.FAKE_UUID1}]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_6072d57d","line":360,"updated":"2014-05-02 01:43:44.000000000","message":"FWIW since we have the import I think you can just do:\n\n@mock.patch(neutron_driver.SecurityGroupAPI.get_instances_security_groups_bindings)","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"2e48311579f39bcc3149ad31558bead0b3937a5f","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            context.get_admin_context(), test_security_groups.FAKE_UUID1)"},{"line_number":358,"context_line":"        self.assertEqual(sgs, expected)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    @mock.patch(\u0027nova.network.security_group.neutron_driver.SecurityGroupAPI.\u0027"},{"line_number":361,"context_line":"                \u0027get_instances_security_groups_bindings\u0027)"},{"line_number":362,"context_line":"    def test_get_security_group_empty_for_instance(self, neutron_sg_bind_mock):"},{"line_number":363,"context_line":"        servers \u003d [{\u0027id\u0027: test_security_groups.FAKE_UUID1}]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_c86d6c34","line":360,"in_reply_to":"9ad9bd40_6072d57d","updated":"2014-05-02 23:10:20.000000000","message":"I tried that, but it throw a \u0027neutron_driver\u0027 import could not be found.","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d22247e4668732422f154363874c4a2bdae0fdaf","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                test_security_groups.FAKE_UUID1)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        neutron_sg_bind_mock.assert_called_once_with(ctx, servers, False)"},{"line_number":372,"context_line":"        self.assertEqual(sgs, [])"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_create_port_with_sg_and_port_security_enabled_true(self):"},{"line_number":375,"context_line":"        sg1 \u003d self._create_sg_template(name\u003d\u0027test1\u0027).get(\u0027security_group\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_25c60d4a","line":372,"updated":"2014-05-02 17:28:46.000000000","message":"please have the expected value first","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"2e48311579f39bcc3149ad31558bead0b3937a5f","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                test_security_groups.FAKE_UUID1)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        neutron_sg_bind_mock.assert_called_once_with(ctx, servers, False)"},{"line_number":372,"context_line":"        self.assertEqual(sgs, [])"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_create_port_with_sg_and_port_security_enabled_true(self):"},{"line_number":375,"context_line":"        sg1 \u003d self._create_sg_template(name\u003d\u0027test1\u0027).get(\u0027security_group\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_a88748d6","line":372,"in_reply_to":"9ad9bd40_25c60d4a","updated":"2014-05-02 23:10:20.000000000","message":"Done","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"}],"nova/tests/api/openstack/compute/contrib/test_security_groups.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3841f8663c2b234c99e85060e2c8f63f00f88072","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            self.assertEqual(server_id, FAKE_UUID1)"},{"line_number":383,"context_line":"            return return_server_by_uuid(context, server_id)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        self.stubs.Set(nova.db, \u0027instance_get_by_uuid\u0027,"},{"line_number":386,"context_line":"                       return_instance)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        def return_security_groups(context, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FpL0%3D","line":385,"updated":"2014-04-18 15:15:01.000000000","message":"can you please make use of mock here","commit_id":"b5ea8357c08e9c408d40d757f7fc03c12591c6d7"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"3b2b5c14f80c78524fa7d513ec5cea8d0eb9f9d1","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            self.assertEqual(server_id, FAKE_UUID1)"},{"line_number":383,"context_line":"            return return_server_by_uuid(context, server_id)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        self.stubs.Set(nova.db, \u0027instance_get_by_uuid\u0027,"},{"line_number":386,"context_line":"                       return_instance)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        def return_security_groups(context, instance_uuid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAXH%2F%2FlqM%3D","line":385,"in_reply_to":"AAAAXH%2F%2FpL0%3D","updated":"2014-04-19 00:34:12.000000000","message":"Done","commit_id":"b5ea8357c08e9c408d40d757f7fc03c12591c6d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"771181caa5f6e95cd674fe963eaca14be35b7ec4","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @mock.patch(\u0027nova.db.instance_get_by_uuid\u0027)"},{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.security_group_get_by_instance\u0027)"},{"line_number":386,"context_line":"    def test_get_security_group_empty_for_instance(self, mock_sec_group,"},{"line_number":387,"context_line":"                                                   mock_db_get_ins):"},{"line_number":388,"context_line":"        expected \u003d {\u0027security_groups\u0027: []}"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad9bd40_ff8860c8","line":386,"updated":"2014-04-30 21:07:38.000000000","message":"Hmm, we also have a test_security_groups.py for nova v3 API testing, but it\u0027s not one-to-one with the tests in this v2 test module, not sure if it needs to be, i.e. do we also need this test in the v3 test module.  Would be a question for Chris Yeoh or Kenichi Oomichi:\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/tests/api/openstack/compute/plugins/v3/test_security_groups.py\n\nI think you also need a companion test here:\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/tests/api/openstack/compute/contrib/test_neutron_security_groups.py\n\nSince the neutron security group API test module extends the nova-network one (this one).","commit_id":"d9a5747081b2f92fcd263df3a54a3a0e8e71143c"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"5c33d2e909f20fffb49e8629458508ef4fb3db1a","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @mock.patch(\u0027nova.db.instance_get_by_uuid\u0027)"},{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.security_group_get_by_instance\u0027)"},{"line_number":386,"context_line":"    def test_get_security_group_empty_for_instance(self, mock_sec_group,"},{"line_number":387,"context_line":"                                                   mock_db_get_ins):"},{"line_number":388,"context_line":"        expected \u003d {\u0027security_groups\u0027: []}"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad9bd40_c40590c3","line":386,"in_reply_to":"9ad9bd40_61511662","updated":"2014-05-01 00:39:44.000000000","message":"thanks, will add the proper companion test as matt requested.","commit_id":"d9a5747081b2f92fcd263df3a54a3a0e8e71143c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"72bcb45453e530d63e8498a9acfa62287f0d3b85","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @mock.patch(\u0027nova.db.instance_get_by_uuid\u0027)"},{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.security_group_get_by_instance\u0027)"},{"line_number":386,"context_line":"    def test_get_security_group_empty_for_instance(self, mock_sec_group,"},{"line_number":387,"context_line":"                                                   mock_db_get_ins):"},{"line_number":388,"context_line":"        expected \u003d {\u0027security_groups\u0027: []}"},{"line_number":389,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad9bd40_61511662","line":386,"in_reply_to":"9ad9bd40_ff8860c8","updated":"2014-05-01 00:04:29.000000000","message":"@Matt, that is a nice point.\n\n \u003e we also have a test_security_groups.py for nova v3 API testing, but it\u0027s not one-to-one\n \u003e with the tests in this v2 test module, not sure if it needs to be, i.e. do we also need this\n \u003e test in the v3 test module.\n\nAs you said, many tests of v3 test_security_groups.py have been removed from v2 one.\nThe reason is that nova-network API of v3 has been removed and the related tests also have been done with I3b75143cd13faab5b1eb6f832876d29636e76fd0 and I617eee5660447bc61518b89eed73ce394f7435a2\n\nActually, v2 API contains \"create a security group\" API at https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/contrib/security_groups.py#L301 , but v3 one(https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/plugins/v3/security_groups.py) does not contain it.","commit_id":"d9a5747081b2f92fcd263df3a54a3a0e8e71143c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d22247e4668732422f154363874c4a2bdae0fdaf","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @mock.patch(\u0027nova.db.instance_get_by_uuid\u0027)"},{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.security_group_get_by_instance\u0027)"},{"line_number":386,"context_line":"    def test_get_security_group_empty_for_instance(self, mock_sec_group,"},{"line_number":387,"context_line":"                                                   mock_db_get_ins):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_e510a5aa","line":384,"updated":"2014-05-02 17:28:46.000000000","message":"question - should we rather be using an instance get here rather than the db get?","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"32b6d7539de85b17ecec4f654ca29b74da2a60b3","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @mock.patch(\u0027nova.db.instance_get_by_uuid\u0027)"},{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.security_group_get_by_instance\u0027)"},{"line_number":386,"context_line":"    def test_get_security_group_empty_for_instance(self, mock_sec_group,"},{"line_number":387,"context_line":"                                                   mock_db_get_ins):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_b2c41c93","line":384,"in_reply_to":"9ad9bd40_e510a5aa","updated":"2014-05-02 18:02:43.000000000","message":"This is simply mocking the same thing as the previous test, see line 368.","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d22247e4668732422f154363874c4a2bdae0fdaf","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @mock.patch(\u0027nova.db.instance_get_by_uuid\u0027)"},{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.security_group_get_by_instance\u0027)"},{"line_number":386,"context_line":"    def test_get_security_group_empty_for_instance(self, mock_sec_group,"},{"line_number":387,"context_line":"                                                   mock_db_get_ins):"},{"line_number":388,"context_line":"        expected \u003d {\u0027security_groups\u0027: []}"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_65a65555","line":385,"updated":"2014-05-02 17:28:46.000000000","message":"This can be:\n@mock.patch(nova.db, \u0027security_group_get_by_instance\u0027, return_value\u003d[])\nthe you can drop lines 396-398\n\nyou can also call assert caled once with - to check the parameters","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"2e48311579f39bcc3149ad31558bead0b3937a5f","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @mock.patch(\u0027nova.db.instance_get_by_uuid\u0027)"},{"line_number":385,"context_line":"    @mock.patch(\u0027nova.db.security_group_get_by_instance\u0027)"},{"line_number":386,"context_line":"    def test_get_security_group_empty_for_instance(self, mock_sec_group,"},{"line_number":387,"context_line":"                                                   mock_db_get_ins):"},{"line_number":388,"context_line":"        expected \u003d {\u0027security_groups\u0027: []}"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_e8fdd03c","line":385,"in_reply_to":"9ad9bd40_65a65555","updated":"2014-05-02 23:10:20.000000000","message":"Done","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d22247e4668732422f154363874c4a2bdae0fdaf","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/%s/servers/%s/os-security-groups\u0027 %"},{"line_number":402,"context_line":"                                      (\u0027fake\u0027, FAKE_UUID1))"},{"line_number":403,"context_line":"        res_dict \u003d self.server_controller.index(req, FAKE_UUID1)"},{"line_number":404,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def test_get_security_group_by_instance_non_existing(self):"},{"line_number":407,"context_line":"        self.stubs.Set(nova.db, \u0027instance_get\u0027, return_server_nonexistent)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_c58481d6","line":404,"updated":"2014-05-02 17:28:46.000000000","message":"please have the expected first","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"2e48311579f39bcc3149ad31558bead0b3937a5f","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        req \u003d fakes.HTTPRequest.blank(\u0027/v2/%s/servers/%s/os-security-groups\u0027 %"},{"line_number":402,"context_line":"                                      (\u0027fake\u0027, FAKE_UUID1))"},{"line_number":403,"context_line":"        res_dict \u003d self.server_controller.index(req, FAKE_UUID1)"},{"line_number":404,"context_line":"        self.assertEqual(res_dict, expected)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def test_get_security_group_by_instance_non_existing(self):"},{"line_number":407,"context_line":"        self.stubs.Set(nova.db, \u0027instance_get\u0027, return_server_nonexistent)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_c802cc3d","line":404,"in_reply_to":"9ad9bd40_c58481d6","updated":"2014-05-02 23:10:20.000000000","message":"Done","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"}],"nova/tests/network/security_group/test_neutron_driver.py":[{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"8be50ce2352c96e21506a4c9d3c8020d8d78f72e","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self.assertEqual(result, sg_bindings)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_instance_empty_security_groups(self):"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        port_list \u003d {\u0027ports\u0027: [{\u0027id\u0027: 1, \u0027device_id\u0027: \u00271\u0027,"},{"line_number":217,"context_line":"                     \u0027security_groups\u0027: []}]}"},{"line_number":218,"context_line":"        self.moxed_client.list_ports(device_id\u003d[\u00271\u0027]).AndReturn(port_list)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FlaM%3D","line":215,"updated":"2014-04-19 01:05:24.000000000","message":"i am using mox here since the setup is checking for get_client calls.\ni plan to refactor all the test file in a new patch.","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"f4725a254e0d3fffcdf9108a93a3d508d4bc2e5c","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self.assertEqual(result, sg_bindings)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_instance_empty_security_groups(self):"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        port_list \u003d {\u0027ports\u0027: [{\u0027id\u0027: 1, \u0027device_id\u0027: \u00271\u0027,"},{"line_number":217,"context_line":"                     \u0027security_groups\u0027: []}]}"},{"line_number":218,"context_line":"        self.moxed_client.list_ports(device_id\u003d[\u00271\u0027]).AndReturn(port_list)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXX%2F%2F4SU%3D","line":215,"in_reply_to":"AAAAXH%2F%2FdHg%3D","updated":"2014-04-25 16:04:38.000000000","message":"Great, looks good.","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5290c6f2a81841cbb025ee0d11f608ccf0027331","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self.assertEqual(result, sg_bindings)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_instance_empty_security_groups(self):"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        port_list \u003d {\u0027ports\u0027: [{\u0027id\u0027: 1, \u0027device_id\u0027: \u00271\u0027,"},{"line_number":217,"context_line":"                     \u0027security_groups\u0027: []}]}"},{"line_number":218,"context_line":"        self.moxed_client.list_ports(device_id\u003d[\u00271\u0027]).AndReturn(port_list)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAXH%2F%2FdHg%3D","line":215,"in_reply_to":"AAAAXH%2F%2FlaM%3D","updated":"2014-04-21 16:32:38.000000000","message":"Yeah, the existing setup with mox makes using mock messy here, we don\u0027t want to mix mox and mock together per the review guidelines (#4 here):\n\nhttps://wiki.openstack.org/wiki/ReviewChecklist#Common_Review_Checklist\n\nWhat I\u0027ve done elsewhere is create a new test class that uses mock for neutronv2 api tests:\n\nhttps://review.openstack.org/#/c/43822/34/nova/tests/network/test_neutronv2.py","commit_id":"19c1c98157bb1fea3c347aa8d0cad495b790d95d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d22247e4668732422f154363874c4a2bdae0fdaf","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        port_list \u003d {\u0027ports\u0027: [{\u0027id\u0027: 1, \u0027device_id\u0027: \u00271\u0027,"},{"line_number":217,"context_line":"                     \u0027security_groups\u0027: []}]}"},{"line_number":218,"context_line":"        self.moxed_client.list_ports(device_id\u003d[\u00271\u0027]).AndReturn(port_list)"},{"line_number":219,"context_line":"        self.mox.ReplayAll()"},{"line_number":220,"context_line":"        sg_api \u003d neutron_driver.SecurityGroupAPI()"},{"line_number":221,"context_line":"        result \u003d sg_api.get_instance_security_groups(self.context, \u00271\u0027)"},{"line_number":222,"context_line":"        self.assertEqual(result, [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_45595159","line":219,"updated":"2014-05-02 17:28:46.000000000","message":"can you please use mock instead of mox?","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"32b6d7539de85b17ecec4f654ca29b74da2a60b3","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        port_list \u003d {\u0027ports\u0027: [{\u0027id\u0027: 1, \u0027device_id\u0027: \u00271\u0027,"},{"line_number":217,"context_line":"                     \u0027security_groups\u0027: []}]}"},{"line_number":218,"context_line":"        self.moxed_client.list_ports(device_id\u003d[\u00271\u0027]).AndReturn(port_list)"},{"line_number":219,"context_line":"        self.mox.ReplayAll()"},{"line_number":220,"context_line":"        sg_api \u003d neutron_driver.SecurityGroupAPI()"},{"line_number":221,"context_line":"        result \u003d sg_api.get_instance_security_groups(self.context, \u00271\u0027)"},{"line_number":222,"context_line":"        self.assertEqual(result, [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_72f454f2","line":219,"in_reply_to":"9ad9bd40_45595159","updated":"2014-05-02 18:02:43.000000000","message":"Can\u0027t use mock in here without resetting the mox stubs in the setup, so it really requires a whole new test class that only uses mock if you want to do that, and I don\u0027t think it should be required in this case.  We have the same problem in all of the neutron tests right now because of how their setup uses mox to get the client.","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"2e48311579f39bcc3149ad31558bead0b3937a5f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        port_list \u003d {\u0027ports\u0027: [{\u0027id\u0027: 1, \u0027device_id\u0027: \u00271\u0027,"},{"line_number":217,"context_line":"                     \u0027security_groups\u0027: []}]}"},{"line_number":218,"context_line":"        self.moxed_client.list_ports(device_id\u003d[\u00271\u0027]).AndReturn(port_list)"},{"line_number":219,"context_line":"        self.mox.ReplayAll()"},{"line_number":220,"context_line":"        sg_api \u003d neutron_driver.SecurityGroupAPI()"},{"line_number":221,"context_line":"        result \u003d sg_api.get_instance_security_groups(self.context, \u00271\u0027)"},{"line_number":222,"context_line":"        self.assertEqual(result, [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_4896bcf1","line":219,"in_reply_to":"9ad9bd40_72f454f2","updated":"2014-05-02 23:10:20.000000000","message":"garyk, this was discussed in older patchsets.\nOnce the new test suite class using mock is in place, we can migrate this ones.","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d22247e4668732422f154363874c4a2bdae0fdaf","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.mox.ReplayAll()"},{"line_number":220,"context_line":"        sg_api \u003d neutron_driver.SecurityGroupAPI()"},{"line_number":221,"context_line":"        result \u003d sg_api.get_instance_security_groups(self.context, \u00271\u0027)"},{"line_number":222,"context_line":"        self.assertEqual(result, [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_e53fc5d4","line":222,"updated":"2014-05-02 17:28:46.000000000","message":"expected first please","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"},{"author":{"_account_id":9275,"name":"Leandro Ignacio Costantino","email":"leandro.i.costantino@intel.com","username":"lcostantino"},"change_message_id":"2e48311579f39bcc3149ad31558bead0b3937a5f","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.mox.ReplayAll()"},{"line_number":220,"context_line":"        sg_api \u003d neutron_driver.SecurityGroupAPI()"},{"line_number":221,"context_line":"        result \u003d sg_api.get_instance_security_groups(self.context, \u00271\u0027)"},{"line_number":222,"context_line":"        self.assertEqual(result, [])"}],"source_content_type":"text/x-python","patch_set":6,"id":"9ad9bd40_a8a3c84d","line":222,"in_reply_to":"9ad9bd40_e53fc5d4","updated":"2014-05-02 23:10:20.000000000","message":"Done","commit_id":"6744d9aeb10679ccd9d62214e886df85e120973f"}]}
