# Copyright (C) 2010 Google Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#     * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

try:
    import jsonresults
    from jsonresults import JsonResults
except ImportError:
    print "ERROR: Add the TestResultServer, google_appengine and yaml/lib directories to your PYTHONPATH"
    raise

from django.utils import simplejson

import unittest


JSON_RESULTS_TEMPLATE = (
    '{"Webkit":{'
    '"allFixableCount":[[TESTDATA_COUNT]],'
    '"buildNumbers":[[TESTDATA_BUILDNUMBERS]],'
    '"deferredCounts":[[TESTDATA_COUNTS]],'
    '"fixableCount":[[TESTDATA_COUNT]],'
    '"fixableCounts":[[TESTDATA_COUNTS]],'
    '"secondsSinceEpoch":[[TESTDATA_TIMES]],'
    '"tests":{[TESTDATA_TESTS]},'
    '"webkitRevision":[[TESTDATA_WEBKITREVISION]],'
    '"wontfixCounts":[[TESTDATA_COUNTS]]'
    '},'
    '"version":[VERSION]'
    '}')

JSON_RESULTS_COUNTS_TEMPLATE = (
    '{'
    '"C":[TESTDATA],'
    '"F":[TESTDATA],'
    '"I":[TESTDATA],'
    '"O":[TESTDATA],'
    '"P":[TESTDATA],'
    '"T":[TESTDATA],'
    '"X":[TESTDATA],'
    '"Z":[TESTDATA]}')

JSON_RESULTS_DIRECTORY_TEMPLATE = '[[TESTDATA_DIRECTORY]]:{[TESTDATA_DATA]}'

JSON_RESULTS_TESTS_TEMPLATE = (
    '[[TESTDATA_TEST_NAME]]:{'
    '"results":[[TESTDATA_TEST_RESULTS]],'
    '"times":[[TESTDATA_TEST_TIMES]]}')

JSON_RESULTS_TEST_LIST_TEMPLATE = (
    '{"Webkit":{"tests":{[TESTDATA_TESTS]}}}')


