)]}'
{"swift/cli/recon.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c4904f973d5e86525d1332cb0da56633603472a","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def driveaudit_check(self, hosts):"},{"line_number":334,"context_line":"        \"\"\""},{"line_number":335,"context_line":"        Obtain and print drive audit error statistics"},{"line_number":336,"context_line":"        \"\"\""},{"line_number":337,"context_line":"        scan \u003d {}"},{"line_number":338,"context_line":"        recon \u003d Scout(\"driveaudit\", self.verbose, self.suppress_errors,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_6edaabea","line":335,"updated":"2015-03-18 12:11:03.000000000","message":"For consistency with other methods can we have the param definition:\n\n  :param hosts: set of hosts to check. in the format of:\n      set([(\u0027127.0.0.1\u0027, 6020), (\u0027127.0.0.2\u0027, 6030)])","commit_id":"ace427b74b89bca8965adf927ba78b44b12e5c6d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5c4904f973d5e86525d1332cb0da56633603472a","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        args.add_option(\u0027--swiftdir\u0027, default\u003d\"/etc/swift\","},{"line_number":964,"context_line":"                        help\u003d\"Default \u003d /etc/swift\")"},{"line_number":965,"context_line":"        args.add_option(\u0027--driveaudit\u0027, action\u003d\"store_true\","},{"line_number":966,"context_line":"                        help\u003d\"Get drive audit error stats\")"},{"line_number":967,"context_line":"        options, arguments \u003d args.parse_args()"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"        if len(sys.argv) \u003c\u003d 1 or len(arguments) \u003e 1:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_51010869","line":966,"updated":"2015-03-18 12:11:03.000000000","message":"nit-picking: might be nice to insert this option after the other \u0027commands\u0027 so they appear grouped together in the usage message e.g. right after sockstats\n\naside: seems that --top has become separated from --diskusage which it applies to","commit_id":"ace427b74b89bca8965adf927ba78b44b12e5c6d"}],"test/unit/cli/test_recon.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"74cd61f4af1f0ea8666100d755122962266ae79c","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        output \u003d stdout.getvalue()"},{"line_number":322,"context_line":"        r \u003d re.compile(\"\\[drive_audit_errors(.*)\\](.*)\")"},{"line_number":323,"context_line":"        for line in output.splitlines():"},{"line_number":324,"context_line":"            m \u003d r.match(line)"},{"line_number":325,"context_line":"            if m:"},{"line_number":326,"context_line":"                self.assertEquals(m.group(2),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_fb92259e","line":323,"updated":"2015-03-23 08:20:41.000000000","message":"This loop will be never executed if there is no output, thus it might be prone to some regression.\nOne way to make sure this does not happen might be to add an assertTrue check to the lines list:\n\n lines \u003d output.splitlines()\n self.assertTrue(lines)\n for line in lines:","commit_id":"34e6baa25f1bdd74858a4c68bf769b4338786dad"},{"author":{"_account_id":7134,"name":"Lorcan Browne","email":"lorcan.browne@hp.com","username":"brownelo"},"change_message_id":"e514e66f54fc1948b50dfa0d218630b1e13ec16f","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        output \u003d stdout.getvalue()"},{"line_number":322,"context_line":"        r \u003d re.compile(\"\\[drive_audit_errors(.*)\\](.*)\")"},{"line_number":323,"context_line":"        for line in output.splitlines():"},{"line_number":324,"context_line":"            m \u003d r.match(line)"},{"line_number":325,"context_line":"            if m:"},{"line_number":326,"context_line":"                self.assertEquals(m.group(2),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_b720b99c","line":323,"in_reply_to":"1a6ced46_fb92259e","updated":"2015-03-23 11:45:17.000000000","message":"Done","commit_id":"34e6baa25f1bdd74858a4c68bf769b4338786dad"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"74cd61f4af1f0ea8666100d755122962266ae79c","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                                  \" low: %s, high: %s, avg: %s, total: %s,\""},{"line_number":328,"context_line":"                                  \" Failed: %s%%, no_result: %s, reported: %s\""},{"line_number":329,"context_line":"                                  % expected)"},{"line_number":330,"context_line":"        self.assertTrue(expected)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"class TestReconCommands(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_bb5c2d27","line":330,"updated":"2015-03-23 08:20:41.000000000","message":"This is always True? Maybe something else should be checked here?","commit_id":"34e6baa25f1bdd74858a4c68bf769b4338786dad"},{"author":{"_account_id":7134,"name":"Lorcan Browne","email":"lorcan.browne@hp.com","username":"brownelo"},"change_message_id":"e514e66f54fc1948b50dfa0d218630b1e13ec16f","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                                  \" low: %s, high: %s, avg: %s, total: %s,\""},{"line_number":328,"context_line":"                                  \" Failed: %s%%, no_result: %s, reported: %s\""},{"line_number":329,"context_line":"                                  % expected)"},{"line_number":330,"context_line":"        self.assertTrue(expected)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"class TestReconCommands(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_37b9292f","line":330,"in_reply_to":"1a6ced46_bb5c2d27","updated":"2015-03-23 11:45:17.000000000","message":"You\u0027re right. There\u0027s no real need for this check but I\u0027m not sure of anything else to put in","commit_id":"34e6baa25f1bdd74858a4c68bf769b4338786dad"}],"test/unit/common/middleware/test_recon.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"00cac5ace2ef6bdee4077e3568bf5f653f64ce04","unresolved":false,"context_lines":[{"line_number":836,"context_line":"        from_cache_response \u003d {\u0027drive_audit_errors\u0027: 7}"},{"line_number":837,"context_line":"        self.fakecache.fakeout \u003d from_cache_response"},{"line_number":838,"context_line":"        rv \u003d self.app.get_driveaudit_error()"},{"line_number":839,"context_line":"        self.assertEquals(rv, {\u0027drive_audit_errors\u0027: 7})"},{"line_number":840,"context_line":""},{"line_number":841,"context_line":""},{"line_number":842,"context_line":"class TestReconMiddleware(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_f2a3a740","line":839,"updated":"2015-03-19 10:35:11.000000000","message":"As it stands this test verifies that fake_from_recon_cache gets called, but doesn\u0027t check that it is called with the expected key.  So if I mess with the key \u0027drive_audit_errors\u0027 in ReconMiddleware.get_driveaudit_error the tests still pass :(\n\n(Looks like there is a similar weakness in other tests here.)\n\nSuggest adding:\n\n          call_args \u003d self.fakecache.fakeout_calls[0][0]\n          self.assertTrue([\u0027drive_audit_errors\u0027] in call_args)","commit_id":"d19750b72a3a9dd11c9269eae54d11b70b14f837"}]}
