def test12_path_dependent_histogram_analysis_report_expected(self):
        """
        This test case aims to test the functionality of the PathDependantHistogramAnalysis.receiveAtom method.
        A report is expected.
        """
        description = "Test12HistogramAnalysis"
        start_time = 57600
        end_time = 662600
        diff = 605000

        modulo_time_bin_definition = ModuloTimeBinDefinition(86400, 3600, 0, 1, 24, False)
        histogram_data = HistogramData(self.match_crontab, modulo_time_bin_definition)
        path_dependent_histogram_analysis = PathDependentHistogramAnalysis(
            self.aminer_config, histogram_data.property_path, modulo_time_bin_definition, 604800,
            [self.stream_printer_event_handler], True, 'Default')
        self.analysis_context.register_component(path_dependent_histogram_analysis, description)
        match_element = MatchElement(self.match_crontab, str(start_time).encode(), start_time, None)

        t = time.time()
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        self.assertEqual(self.output_stream.getvalue(), self.__expected_string_path_dependent_histogram_analysis % (
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string), path_dependent_histogram_analysis.__class__.__name__,
            description, 2, datetime.fromtimestamp(t).strftime(self.datetime_format_string),
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string),
            'Path values "match/crontab":\nExample: 662600\n  Property "match/crontab" (2 elements):\n  * [16-17]: 2 '
            '(ratio = 1.00e+00, p = 1.74e-03)'))

        # resetting the outputStream
        start_time = start_time + 3600
        end_time = end_time + 3600
        self.output_stream.seek(0)
        self.output_stream.truncate(0)
        t = t + diff

        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        match_element = MatchElement(self.match_crontab, str(start_time).encode(), start_time, None)
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)

        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        self.assertEqual(self.output_stream.getvalue(), self.__expected_string_path_dependent_histogram_analysis % (
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string), path_dependent_histogram_analysis.__class__.__name__,
            description, 3, datetime.fromtimestamp(t).strftime(self.datetime_format_string),
            datetime.fromtimestamp(t + diff).strftime(self.datetime_format_string),
            'Path values "match/crontab":\nExample: 666200\n  Property "match/crontab" (3 elements):\n  * [16-17]: 1 '
            '(ratio = 3.33e-01, p = 1.20e-01)\n  * [17-18]: 2 (ratio = 6.67e-01, p = 5.06e-03)'))
    def test11_path_dependent_histogram_analysis_no_report(self):
        """
        This test case aims to test the functionality of the PathDependantHistogramAnalysis.receive_atom method.
        No report is expected.
        """
        description = "Test11HistogramAnalysis"
        start_time = 57600
        end_time = 662600
        diff = 30000

        modulo_time_bin_definition = ModuloTimeBinDefinition(86400, 3600, 0, 1, 24, False)
        histogram_data = HistogramData(self.match_crontab, modulo_time_bin_definition)
        path_dependent_histogram_analysis = PathDependentHistogramAnalysis(
            self.aminer_config, histogram_data.property_path, modulo_time_bin_definition, 604800,
            [self.stream_printer_event_handler], True, 'Default')
        self.analysis_context.register_component(path_dependent_histogram_analysis, description)
        match_element = MatchElement(self.match_crontab, str(start_time).encode(), start_time, None)

        t = time.time()
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        self.assertEqual(self.output_stream.getvalue(), '')

        # resetting the outputStream
        start_time = start_time + 3600
        end_time = end_time + 3600
        self.reset_output_stream()
        t = t + diff

        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        match_element = MatchElement(self.match_crontab, str(start_time).encode(), start_time, None)
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        histogram_data.add_value(start_time)
        histogram_data.add_value(end_time)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)

        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        match_element = MatchElement(self.match_crontab, str(end_time).encode(), end_time, None)
        log_atom = LogAtom(histogram_data.bin_data, ParserMatch(match_element), t + diff, path_dependent_histogram_analysis)
        path_dependent_histogram_analysis.receive_atom(log_atom)
        self.assertEqual(self.output_stream.getvalue(), '')