)]}'
{"shade/tests/unit/fixtures/catalog-v3.json":[{"author":{"_account_id":986,"name":"Rosario Di Somma","email":"rosario.disomma@gmail.com","username":"mr-rods"},"change_message_id":"dfaabb42217ef7a9526aab7434a0a62317005b3f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"            \"id\": \"32466f357f3545248c47471ca51b0d3a\","},{"line_number":11,"context_line":"            \"interface\": \"public\","},{"line_number":12,"context_line":"            \"region\": \"RegionOne\","},{"line_number":13,"context_line":"            \"url\": \"https://compute.example.com/v2.1/\""},{"line_number":14,"context_line":"          }"},{"line_number":15,"context_line":"        ],"},{"line_number":16,"context_line":"        \"name\": \"nova\","}],"source_content_type":"application/json","patch_set":1,"id":"7ffa3b31_b16daacd","side":"PARENT","line":13,"range":{"start_line":13,"start_character":52,"end_line":13,"end_character":53},"updated":"2017-04-19 14:25:17.000000000","message":"The trailing slash produces urls like\nhttps://compute.example.com/v2.1//server/server001/os-volume_attachments which are not going to match with the calls mady by the cinder-client","commit_id":"e7a5475cf654fda99e7767cfbddfe247c7a152b1"}],"shade/tests/unit/test_volume.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"e681aee9d7324898b252989b19babd882ddef408","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            dict(method\u003d\u0027GET\u0027,"},{"line_number":84,"context_line":"                 uri\u003dself.get_mock_url("},{"line_number":85,"context_line":"                     \u0027volumev2\u0027, \u0027public\u0027, append\u003d[\u0027volumes\u0027, \u0027detail\u0027]),"},{"line_number":86,"context_line":"                 json\u003d{\u0027volumes\u0027: [volume]}),"},{"line_number":87,"context_line":"            dict(method\u003d\u0027GET\u0027,"},{"line_number":88,"context_line":"                 uri\u003dself.get_mock_url("},{"line_number":89,"context_line":"                     \u0027volumev2\u0027, \u0027public\u0027, append\u003d[\u0027volumes\u0027, \u0027detail\u0027]),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_0e02fb0b","line":86,"updated":"2017-04-19 14:22:50.000000000","message":"Let\u0027s add a validate\u003d here.","commit_id":"08094904caed5b622538169d818c4d08fb2d63b3"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"e681aee9d7324898b252989b19babd882ddef408","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                     \u0027compute\u0027, \u0027public\u0027,"},{"line_number":111,"context_line":"                     append\u003d[\u0027servers\u0027, server[\u0027id\u0027],"},{"line_number":112,"context_line":"                             \u0027os-volume_attachments\u0027]),"},{"line_number":113,"context_line":"                 json\u003d{\u0027volumeAttachment\u0027: rattach}),"},{"line_number":114,"context_line":"            dict(method\u003d\u0027GET\u0027,"},{"line_number":115,"context_line":"                 uri\u003dself.get_mock_url("},{"line_number":116,"context_line":"                     \u0027volumev2\u0027, \u0027public\u0027, append\u003d[\u0027volumes\u0027, \u0027detail\u0027]),"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_910bce22","line":113,"updated":"2017-04-19 14:22:50.000000000","message":"Let\u0027s add a validate\u003d here too.","commit_id":"08094904caed5b622538169d818c4d08fb2d63b3"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"d513e6fc35017533930394ec0c1f0b17bb5c834d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        ret \u003d self.cloud.attach_volume(server, volume, wait\u003dFalse)"},{"line_number":45,"context_line":"        self.assertEqual("},{"line_number":46,"context_line":"            rattach,"},{"line_number":47,"context_line":"            self.cloud._normalize_volume_attachment(ret))"},{"line_number":48,"context_line":"        self.assert_calls()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_attach_volume_exception(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ffa3b31_57cf7655","line":47,"updated":"2017-04-19 15:39:38.000000000","message":"self.cloud.attach_volume should be the one to call _normalize_volume_attachment. Maybe go ahead and fix that so that we can just do assertEqual(rattach, ret)?","commit_id":"b9d53c11beae6d77b5efa7b43421b378cefedcc8"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"d513e6fc35017533930394ec0c1f0b17bb5c834d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            \"Error attaching volume %s to server %s\" % ("},{"line_number":69,"context_line":"                volume[\u0027id\u0027], server[\u0027id\u0027])"},{"line_number":70,"context_line":"        ):"},{"line_number":71,"context_line":"            self.cloud.attach_volume(server, volume, wait\u003dFalse)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_attach_volume_wait(self):"},{"line_number":74,"context_line":"        server \u003d dict(id\u003d\u0027server001\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ffa3b31_57f89679","line":71,"updated":"2017-04-19 15:39:38.000000000","message":"missing a self.assert_calls()","commit_id":"b9d53c11beae6d77b5efa7b43421b378cefedcc8"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"d513e6fc35017533930394ec0c1f0b17bb5c834d","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            shade.OpenStackCloudException,"},{"line_number":135,"context_line":"            \"Error in attaching volume %s\" % errored_volume[\u0027id\u0027]"},{"line_number":136,"context_line":"        ):"},{"line_number":137,"context_line":"            self.cloud.attach_volume(server, volume)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_attach_volume_not_available(self):"},{"line_number":140,"context_line":"        server \u003d dict(id\u003d\u0027server001\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7ffa3b31_97373e4e","line":137,"updated":"2017-04-19 15:39:38.000000000","message":"missing self.assert_calls()","commit_id":"b9d53c11beae6d77b5efa7b43421b378cefedcc8"},{"author":{"_account_id":986,"name":"Rosario Di Somma","email":"rosario.disomma@gmail.com","username":"mr-rods"},"change_message_id":"defb1dd93b0b3f3e5664904337bff33f52c59256","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                volume[\u0027id\u0027], volume[\u0027status\u0027])"},{"line_number":145,"context_line":"        ):"},{"line_number":146,"context_line":"            self.cloud.attach_volume(server, volume)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def test_attach_volume_already_attached(self):"},{"line_number":149,"context_line":"        device_id \u003d \u0027device001\u0027"},{"line_number":150,"context_line":"        server \u003d dict(id\u003d\u0027server001\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_a7bd44d9","line":147,"updated":"2017-04-20 14:33:59.000000000","message":"A call to self.assert_calls() here is failing because self.adapter.request_history is an empty list(no call have been registered with register_uris) while self.calls is including the calls to keystone(https://github.com/openstack-infra/shade/blob/master/shade/tests/unit/base.py#L587).\nNot sure if this is an intended behaviour but I think would be still nice to be able to call assert_calls in this case to assert that zero calls have been made.","commit_id":"868cc088cc12b6f9b38ea364a3e8b22b49126f24"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"b65abc48ada1f3da599ffab1cf870da43268ec2d","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                volume[\u0027id\u0027], volume[\u0027status\u0027])"},{"line_number":145,"context_line":"        ):"},{"line_number":146,"context_line":"            self.cloud.attach_volume(server, volume)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def test_attach_volume_already_attached(self):"},{"line_number":149,"context_line":"        device_id \u003d \u0027device001\u0027"},{"line_number":150,"context_line":"        server \u003d dict(id\u003d\u0027server001\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_6f1b9280","line":147,"in_reply_to":"7ffa3b31_a7bd44d9","updated":"2017-04-20 15:53:24.000000000","message":"Ah- that\u0027s an excellent question. I believe in this case you can just do self.assertEqual(0, len(self.adapter.request_history))\n\nMaybe we should add a method to RequestsMockTestCase that is \"assert_no_calls\" that does that?","commit_id":"868cc088cc12b6f9b38ea364a3e8b22b49126f24"},{"author":{"_account_id":986,"name":"Rosario Di Somma","email":"rosario.disomma@gmail.com","username":"mr-rods"},"change_message_id":"defb1dd93b0b3f3e5664904337bff33f52c59256","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                volume[\u0027id\u0027], server[\u0027id\u0027], device_id)"},{"line_number":160,"context_line":"        ):"},{"line_number":161,"context_line":"            self.cloud.attach_volume(server, volume)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @mock.patch.object(shade.OpenStackCloud, \u0027nova_client\u0027)"},{"line_number":164,"context_line":"    def test_detach_volume(self, mock_nova):"},{"line_number":165,"context_line":"        server \u003d dict(id\u003d\u0027server001\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_87a7e8bd","line":162,"updated":"2017-04-20 14:33:59.000000000","message":"Same as above.","commit_id":"868cc088cc12b6f9b38ea364a3e8b22b49126f24"}]}
