# Copyright 2017 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Unittests for upload_goma_info.py"""

import collections
import datetime
import getpass
import json
import os
import time

from chromite.cbuildbot import goma_util
from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
from chromite.lib import gs
from chromite.lib import osutils


class TestGomaLogUploader(cros_test_lib.MockTempDirTestCase):
    """Tests for upload_goma_info."""

    def setUp(self):

        # cros_build_lib.CreateTarball() function is unit tested. Safe to patch.
        # pylint: disable=unused-argument
        def _createTarball(tarball_path, *args, **kwargs):
            osutils.Touch(tarball_path, makedirs=True)

        self.tarball_mock = self.PatchObject(
            cros_build_lib, "CreateTarball", side_effect=_createTarball
        )

    def _CreateLogFile(self, name, timestamp):
        path = os.path.join(
            self.tempdir,
            "%s.host.log.INFO.%s"
            % (name, timestamp.strftime("%Y%m%d-%H%M%S.%f")),
        )
        osutils.WriteFile(
            path, timestamp.strftime("Log file created at: %Y/%m/%d %H:%M:%S")
        )

    def testUpload(self):
        self._CreateLogFile(
            "compiler_proxy", datetime.datetime(2017, 4, 26, 12, 0, 0)
        )
        self._CreateLogFile(
            "compiler_proxy-subproc", datetime.datetime(2017, 4, 26, 12, 0, 0)
        )
        self._CreateLogFile("gomacc", datetime.datetime(2017, 4, 26, 12, 1, 0))
        self._CreateLogFile("gomacc", datetime.datetime(2017, 4, 26, 12, 2, 0))

        # Set env vars.
        os.environ.update(
            {
                "GLOG_log_dir": str(self.tempdir),
                "BUILDBOT_BUILDERNAME": "builder-name",
                "BUILDBOT_MASTERNAME": "master-name",
                "BUILDBOT_SLAVENAME": "slave-name",
                "BUILDBOT_CLOBBER": "1",
            }
        )

        self.PatchObject(
            cros_build_lib, "GetHostName", lambda: "stub-host-name"
        )
        copy_log = []
        self.PatchObject(
            gs.GSContext,
            "CopyInto",
            lambda _, __, remote_dir, filename=None, **kwargs: copy_log.append(
                (remote_dir, filename, kwargs.get("headers"))
            ),
        )

        goma_util.GomaLogUploader(
            self.tempdir,
            today=datetime.date(2017, 4, 26),
            dry_run=True,
            cbb_config_name="test_config",
        ).Upload()

        expect_builderinfo = json.dumps(
            collections.OrderedDict(
                [
                    ("builder", "builder-name"),
                    ("master", "master-name"),
                    ("slave", "slave-name"),
                    ("clobber", True),
                    ("os", "chromeos"),
                    ("is_luci", False),
                    ("cbb_config_name", "test_config"),
                ]
            )
        )
        self.assertEqual(
            copy_log,
            [
                (
                    "gs://chrome-goma-log/2017/04/26/stub-host-name",
                    "compiler_proxy-subproc.host.log.INFO.20170426-120000.000000.gz",
                    ["x-goog-meta-builderinfo:" + expect_builderinfo],
                ),
                (
                    "gs://chrome-goma-log/2017/04/26/stub-host-name",
                    "compiler_proxy.host.log.INFO.20170426-120000.000000.gz",
                    ["x-goog-meta-builderinfo:" + expect_builderinfo],
                ),
                (
                    "gs://chrome-goma-log/2017/04/26/stub-host-name",
                    "gomacc.host.log.INFO.20170426-120100.000000.tar.gz",
                    ["x-goog-meta-builderinfo:" + expect_builderinfo],
                ),
            ],
        )
        self.tarball_mock.assert_called_once()

    def testUploadLuci(self):
        self._CreateLogFile(
            "compiler_proxy", datetime.datetime(2017, 4, 26, 12, 0, 0)
        )
        self._CreateLogFile(
            "compiler_proxy-subproc", datetime.datetime(2017, 4, 26, 12, 0, 0)
        )
        self._CreateLogFile("gomacc", datetime.datetime(2017, 4, 26, 12, 1, 0))
        self._CreateLogFile("gomacc", datetime.datetime(2017, 4, 26, 12, 2, 0))

        # Set env vars.
        envs = (
            "BUILDBOT_BUILDERNAME",
            "BUILDBOT_MASTERNAME",
            "BUILDBOT_SLAVENAME",
            "BUILDBOT_CLOBBER",
        )
        for env in envs:
            if env in os.environ:
                del os.environ[env]

        os.environ.update(
            {
                "GLOG_log_dir": str(self.tempdir),
            }
        )

        self.PatchObject(
            cros_build_lib, "GetHostName", lambda: "stub-host-name"
        )
        copy_log = []
        self.PatchObject(
            gs.GSContext,
            "CopyInto",
            lambda _, __, remote_dir, filename=None, **kwargs: copy_log.append(
                (remote_dir, filename, kwargs.get("headers"))
            ),
        )

        goma_util.GomaLogUploader(
            self.tempdir,
            today=datetime.date(2017, 4, 26),
            dry_run=True,
            cbb_config_name="test_config",
        ).Upload()

        builderinfo = collections.OrderedDict(
            [
                ("builder", ""),
                ("master", ""),
                ("slave", ""),
                ("clobber", False),
                ("os", "chromeos"),
                ("is_luci", True),
                ("cbb_config_name", "test_config"),
            ]
        )
        builderinfo["builder_id"] = collections.OrderedDict(
            [
                ("project", "chromeos"),
                ("builder", "Prod"),
                ("bucket", "general"),
            ]
        )

        expect_builderinfo = json.dumps(builderinfo)
        self.assertEqual(
            copy_log,
            [
                (
                    "gs://chrome-goma-log/2017/04/26/stub-host-name",
                    "compiler_proxy-subproc.host.log.INFO.20170426-120000.000000.gz",
                    ["x-goog-meta-builderinfo:" + expect_builderinfo],
                ),
                (
                    "gs://chrome-goma-log/2017/04/26/stub-host-name",
                    "compiler_proxy.host.log.INFO.20170426-120000.000000.gz",
                    ["x-goog-meta-builderinfo:" + expect_builderinfo],
                ),
                (
                    "gs://chrome-goma-log/2017/04/26/stub-host-name",
                    "gomacc.host.log.INFO.20170426-120100.000000.tar.gz",
                    ["x-goog-meta-builderinfo:" + expect_builderinfo],
                ),
            ],
        )
        self.tarball_mock.assert_called_once()

    def testNinjaLogUpload(self):
        self._CreateLogFile(
            "compiler_proxy", datetime.datetime(2017, 8, 21, 12, 0, 0)
        )
        self._CreateLogFile(
            "compiler_proxy-subproc", datetime.datetime(2017, 8, 21, 12, 0, 0)
        )

        ninja_log_path = os.path.join(self.tempdir, "ninja_log")
        osutils.WriteFile(ninja_log_path, "Ninja Log Content\n")
        timestamp = datetime.datetime(2017, 8, 21, 12, 0, 0)
        mtime = time.mktime(timestamp.timetuple())
        os.utime(ninja_log_path, ((time.time(), mtime)))

        osutils.WriteFile(
            os.path.join(self.tempdir, "ninja_command"), "ninja_command"
        )
        osutils.WriteFile(os.path.join(self.tempdir, "ninja_cwd"), "ninja_cwd")
        osutils.WriteFile(
            os.path.join(self.tempdir, "ninja_env"),
            "key1=value1\0key2=value2\0",
        )
        osutils.WriteFile(os.path.join(self.tempdir, "ninja_exit"), "0")

        self.PatchObject(
            cros_build_lib, "GetHostName", lambda: "stub-host-name"
        )
        copy_log = []
        self.PatchObject(
            gs.GSContext,
            "CopyInto",
            lambda _, __, remote_dir, filename=None, **kwargs: copy_log.append(
                (remote_dir, filename)
            ),
        )

        goma_util.GomaLogUploader(
            self.tempdir, today=datetime.date(2017, 8, 21), dry_run=True
        ).Upload()

        username = getpass.getuser()
        pid = os.getpid()
        upload_filename = "ninja_log.%s.stub-host-name.20170821-120000.%d" % (
            username,
            pid,
        )
        self.assertEqual(
            copy_log,
            [
                (
                    "gs://chrome-goma-log/2017/08/21/stub-host-name",
                    "compiler_proxy-subproc.host.log.INFO.20170821-120000.000000.gz",
                ),
                (
                    "gs://chrome-goma-log/2017/08/21/stub-host-name",
                    "compiler_proxy.host.log.INFO.20170821-120000.000000.gz",
                ),
                (
                    "gs://chrome-goma-log/2017/08/21/stub-host-name",
                    upload_filename + ".gz",
                ),
            ],
        )

        # Verify content of ninja_log file.
        ninja_log_content = osutils.ReadFile(
            os.path.join(self.tempdir, upload_filename)
        )
        content, eof, metadata_json = ninja_log_content.split("\n", 3)
        self.assertEqual("Ninja Log Content", content)
        self.assertEqual("# end of ninja log", eof)
        metadata = json.loads(metadata_json)
        self.assertEqual(
            metadata,
            {
                "platform": "chromeos",
                "cmdline": ["ninja_command"],
                "cwd": "ninja_cwd",
                "exit": 0,
                "env": {"key1": "value1", "key2": "value2"},
                "compiler_proxy_info": "compiler_proxy.host.log.INFO.20170821-120000.000000",
            },
        )
