)]}'
{"neutronclient/tests/unit/test_shell.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"854f29c6c3b955eb793bc9a73dda63a29bb1712a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import StringIO"},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import argparse"},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":"import testtools"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATX%2F%2F9cA%3D","line":20,"updated":"2013-10-23 17:06:31.000000000","message":"argparse is a standard module. please move it to L.17.","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"1e976dc790d8459614ac7cbda0805a6fb477e794","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import StringIO"},{"line_number":18,"context_line":"import sys"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import argparse"},{"line_number":21,"context_line":"import mock"},{"line_number":22,"context_line":"import testtools"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2FzNs%3D","line":20,"in_reply_to":"AAAATX%2F%2F9cA%3D","updated":"2014-01-02 04:27:39.000000000","message":"Done","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"854f29c6c3b955eb793bc9a73dda63a29bb1712a","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test_help(self):"},{"line_number":70,"context_line":"        self.shell(\u0027help\u0027)"},{"line_number":71,"context_line":"        self.assertTrue(self._stdout.getvalue().startswith(\u0027usage:\u0027))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_help_on_subcommand(self):"},{"line_number":74,"context_line":"        self.shell(\u0027help quota-list\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATX%2F%2F9X4%3D","line":71,"updated":"2013-10-23 17:06:31.000000000","message":"Consider using assertThat\n\n    self.assertThat(self._stdout.getvalue(), matchers.StartsWith(\u0027usage:\u0027))","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"1e976dc790d8459614ac7cbda0805a6fb477e794","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def test_help(self):"},{"line_number":70,"context_line":"        self.shell(\u0027help\u0027)"},{"line_number":71,"context_line":"        self.assertTrue(self._stdout.getvalue().startswith(\u0027usage:\u0027))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_help_on_subcommand(self):"},{"line_number":74,"context_line":"        self.shell(\u0027help quota-list\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fw7E%3D","line":71,"in_reply_to":"AAAATX%2F%2F9X4%3D","updated":"2014-01-02 04:27:39.000000000","message":"Done","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"854f29c6c3b955eb793bc9a73dda63a29bb1712a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def test_help_on_subcommand(self):"},{"line_number":74,"context_line":"        self.shell(\u0027help quota-list\u0027)"},{"line_number":75,"context_line":"        ret \u003d self._stdout.getvalue()"},{"line_number":76,"context_line":"        self.assertTrue(ret.startswith(\u0027usage:\u0027))"},{"line_number":77,"context_line":"        self.assertIn(\u0027quota-list\u0027, ret)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_unknown_auth_strategy(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATX%2F%2F9W4%3D","line":76,"updated":"2013-10-23 17:06:31.000000000","message":"Consider:\n\n  self.assertThat(ret, matchers.StartsWith(\u0027usage:\u0027))\n\nassertThat returns more useful information when the test fails. This is the only difference.","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"1e976dc790d8459614ac7cbda0805a6fb477e794","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def test_help_on_subcommand(self):"},{"line_number":74,"context_line":"        self.shell(\u0027help quota-list\u0027)"},{"line_number":75,"context_line":"        ret \u003d self._stdout.getvalue()"},{"line_number":76,"context_line":"        self.assertTrue(ret.startswith(\u0027usage:\u0027))"},{"line_number":77,"context_line":"        self.assertIn(\u0027quota-list\u0027, ret)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def test_unknown_auth_strategy(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fw7A%3D","line":76,"in_reply_to":"AAAATX%2F%2F9W4%3D","updated":"2014-01-02 04:27:39.000000000","message":"Done","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"854f29c6c3b955eb793bc9a73dda63a29bb1712a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   \u0027--os-password test \u0027"},{"line_number":91,"context_line":"                   \u0027--os-tenant-name test \u0027"},{"line_number":92,"context_line":"                   \u0027--os-auth-url http://127.0.0.1:5000/ \u0027"},{"line_number":93,"context_line":"                   \u0027--os-auth-strategy keystone quota-list\u0027)"},{"line_number":94,"context_line":"        self.assertIn(expected_err, self._stderr.getvalue())"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_build_option_parser(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATX%2F%2F9Yk%3D","line":93,"updated":"2013-10-23 17:06:31.000000000","message":"Does this test work if devstack is running on a same host? The test should not depend on such condition.\n\nHow about patching httplib2.Http.request to raise socket.error?","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"1e976dc790d8459614ac7cbda0805a6fb477e794","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   \u0027--os-password test \u0027"},{"line_number":91,"context_line":"                   \u0027--os-tenant-name test \u0027"},{"line_number":92,"context_line":"                   \u0027--os-auth-url http://127.0.0.1:5000/ \u0027"},{"line_number":93,"context_line":"                   \u0027--os-auth-strategy keystone quota-list\u0027)"},{"line_number":94,"context_line":"        self.assertIn(expected_err, self._stderr.getvalue())"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_build_option_parser(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2Fw68%3D","line":93,"in_reply_to":"AAAATX%2F%2F9Yk%3D","updated":"2014-01-02 04:27:39.000000000","message":"Done","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"2ceaef1bf03f006ccd74e242d5f679a49a6dcf21","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   \u0027--os-password test \u0027"},{"line_number":91,"context_line":"                   \u0027--os-tenant-name test \u0027"},{"line_number":92,"context_line":"                   \u0027--os-auth-url http://127.0.0.1:5000/ \u0027"},{"line_number":93,"context_line":"                   \u0027--os-auth-strategy keystone quota-list\u0027)"},{"line_number":94,"context_line":"        self.assertIn(expected_err, self._stderr.getvalue())"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_build_option_parser(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2F9I4%3D","line":93,"in_reply_to":"AAAATX%2F%2F9Yk%3D","updated":"2013-10-24 16:46:09.000000000","message":"sounds right, i should do this in this commit but missed, thanks","commit_id":"690c7fb42f49ee8d6d009fb3830199ff82800c87"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"ac87c38a196aeec406bde56855bc28bd8f2226a6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import argparse"},{"line_number":18,"context_line":"import httplib2"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import StringIO"},{"line_number":21,"context_line":"import sys"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2FtWI%3D","line":20,"updated":"2014-01-03 04:17:52.000000000","message":"please consider using import six (http://pythonhosted.org/six/) which provides compatibility between python 2 and 3. see https://github.com/openstack/python-neutronclient/blob/master/neutronclient/openstack/common/gettextutils.py#L35, or from six import StringIO.","commit_id":"85a27f507098ffd4a0b71072112cf131b7edfc27"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"7dbdb45c7bb5a2dc63481cdbb43a4b1d74912494","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import argparse"},{"line_number":18,"context_line":"import httplib2"},{"line_number":19,"context_line":"import socket"},{"line_number":20,"context_line":"import StringIO"},{"line_number":21,"context_line":"import sys"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F9N4%3D","line":20,"in_reply_to":"AAAAT3%2F%2FtWI%3D","updated":"2014-01-06 08:48:53.000000000","message":"Thank you very much!\n\nDone.","commit_id":"85a27f507098ffd4a0b71072112cf131b7edfc27"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"ac87c38a196aeec406bde56855bc28bd8f2226a6","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def setUp(self):"},{"line_number":49,"context_line":"        super(ShellTest, self).setUp()"},{"line_number":50,"context_line":"        _stdout_p \u003d mock.patch(\u0027sys.stdout\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":51,"context_line":"        self._stdout \u003d _stdout_p.start()"},{"line_number":52,"context_line":"        _stderr_p \u003d mock.patch(\u0027sys.stderr\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":53,"context_line":"        self._stderr \u003d _stderr_p.start()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2FtV8%3D","line":50,"updated":"2014-01-03 04:17:52.000000000","message":"see above. and use six.StringIO","commit_id":"85a27f507098ffd4a0b71072112cf131b7edfc27"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"7dbdb45c7bb5a2dc63481cdbb43a4b1d74912494","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def setUp(self):"},{"line_number":49,"context_line":"        super(ShellTest, self).setUp()"},{"line_number":50,"context_line":"        _stdout_p \u003d mock.patch(\u0027sys.stdout\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":51,"context_line":"        self._stdout \u003d _stdout_p.start()"},{"line_number":52,"context_line":"        _stderr_p \u003d mock.patch(\u0027sys.stderr\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":53,"context_line":"        self._stderr \u003d _stderr_p.start()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F9N0%3D","line":50,"in_reply_to":"AAAAT3%2F%2FtV8%3D","updated":"2014-01-06 08:48:53.000000000","message":"Done","commit_id":"85a27f507098ffd4a0b71072112cf131b7edfc27"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"ac87c38a196aeec406bde56855bc28bd8f2226a6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        super(ShellTest, self).setUp()"},{"line_number":50,"context_line":"        _stdout_p \u003d mock.patch(\u0027sys.stdout\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":51,"context_line":"        self._stdout \u003d _stdout_p.start()"},{"line_number":52,"context_line":"        _stderr_p \u003d mock.patch(\u0027sys.stderr\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":53,"context_line":"        self._stderr \u003d _stderr_p.start()"},{"line_number":54,"context_line":"        # Patch os.environ to avoid required auth info"},{"line_number":55,"context_line":"        _env_p \u003d mock.patch.dict(\u0027os.environ\u0027, self.FAKE_ENV)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2FtV4%3D","line":52,"updated":"2014-01-03 04:17:52.000000000","message":"see above.","commit_id":"85a27f507098ffd4a0b71072112cf131b7edfc27"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"7dbdb45c7bb5a2dc63481cdbb43a4b1d74912494","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        super(ShellTest, self).setUp()"},{"line_number":50,"context_line":"        _stdout_p \u003d mock.patch(\u0027sys.stdout\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":51,"context_line":"        self._stdout \u003d _stdout_p.start()"},{"line_number":52,"context_line":"        _stderr_p \u003d mock.patch(\u0027sys.stderr\u0027, new_callable\u003dStringIO.StringIO)"},{"line_number":53,"context_line":"        self._stderr \u003d _stderr_p.start()"},{"line_number":54,"context_line":"        # Patch os.environ to avoid required auth info"},{"line_number":55,"context_line":"        _env_p \u003d mock.patch.dict(\u0027os.environ\u0027, self.FAKE_ENV)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F9Nw%3D","line":52,"in_reply_to":"AAAAT3%2F%2FtV4%3D","updated":"2014-01-06 08:48:53.000000000","message":"Done","commit_id":"85a27f507098ffd4a0b71072112cf131b7edfc27"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"96f2bd35ebff027b4187ce2b60c056c3e5c84217","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.assertTrue(ret, matchers.StartsWith(\u0027usage:\u0027))"},{"line_number":82,"context_line":"        self.assertIn(\u0027quota-list\u0027, ret)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @mock.patch(\u0027neutronclient.common.exceptions.Unauthorized\u0027)"},{"line_number":85,"context_line":"    def test_unknown_auth_strategy(self, exc):"},{"line_number":86,"context_line":"        # unknown auth strategy will raise Unauthorized with error message"},{"line_number":87,"context_line":"        # _(\u0027Unknown auth strategy\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2Bfrg%3D","line":84,"updated":"2014-02-20 21:26:12.000000000","message":"vs mocking the exception we should assert that the proper exception is raised.","commit_id":"e51127eb85bca852bf384a545d309870cfcefa1b"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"b0ffe1333f1be5aceb4fdadaa6fb235d1cefabac","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.assertTrue(ret, matchers.StartsWith(\u0027usage:\u0027))"},{"line_number":82,"context_line":"        self.assertIn(\u0027quota-list\u0027, ret)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @mock.patch(\u0027neutronclient.common.exceptions.Unauthorized\u0027)"},{"line_number":85,"context_line":"    def test_unknown_auth_strategy(self, exc):"},{"line_number":86,"context_line":"        # unknown auth strategy will raise Unauthorized with error message"},{"line_number":87,"context_line":"        # _(\u0027Unknown auth strategy\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2Bckw%3D","line":84,"in_reply_to":"AAAAUX%2F%2Bfrg%3D","updated":"2014-02-21 04:23:16.000000000","message":"the shell.py just eats the exception, and return a number...\n\nSo I choose to mock it and assert it is called\n\nthanks for your review, it is a very long live time for this patch...","commit_id":"e51127eb85bca852bf384a545d309870cfcefa1b"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"96f2bd35ebff027b4187ce2b60c056c3e5c84217","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        self.assertTrue(exc.called)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @mock.patch.object(httplib2.Http, \u0027request\u0027)"},{"line_number":93,"context_line":"    @mock.patch(\u0027neutronclient.common.exceptions.ConnectionFailed\u0027)"},{"line_number":94,"context_line":"    def test_auth(self, exc, request):"},{"line_number":95,"context_line":"        \"\"\"Test valid authentication info.\"\"\""},{"line_number":96,"context_line":"        request.side_effect \u003d socket.error()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2BfrQ%3D","line":93,"updated":"2014-02-20 21:26:12.000000000","message":"Same comment as above","commit_id":"e51127eb85bca852bf384a545d309870cfcefa1b"}],"tests/unit/test_shell.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"702b06209e9ee4225d26adf724efcb3bb27af198","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                    var, self.FAKE_ENV[var]))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def tearDown(self):"},{"line_number":58,"context_line":"        self.mox.UnsetStubs()"},{"line_number":59,"context_line":"        super(ShellTest, self).tearDown()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def shell(self, argstr, stdout_match\u003dNone, stderr_match\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2Fy6M%3D","line":58,"updated":"2013-09-19 05:37:39.000000000","message":"Please use addCleanup in setUp.\n\n   self.addCleanup(self.mox.UnsetStubs)","commit_id":"87a50688f6bd6d93c6c30ef4da52ad4dcb1fafdf"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"702b06209e9ee4225d26adf724efcb3bb27af198","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                self.assertThat(_stderr.getvalue(), stderr_match)"},{"line_number":72,"context_line":"        except SystemExit:"},{"line_number":73,"context_line":"            exc_type, exc_value, exc_traceback \u003d sys.exc_info()"},{"line_number":74,"context_line":"            self.assertEqual(exc_value.code, 0)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def test_run_unknown_command(self):"},{"line_number":77,"context_line":"        expected_err \u003d \"Unknown command [\u0027fake\u0027]\\n\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAS3%2F%2Fy58%3D","line":74,"updated":"2013-09-19 05:37:39.000000000","message":"When is this except clause needed?\n\nIMO, if some test expects SystemExit, we should check it explicitly. At now the behavior depends on the result of NeutronShell.","commit_id":"87a50688f6bd6d93c6c30ef4da52ad4dcb1fafdf"},{"author":{"_account_id":6983,"name":"YangLei","email":"iamhappg@aliyun.com","username":"YangLei"},"change_message_id":"01b08b6a07b3f3ec2c93292b620e7fbcddb9af8b","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test_unknown_auth_strategy(self):"},{"line_number":92,"context_line":"        expected_err \u003d (\u0027You must provide a service URL via either \u0027"},{"line_number":93,"context_line":"                        \u0027--os-url or env[OS_URL]\\n\u0027)"},{"line_number":94,"context_line":"        _matcher \u003d matchers.Equals(expected_err)"},{"line_number":95,"context_line":"        self.shell(\u0027--os-auth-strategy fake quota-list\u0027, stderr_match\u003d_matcher)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FdGA%3D","line":93,"updated":"2013-09-04 15:52:00.000000000","message":"Does this testcase depend on the change https://review.openstack.org/#/c/39280/3/neutronclient/shell.py (not merged)\nIf yes, Why did jenkins pass.\nOr, the _matcher does not work in fact.\nplease check.","commit_id":"87a50688f6bd6d93c6c30ef4da52ad4dcb1fafdf"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"e548b3edb0869c1f54df9e32ab32a57daf28210f","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test_unknown_auth_strategy(self):"},{"line_number":92,"context_line":"        expected_err \u003d (\u0027You must provide a service URL via either \u0027"},{"line_number":93,"context_line":"                        \u0027--os-url or env[OS_URL]\\n\u0027)"},{"line_number":94,"context_line":"        _matcher \u003d matchers.Equals(expected_err)"},{"line_number":95,"context_line":"        self.shell(\u0027--os-auth-strategy fake quota-list\u0027, stderr_match\u003d_matcher)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2Fc2k%3D","line":93,"in_reply_to":"AAAASn%2F%2FdGA%3D","updated":"2013-09-04 16:10:58.000000000","message":"No, this patch doesn\u0027t depend on that change, because that change aims on noauth, and here is a fake strategy, so it will check --os-url, not --os-token","commit_id":"87a50688f6bd6d93c6c30ef4da52ad4dcb1fafdf"}]}
