def testMultithreadingDoesNotLogMacOSWarning(self):
        logger = CreateOrGetGsutilLogger('FakeCommand')
        mock_log_handler = MockLoggingHandler()
        logger.addHandler(mock_log_handler)

        self._TestRecursiveDepthThreeDifferentFunctions(1, 3)

        macos_message = 'If you experience problems with multiprocessing on MacOS'
        contains_message = [
            message.startswith(macos_message)
            for message in mock_log_handler.messages['info']
        ]
        self.assertFalse(any(contains_message))
        logger.removeHandler(mock_log_handler)
    def testSequentialApplyDoesNotRecommendParallelismAtEndIfLastSuggestionInView(
            self, mock_get_term_lines):
        logger = CreateOrGetGsutilLogger('FakeCommand')
        mock_log_handler = MockLoggingHandler()
        logger.addHandler(mock_log_handler)

        self._RunApply(_ReturnOneValue,
                       range(22),
                       process_count=1,
                       thread_count=1)

        contains_message = [
            message == PARALLEL_PROCESSING_MESSAGE
            for message in mock_log_handler.messages['info']
        ]
        self.assertEqual(sum(contains_message), 2)
        logger.removeHandler(mock_log_handler)
    def testSequentialApplyRecommendsParallelismAfterThreshold(
            self, mock_get_term_lines):
        mock_get_term_lines.return_value = 100
        logger = CreateOrGetGsutilLogger('FakeCommand')
        mock_log_handler = MockLoggingHandler()
        logger.addHandler(mock_log_handler)

        self._RunApply(_ReturnOneValue,
                       range(2),
                       process_count=1,
                       thread_count=1)

        contains_message = [
            message == PARALLEL_PROCESSING_MESSAGE
            for message in mock_log_handler.messages['info']
        ]
        self.assertTrue(any(contains_message))
        logger.removeHandler(mock_log_handler)