Example #1
0
 def test_instance_to_dict_successful(self):
     e = EndErrSummary(EndErrSummary.STATUS_SUCCESS, 2,
                       EndErrSummary.STATUS_SUCCESS, -1)
     obj = e.to_dict()
     self.assertIn('simulation_status_case1', obj)
     self.assertIn('run_time_seconds_case1', obj)
     self.assertIn('simulation_status_case2', obj)
     self.assertIn('run_time_seconds_case2', obj)
 def test_instance_to_dict_failure(self):
     e = EndErrSummary(EndErrSummary.STATUS_FATAL, -1,
                       EndErrSummary.STATUS_MISSING, -1)
     obj = e.to_dict()
     self.assertIn('simulation_status_case1', obj)
     self.assertNotIn('run_time_seconds_case1',
                      obj)  # won't be for unsuccessful runs
     self.assertIn('simulation_status_case2', obj)
     self.assertNotIn('run_time_seconds_case2',
                      obj)  # won't be for unsuccessful runs
 def test_status_to_string(self):
     result = EndErrSummary.status_to_string(EndErrSummary.STATUS_UNKNOWN)
     self.assertIsInstance(result, str)
     result = EndErrSummary.status_to_string(EndErrSummary.STATUS_SUCCESS)
     self.assertIsInstance(result, str)
     result = EndErrSummary.status_to_string(EndErrSummary.STATUS_MISSING)
     self.assertIsInstance(result, str)
     result = EndErrSummary.status_to_string(EndErrSummary.STATUS_FATAL)
     self.assertIsInstance(result, str)
     with self.assertRaises(Exception):
         EndErrSummary.status_to_string(-1000)
 def on_button1_clicked(self, widget):
     results = CompletedStructure('/a/', '/b/', '/c/', '/d/', '/e/')
     this_entry = TestEntry('file.idf', 'file.epw')
     this_entry.add_summary_result(
         EndErrSummary(
             EndErrSummary.STATUS_SUCCESS,
             1,
             EndErrSummary.STATUS_SUCCESS,
             2
         ))
     results.add_test_entry(this_entry)
     root_and_files = {
         ResultsTreeRoots.NumRun: results.all_files,
         ResultsTreeRoots.Success1: results.success_case_a,
         ResultsTreeRoots.NotSuccess1: results.failure_case_a,
         ResultsTreeRoots.Success2: results.success_case_b,
         ResultsTreeRoots.NotSuccess2: results.failure_case_b,
         ResultsTreeRoots.FilesCompared: results.total_files_compared,
         ResultsTreeRoots.BigMath: results.big_math_diffs,
         ResultsTreeRoots.SmallMath: results.small_math_diffs,
         ResultsTreeRoots.BigTable: results.big_table_diffs,
         ResultsTreeRoots.SmallTable: results.small_table_diffs,
         ResultsTreeRoots.Textual: results.text_diffs
     }
     for tree_root in root_and_files:
         file_lists = root_and_files[tree_root]
         this_file_list_count = len(file_lists.descriptions)
         if self.results_child[tree_root]:  # pragma: no cover - I'd try to test this if the tree was its own class
             self.results_list_store.remove(self.results_child[tree_root])
         self.results_child[tree_root] = self.results_list_store.append(
             self.results_parent[tree_root],
             [str(this_file_list_count)]
         )
         this_path = self.results_list_store.get_path(self.results_parent[tree_root])
         self.tree_view.expand_row(this_path, False)
         for result in file_lists.descriptions:  # pragma: no cover
             self.results_list_store.append(self.results_child[tree_root], [result])
 def fully_populated_entry_successful(t):
     t.add_summary_result(
         EndErrSummary(EndErrSummary.STATUS_SUCCESS, 1,
                       EndErrSummary.STATUS_SUCCESS, 1))
     t.add_math_differences(MathDifferences([1, 2, 3, 4]),
                            MathDifferences.ESO)
     t.add_math_differences(MathDifferences([1, 2, 3, 4]),
                            MathDifferences.MTR)
     t.add_math_differences(MathDifferences([1, 2, 0, 4]),
                            MathDifferences.ZSZ)
     t.add_math_differences(MathDifferences([1, 2, 3, 4]),
                            MathDifferences.SSZ)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.AUD)
     t.add_text_differences(TextDifferences(TextDifferences.DIFFS),
                            TextDifferences.BND)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.DXF)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.EIO)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.ERR)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.MDD)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.MTD)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.RDD)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.SHD)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.DL_IN)
     t.add_text_differences(TextDifferences(TextDifferences.EQUAL),
                            TextDifferences.DL_OUT)
     t.add_table_differences(TableDifferences([1, 1, 1, 1, 1, 1, 1, 1, 1]))
     return t
 def fully_populated_entry_failure(t):
     t.add_summary_result(
         EndErrSummary(EndErrSummary.STATUS_MISSING, 1,
                       EndErrSummary.STATUS_FATAL, 1))
     return t
    def process_diffs_for_one_case(self, this_entry, ci_mode=False):

        if ci_mode:  # in "ci_mode" the build directory is actually the output directory of each file
            case_result_dir_1 = self.build_tree_a['build_dir']
            case_result_dir_2 = self.build_tree_b['build_dir']
        else:
            case_result_dir_1 = os.path.join(self.build_tree_a['build_dir'],
                                             self.test_output_dir,
                                             this_entry.basename)
            case_result_dir_2 = os.path.join(self.build_tree_b['build_dir'],
                                             self.test_output_dir,
                                             this_entry.basename)

        out_dir = case_result_dir_1

        # we aren't using math_diff and table_diffs summary csv files, so use blanks
        path_to_math_diff_log = ""
        path_to_table_diff_log = ""

        # shortcut
        join = os.path.join

        # process the end files first
        status_case1 = EndErrSummary.STATUS_MISSING
        status_case2 = EndErrSummary.STATUS_MISSING
        runtime_case1 = 0
        runtime_case2 = 0
        end_path = join(case_result_dir_1, 'eplusout.end')
        if os.path.exists(end_path):
            [status_case1, runtime_case1] = self.process_end_file(end_path)
        end_path = join(case_result_dir_2, 'eplusout.end')
        if os.path.exists(end_path):
            [status_case2, runtime_case2] = self.process_end_file(end_path)

        # one quick check here for expect-fatal tests
        if this_entry.basename == 'EMSTestMathAndKill':
            if status_case1 == EndErrSummary.STATUS_FATAL and status_case2 == EndErrSummary.STATUS_FATAL:
                # this is actually what we expect, so add a success result, print a message, and get out
                this_entry.add_summary_result(
                    EndErrSummary(EndErrSummary.STATUS_SUCCESS, runtime_case1,
                                  EndErrSummary.STATUS_SUCCESS, runtime_case2))
                self.my_print(
                    "EMSTestMathAndKill Fatal-ed as expected, continuing with no diff checking on it"
                )
                return this_entry

        # add the initial end/err summary to the entry
        this_entry.add_summary_result(
            EndErrSummary(status_case1, runtime_case1, status_case2,
                          runtime_case2))

        # Handle the results of the end file before doing anything with diffs
        # Case 1: Both end files existed, so E+ did complete
        if not any(x == EndErrSummary.STATUS_MISSING
                   for x in [status_case1, status_case2]):
            # Case 1a: Both files are successful
            if sum(x == EndErrSummary.STATUS_SUCCESS
                   for x in [status_case1, status_case2]) == 2:
                # Just continue to process diffs
                self.my_print("Processing (Diffs) : %s" % this_entry.basename)
            # Case 1b: Both completed, but both failed: report that it failed in both cases and return early
            elif sum(x == EndErrSummary.STATUS_SUCCESS
                     for x in [status_case1, status_case2]) == 0:
                self.my_print(
                    "Skipping entry because it has a fatal error in both base and mod cases: %s"
                    % this_entry.basename)
                return this_entry
            # Case 1c: Both completed, but one failed: report that it failed in one case and return early
            elif sum(x == EndErrSummary.STATUS_SUCCESS
                     for x in [status_case1, status_case2]) == 1:
                self.my_print(
                    "Skipping an entry because it appears to have a fatal error in one case: %s"
                    % this_entry.basename)
                return this_entry
        # Case 2: Both end files DID NOT exist
        elif all(x == EndErrSummary.STATUS_MISSING
                 for x in [status_case1, status_case2]):
            self.my_print(
                "Skipping entry because it failed (crashed) in both base and mod cases: %s"
                % this_entry.basename)
            return this_entry
        # Case 3: Both end files DID NOT exist
        elif sum(x == EndErrSummary.STATUS_MISSING
                 for x in [status_case1, status_case2]) == 1:
            self.my_print(
                "Skipping an entry because it appears to have failed (crashed) in one case: %s"
                % this_entry.basename)
            return this_entry
        # Case 4: Unhandled combination
        else:  # pragma: no cover -- I don't think we can get here
            self.my_print(
                "Skipping an entry because it has an unknown end status: %s" %
                this_entry.basename)
            return this_entry

        # Load diffing threshold dictionary
        thresh_dict = td.ThreshDict(self.thresh_dict_file)

        # Do Math (CSV) Diffs
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.csv'):
            this_entry.add_math_differences(
                MathDifferences(
                    math_diff.math_diff(
                        thresh_dict, join(case_result_dir_1, 'eplusout.csv'),
                        join(case_result_dir_2, 'eplusout.csv'),
                        join(out_dir, 'eplusout.csv.absdiff.csv'),
                        join(out_dir, 'eplusout.csv.percdiff.csv'),
                        join(out_dir, 'eplusout.csv.diffsummary.csv'),
                        path_to_math_diff_log)), MathDifferences.ESO)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusmtr.csv'):
            this_entry.add_math_differences(
                MathDifferences(
                    math_diff.math_diff(
                        thresh_dict, join(case_result_dir_1, 'eplusmtr.csv'),
                        join(case_result_dir_2, 'eplusmtr.csv'),
                        join(out_dir, 'eplusmtr.csv.absdiff.csv'),
                        join(out_dir, 'eplusmtr.csv.percdiff.csv'),
                        join(out_dir, 'eplusmtr.csv.diffsummary.csv'),
                        path_to_math_diff_log)), MathDifferences.MTR)

        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'epluszsz.csv'):
            this_entry.add_math_differences(
                MathDifferences(
                    math_diff.math_diff(
                        thresh_dict, join(case_result_dir_1, 'epluszsz.csv'),
                        join(case_result_dir_2, 'epluszsz.csv'),
                        join(out_dir, 'epluszsz.csv.absdiff.csv'),
                        join(out_dir, 'epluszsz.csv.percdiff.csv'),
                        join(out_dir, 'epluszsz.csv.diffsummary.csv'),
                        path_to_math_diff_log)), MathDifferences.ZSZ)

        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusssz.csv'):
            this_entry.add_math_differences(
                MathDifferences(
                    math_diff.math_diff(
                        thresh_dict, join(case_result_dir_1, 'eplusssz.csv'),
                        join(case_result_dir_2, 'eplusssz.csv'),
                        join(out_dir, 'eplusssz.csv.absdiff.csv'),
                        join(out_dir, 'eplusssz.csv.percdiff.csv'),
                        join(out_dir, 'eplusssz.csv.diffsummary.csv'),
                        path_to_math_diff_log)), MathDifferences.SSZ)

        # Do Tabular (HTML) Diffs
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplustbl.htm'):
            this_entry.add_table_differences(
                TableDifferences(
                    table_diff.table_diff(
                        thresh_dict, join(case_result_dir_1, 'eplustbl.htm'),
                        join(case_result_dir_2, 'eplustbl.htm'),
                        join(out_dir, 'eplustbl.htm.absdiff.htm'),
                        join(out_dir, 'eplustbl.htm.percdiff.htm'),
                        join(out_dir, 'eplustbl.htm.summarydiff.htm'),
                        path_to_table_diff_log)))

        # Do Textual Diffs
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.audit'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.audit'),
                        join(case_result_dir_2, 'eplusout.audit'),
                        join(out_dir, 'eplusout.audit.diff'))),
                TextDifferences.AUD)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.bnd'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.bnd'),
                        join(case_result_dir_2, 'eplusout.bnd'),
                        join(out_dir, 'eplusout.bnd.diff'))),
                TextDifferences.BND)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.dxf'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.dxf'),
                        join(case_result_dir_2, 'eplusout.dxf'),
                        join(out_dir, 'eplusout.dxf.diff'))),
                TextDifferences.DXF)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.eio'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.eio'),
                        join(case_result_dir_2, 'eplusout.eio'),
                        join(out_dir, 'eplusout.eio.diff'))),
                TextDifferences.EIO)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.mdd'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.mdd'),
                        join(case_result_dir_2, 'eplusout.mdd'),
                        join(out_dir, 'eplusout.mdd.diff'))),
                TextDifferences.MDD)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.mtd'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.mtd'),
                        join(case_result_dir_2, 'eplusout.mtd'),
                        join(out_dir, 'eplusout.mtd.diff'))),
                TextDifferences.MTD)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.rdd'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.rdd'),
                        join(case_result_dir_2, 'eplusout.rdd'),
                        join(out_dir, 'eplusout.rdd.diff'))),
                TextDifferences.RDD)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.shd'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.shd'),
                        join(case_result_dir_2, 'eplusout.shd'),
                        join(out_dir, 'eplusout.shd.diff'))),
                TextDifferences.SHD)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.err'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.err'),
                        join(case_result_dir_2, 'eplusout.err'),
                        join(out_dir, 'eplusout.err.diff'))),
                TextDifferences.ERR)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.delightin'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.delightin'),
                        join(case_result_dir_2, 'eplusout.delightin'),
                        join(out_dir, 'eplusout.delightin.diff'))),
                TextDifferences.DL_IN)
        if self.both_files_exist(case_result_dir_1, case_result_dir_2,
                                 'eplusout.delightout'):
            this_entry.add_text_differences(
                TextDifferences(
                    self.diff_text_files(
                        join(case_result_dir_1, 'eplusout.delightout'),
                        join(case_result_dir_2, 'eplusout.delightout'),
                        join(out_dir, 'eplusout.delightout.diff'))),
                TextDifferences.DL_OUT)

        # return the updated entry
        return this_entry