class JsonResultsTest(unittest.TestCase):
    def setUp(self):
        self._builder = "Webkit"

    def test_strip_prefix_suffix(self):
        json = "['contents']"
        self.assertEqual(JsonResults._strip_prefix_suffix("ADD_RESULTS(" + json + ");"), json)
        self.assertEqual(JsonResults._strip_prefix_suffix(json), json)

    def _make_test_json(self, test_data):
        if not test_data:
            return ""

        builds = test_data["builds"]
        tests = test_data["tests"]
        if not builds or not tests:
            return ""

        json = JSON_RESULTS_TEMPLATE

        counts = []
        build_numbers = []
        webkit_revision = []
        times = []
        for build in builds:
            counts.append(JSON_RESULTS_COUNTS_TEMPLATE.replace("[TESTDATA]", build))
            build_numbers.append("1000%s" % build)
            webkit_revision.append("2000%s" % build)
            times.append("100000%s000" % build)

        json = json.replace("[TESTDATA_COUNTS]", ",".join(counts))
        json = json.replace("[TESTDATA_COUNT]", ",".join(builds))
        json = json.replace("[TESTDATA_BUILDNUMBERS]", ",".join(build_numbers))
        json = json.replace("[TESTDATA_WEBKITREVISION]", ",".join(webkit_revision))
        json = json.replace("[TESTDATA_TIMES]", ",".join(times))

        version = str(test_data["version"]) if "version" in test_data else "4"
        json = json.replace("[VERSION]", version)
        json = json.replace("{[TESTDATA_TESTS]}", simplejson.dumps(tests, separators=(',', ':'), sort_keys=True))
        return json

    def _test_merge(self, aggregated_data, incremental_data, expected_data, max_builds=jsonresults.JSON_RESULTS_MAX_BUILDS):
        aggregated_results = self._make_test_json(aggregated_data)
        incremental_results = self._make_test_json(incremental_data)
        merged_results = JsonResults.merge(self._builder, aggregated_results, incremental_results, max_builds, sort_keys=True)

        if expected_data:
            expected_results = self._make_test_json(expected_data)
            self.assertEqual(merged_results, expected_results)
        else:
            self.assertFalse(merged_results)

    def _test_get_test_list(self, input_data, expected_data):
        input_results = self._make_test_json(input_data)
        expected_results = JSON_RESULTS_TEST_LIST_TEMPLATE.replace("{[TESTDATA_TESTS]}", simplejson.dumps(expected_data, separators=(',', ':')))
        actual_results = JsonResults.get_test_list(self._builder, input_results)
        self.assertEqual(actual_results, expected_results)

    def test_merge_null_incremental_results(self):
        # Empty incremental results json.
        # Nothing to merge.
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]}}},
            # Incremental results
            None,
            # Expect no merge happens.
            None)

    def test_merge_empty_incremental_results(self):
        # No actual incremental test results (only prefix and suffix) to merge.
        # Nothing to merge.
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]}}},
            # Incremental results
            {"builds": [],
             "tests": {}},
            # Expected no merge happens.
            None)

    def test_merge_empty_aggregated_results(self):
        # No existing aggregated results.
        # Merged results == new incremental results.
        self._test_merge(
            # Aggregated results
            None,
            # Incremental results

            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]}}},
            # Expected result
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]}}})

    def test_merge_duplicate_build_number(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[100, "F"]],
                           "times": [[100, 0]]}}},
            # Incremental results
            {"builds": ["2"],
             "tests": {"001.html": {
                           "results": [[1, "F"]],
                           "times": [[1, 0]]}}},
            # Expected results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[100, "F"]],
                           "times": [[100, 0]]}}})

    def test_merge_incremental_single_test_single_run_same_result(self):
        # Incremental results has the latest build and same test results for
        # that run.
        # Insert the incremental results at the first place and sum number
        # of runs for "F" (200 + 1) to get merged results.
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"F"]],
                           "times": [[1,0]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[201,"F"]],
                           "times": [[201,0]]}}})

    def test_merge_single_test_single_run_different_result(self):
        # Incremental results has the latest build but different test results
        # for that run.
        # Insert the incremental results at the first place.
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1, "I"]],
                           "times": [[1,1]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[1,"I"],[200,"F"]],
                           "times": [[1,1],[200,0]]}}})

    def test_merge_single_test_single_run_result_changed(self):
        # Incremental results has the latest build but results which differ from
        # the latest result (but are the same as an older result).
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"],[10,"I"]],
                           "times": [[200,0],[10,1]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"I"]],
                           "times": [[1,1]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[1,"I"],[200,"F"],[10,"I"]],
                           "times": [[1,1],[200,0],[10,1]]}}})

    def test_merge_multiple_tests_single_run(self):
        # All tests have incremental updates.
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]},
                       "002.html": {
                           "results": [[100,"I"]],
                           "times": [[100,1]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"F"]],
                           "times": [[1,0]]},
                       "002.html": {
                           "results": [[1,"I"]],
                           "times": [[1,1]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[201,"F"]],
                           "times": [[201,0]]},
                       "002.html": {
                           "results": [[101,"I"]],
                           "times": [[101,1]]}}})

    def test_merge_multiple_tests_single_run_one_no_result(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]},
                       "002.html": {
                           "results": [[100,"I"]],
                           "times": [[100,1]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"002.html": {
                           "results": [[1,"I"]],
                           "times": [[1,1]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[1,"N"],[200,"F"]],
                           "times": [[201,0]]},
                       "002.html": {
                           "results": [[101,"I"]],
                           "times": [[101,1]]}}})

    def test_merge_single_test_multiple_runs(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]}}},
            # Incremental results
            {"builds": ["4", "3"],
             "tests": {"001.html": {
                           "results": [[2, "I"]],
                           "times": [[2,2]]}}},
            # Expected results
            {"builds": ["4", "3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[2,"I"],[200,"F"]],
                           "times": [[2,2],[200,0]]}}})

    def test_merge_multiple_tests_multiple_runs(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"F"]],
                           "times": [[200,0]]},
                       "002.html": {
                           "results": [[10,"Z"]],
                           "times": [[10,0]]}}},
            # Incremental results
            {"builds": ["4", "3"],
             "tests": {"001.html": {
                           "results": [[2, "I"]],
                           "times": [[2,2]]},
                       "002.html": {
                           "results": [[1,"C"]],
                           "times": [[1,1]]}}},
            # Expected results
            {"builds": ["4", "3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[2,"I"],[200,"F"]],
                           "times": [[2,2],[200,0]]},
                       "002.html": {
                           "results": [[1,"C"],[10,"Z"]],
                           "times": [[1,1],[10,0]]}}})

    def test_merge_incremental_result_older_build(self):
        # Test the build in incremental results is older than the most recent
        # build in aggregated results.
        self._test_merge(
            # Aggregated results
            {"builds": ["3", "1"],
             "tests": {"001.html": {
                           "results": [[5,"F"]],
                           "times": [[5,0]]}}},
            # Incremental results
            {"builds": ["2"],
             "tests": {"001.html": {
                           "results": [[1, "F"]],
                           "times": [[1,0]]}}},
            # Expected no merge happens.
            {"builds": ["2", "3", "1"],
             "tests": {"001.html": {
                           "results": [[6,"F"]],
                           "times": [[6,0]]}}})

    def test_merge_incremental_result_same_build(self):
        # Test the build in incremental results is same as the build in
        # aggregated results.
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[5,"F"]],
                           "times": [[5,0]]}}},
            # Incremental results
            {"builds": ["3", "2"],
             "tests": {"001.html": {
                           "results": [[2, "F"]],
                           "times": [[2,0]]}}},
            # Expected no merge happens.
            {"builds": ["3", "2", "2", "1"],
             "tests": {"001.html": {
                           "results": [[7,"F"]],
                           "times": [[7,0]]}}})

    def test_merge_remove_new_test(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[199, "F"]],
                           "times": [[199, 0]]},
                       }},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1, "F"]],
                           "times": [[1, 0]]},
                       "002.html": {
                           "results": [[1, "P"]],
                           "times": [[1, 0]]},
                       "003.html": {
                           "results": [[1, "N"]],
                           "times": [[1, 0]]},
                       "004.html": {
                           "results": [[1, "X"]],
                           "times": [[1, 0]]},
                       }},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[200, "F"]],
                           "times": [[200, 0]]},
                       }},
            max_builds=200)


    def test_merge_remove_test(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"P"]],
                           "times": [[200,0]]},
                       "002.html": {
                           "results": [[10,"F"]],
                           "times": [[10,0]]},
                       "003.html": {
                           "results": [[190, 'X'], [9, 'N'], [1,"F"]],
                           "times": [[200,0]]},
                       }},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"P"]],
                           "times": [[1,0]]},
                       "002.html": {
                           "results": [[1,"P"]],
                           "times": [[1,0]]},
                       "003.html": {
                           "results": [[1,"P"]],
                           "times": [[1,0]]},
                       }},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"002.html": {
                           "results": [[1,"P"],[10,"F"]],
                           "times": [[11,0]]}}},
            max_builds=200)

    def test_merge_keep_test_with_all_pass_but_slow_time(self):
        # Do not remove test where all run pass but max running time >= 5 seconds
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[200,"P"]],
                           "times": [[200,jsonresults.JSON_RESULTS_MIN_TIME]]},
                       "002.html": {
                           "results": [[10,"F"]],
                           "times": [[10,0]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"P"]],
                           "times": [[1,1]]},
                       "002.html": {
                           "results": [[1,"P"]],
                           "times": [[1,0]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[201,"P"]],
                           "times": [[1,1],[200,jsonresults.JSON_RESULTS_MIN_TIME]]},
                       "002.html": {
                           "results": [[1,"P"],[10,"F"]],
                           "times": [[11,0]]}}})

    def test_merge_prune_extra_results(self):
        # Remove items from test results and times that exceed the max number
        # of builds to track.
        max_builds = jsonresults.JSON_RESULTS_MAX_BUILDS
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[max_builds,"F"],[1,"I"]],
                           "times": [[max_builds,0],[1,1]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"T"]],
                           "times": [[1,1]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[1,"T"],[max_builds,"F"]],
                           "times": [[1,1],[max_builds,0]]}}})

    def test_merge_prune_extra_results_small(self):
        # Remove items from test results and times that exceed the max number
        # of builds to track, using smaller threshold.
        max_builds = jsonresults.JSON_RESULTS_MAX_BUILDS_SMALL
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[max_builds,"F"],[1,"I"]],
                           "times": [[max_builds,0],[1,1]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"T"]],
                           "times": [[1,1]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[1,"T"],[max_builds,"F"]],
                           "times": [[1,1],[max_builds,0]]}}},
            int(max_builds))

    def test_merge_prune_extra_results_with_new_result_of_same_type(self):
        # Test that merging in a new result of the same type as the last result
        # causes old results to fall off.
        max_builds = jsonresults.JSON_RESULTS_MAX_BUILDS_SMALL
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"001.html": {
                           "results": [[max_builds,"F"],[1,"N"]],
                           "times": [[max_builds,0],[1,1]]}}},
            # Incremental results
            {"builds": ["3"],
             "tests": {"001.html": {
                           "results": [[1,"F"]],
                           "times": [[1,0]]}}},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"001.html": {
                           "results": [[max_builds,"F"]],
                           "times": [[max_builds,0]]}}},
            int(max_builds))

    # FIXME: Some data got corrupted and has results and times at the directory level.
    # Once we've purged this from all the data, we should throw an error on this case.
    def test_merge_directory_hierarchy_extra_results_and_times(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"baz": {
                            "003.html": {
                                "results": [[25,"F"]],
                                "times": [[25,0]]}},
                        "results": [[25,"F"]],
                        "times": [[25,0]]}},
             # Incremental results
             {"builds": ["3"],
             "tests": {"baz": {
                            "003.html": {
                                "results": [[1,"F"]],
                                "times": [[1,0]]}}}},
             # Expected results
             {"builds": ["3", "2", "1"],
             "tests": {"baz": {
                            "003.html": {
                                "results": [[26,"F"]],
                                "times": [[26,0]]}}},
              "version": 4})

    def test_merge_build_directory_hierarchy(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"bar": {"baz": {
                           "003.html": {
                                "results": [[25,"F"]],
                                "times": [[25,0]]}}},
                       "foo": {
                           "001.html": {
                                "results": [[50,"F"]],
                                "times": [[50,0]]},
                           "002.html": {
                                "results": [[100,"I"]],
                                "times": [[100,0]]}}},
              "version": 4},
            # Incremental results
            {"builds": ["3"],
             "tests": {"baz": {
                           "004.html": {
                               "results": [[1,"I"]],
                               "times": [[1,0]]}},
                       "foo": {
                           "001.html": {
                               "results": [[1,"F"]],
                               "times": [[1,0]]},
                           "002.html": {
                               "results": [[1,"I"]],
                               "times": [[1,0]]}}},
             "version": 4},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"bar": {"baz": {
                           "003.html": {
                               "results": [[1,"N"],[25,"F"]],
                               "times": [[26,0]]}}},
                       "baz": {
                           "004.html": {
                               "results": [[1,"I"]],
                               "times": [[1,0]]}},
                       "foo": {
                           "001.html": {
                               "results": [[51,"F"]],
                               "times": [[51,0]]},
                           "002.html": {
                               "results": [[101,"I"]],
                               "times": [[101,0]]}}},
             "version": 4})

    # FIXME(aboxhall): Add some tests for xhtml/svg test results.

    def test_get_test_name_list(self):
        # Get test name list only. Don't include non-test-list data and
        # of test result details.
        # FIXME: This also tests a temporary bug in the data where directory-level
        # results have a results and times values. Once that bug is fixed,
        # remove this test-case and assert we don't ever hit it.
        self._test_get_test_list(
            # Input results
            {"builds": ["3", "2", "1"],
             "tests": {"foo": {
                           "001.html": {
                               "results": [[200,"P"]],
                               "times": [[200,0]]},
                           "results": [[1,"N"]],
                           "times": [[1,0]]},
                       "002.html": {
                           "results": [[10,"F"]],
                           "times": [[10,0]]}}},
            # Expected results
            {"foo": {"001.html":{}}, "002.html":{}})

    def test_gtest(self):
        self._test_merge(
            # Aggregated results
            {"builds": ["2", "1"],
             "tests": {"foo.bar": {
                           "results": [[50,"F"]],
                           "times": [[50,0]]},
                       "foo.bar2": {
                           "results": [[100,"I"]],
                           "times": [[100,0]]},
                       },
             "version": 3},
            # Incremental results
            {"builds": ["3"],
             "tests": {"foo.bar2": {
                           "results": [[1,"I"]],
                           "times": [[1,0]]},
                       "foo.bar3": {
                           "results": [[1,"F"]],
                           "times": [[1,0]]},
                       },
             "version": 4},
            # Expected results
            {"builds": ["3", "2", "1"],
             "tests": {"foo.bar": {
                           "results": [[1, "N"], [50,"F"]],
                           "times": [[51,0]]},
                       "foo.bar2": {
                           "results": [[101,"I"]],
                           "times": [[101,0]]},
                       "foo.bar3": {
                           "results": [[1,"F"]],
                           "times": [[1,0]]},
                       },
             "version": 4})

if __name__ == '__main__':
    unittest.main()
