def METHOD_NAME(self):
    status = "PASS"
    fail_reason = ""
    fail_class = ""
    traceback_log = ""
    try:
        messages.start_logging(self._config, self.queue)
        self.setUp()
        if isinstance(self.__status, Exception):
            # pylint doesn't know much about flow-control
            raise self.__status  # pylint: disable-msg=E0702
    except exceptions.TestBaseException as detail:
        status = detail.status
        fail_reason = (astring.to_text(detail))
        fail_class = detail.__class__.__name__
        traceback_log = traceback.format_exc()
        if status == "ERROR" or status not in teststatus.STATUSES:
            status = "ERROR"
            self.queue.put(messages.StderrMessage.get(traceback_log))
        else:
            self.queue.put(messages.LogMessage.get(traceback_log))
    except Exception as detail:
        status = "ERROR"
        try:
            fail_reason = (astring.to_text(detail))
            fail_class = detail.__class__.__name__
            traceback_log = traceback.format_exc()
        except TypeError:
            fail_reason = ("Unable to get exception, check the traceback "
                           "in `debug.log` for details.")
        self.queue.put(messages.StderrMessage.get(traceback_log))
    finally:
        self.queue.put(messages.WhiteboardMessage.get(self.whiteboard))
        if 'avocado_test_' in self.logdir:
            self._save_log_dir()
        try:
            self.queue.put(messages.FinishedMessage.get(status,
                                                        fail_reason=fail_reason,
                                                        class_name="VirtTest",
                                                        fail_class=fail_class,
                                                        traceback=traceback_log))
        except TypeError:
            self.queue.put(messages.FinishedMessage.get(status, fail_reason))