#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright 2018 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Unittest for buildbot_utils.py."""


import time
import unittest
from unittest.mock import patch

from cros_utils import buildbot_utils
from cros_utils import command_executer


class TrybotTest(unittest.TestCase):
    """Test for CommandExecuter class."""

    tryjob_out = (
        '[{"buildbucket_id": "8952721143823688176", "build_config": '
        '"cave-llvm-toolchain-tryjob", "url": '
        # pylint: disable=line-too-long
        '"http://cros-goldeneye/chromeos/healthmonitoring/buildDetails?buildbucketId=8952721143823688176"}]'
    )

    GSUTILS_LS = "\n".join(
        [
            "gs://chromeos-image-archive/{0}/R78-12421.0.0/",
            "gs://chromeos-image-archive/{0}/R78-12422.0.0/",
            "gs://chromeos-image-archive/{0}/R78-12423.0.0/",
        ]
    )

    GSUTILS_LS_RECIPE = "\n".join(
        [
            "gs://chromeos-image-archive/{0}/R83-12995.0.0-30031-8885075268947031/",
            "gs://chromeos-image-archive/{0}/R83-13003.0.0-30196-8884755532184725/",
            "gs://chromeos-image-archive/{0}/R83-13003.0.0-30218-8884712858556419/",
        ]
    )

    buildresult_out = (
        '{"8952721143823688176": {"status": "pass", "artifacts_url":'
        '"gs://chromeos-image-archive/trybot-elm-release-tryjob/R67-10468.0.0-'
        'b20789"}}'
    )

    buildbucket_id = "8952721143823688176"
    counter_1 = 10

    def testGetTrybotImage(self):
        with patch.object(buildbot_utils, "SubmitTryjob") as mock_submit:
            with patch.object(buildbot_utils, "PeekTrybotImage") as mock_peek:
                with patch.object(time, "sleep", return_value=None):

                    def peek(_chromeos_root, _buildbucket_id):
                        self.counter_1 -= 1
                        if self.counter_1 >= 0:
                            return ("running", "")
                        return (
                            "pass",
                            "gs://chromeos-image-archive/trybot-elm-release-tryjob/"
                            "R67-10468.0.0-b20789",
                        )

                    mock_peek.side_effect = peek
                    mock_submit.return_value = self.buildbucket_id

                    # sync
                    buildbucket_id, image = buildbot_utils.GetTrybotImage(
                        "/tmp", "falco-release-tryjob", []
                    )
                    self.assertEqual(buildbucket_id, self.buildbucket_id)
                    self.assertEqual(
                        "trybot-elm-release-tryjob/" "R67-10468.0.0-b20789",
                        image,
                    )

                    # async
                    buildbucket_id, image = buildbot_utils.GetTrybotImage(
                        "/tmp", "falco-release-tryjob", [], asynchronous=True
                    )
                    self.assertEqual(buildbucket_id, self.buildbucket_id)
                    self.assertEqual(" ", image)

    def testSubmitTryjob(self):
        with patch.object(
            command_executer.CommandExecuter, "RunCommandWOutput"
        ) as mocked_run:
            mocked_run.return_value = (0, self.tryjob_out, "")
            buildbucket_id = buildbot_utils.SubmitTryjob(
                "/", "falco-release-tryjob", [], []
            )
            self.assertEqual(buildbucket_id, self.buildbucket_id)

    def testPeekTrybotImage(self):
        with patch.object(
            command_executer.CommandExecuter, "RunCommandWOutput"
        ) as mocked_run:
            # pass
            mocked_run.return_value = (0, self.buildresult_out, "")
            status, image = buildbot_utils.PeekTrybotImage(
                "/", self.buildbucket_id
            )
            self.assertEqual("pass", status)
            self.assertEqual(
                "gs://chromeos-image-archive/trybot-elm-release-tryjob/"
                "R67-10468.0.0-b20789",
                image,
            )

            # running
            mocked_run.return_value = (1, "", "")
            status, image = buildbot_utils.PeekTrybotImage(
                "/", self.buildbucket_id
            )
            self.assertEqual("running", status)
            self.assertEqual(None, image)

            # fail
            buildresult_fail = self.buildresult_out.replace('"pass"', '"fail"')
            mocked_run.return_value = (0, buildresult_fail, "")
            status, image = buildbot_utils.PeekTrybotImage(
                "/", self.buildbucket_id
            )
            self.assertEqual("fail", status)
            self.assertEqual(
                "gs://chromeos-image-archive/trybot-elm-release-tryjob/"
                "R67-10468.0.0-b20789",
                image,
            )

    def testParseTryjobBuildbucketId(self):
        buildbucket_id = buildbot_utils.ParseTryjobBuildbucketId(
            self.tryjob_out
        )
        self.assertEqual(buildbucket_id, self.buildbucket_id)

    def testGetLatestImageValid(self):
        with patch.object(
            command_executer.CommandExecuter, "ChrootRunCommandWOutput"
        ) as mocked_run:
            with patch.object(
                buildbot_utils, "DoesImageExist"
            ) as mocked_imageexist:
                IMAGE_DIR = "lulu-release"
                mocked_run.return_value = (
                    0,
                    self.GSUTILS_LS.format(IMAGE_DIR),
                    "",
                )
                mocked_imageexist.return_value = True
                image = buildbot_utils.GetLatestImage("", IMAGE_DIR)
                self.assertEqual(image, "{0}/R78-12423.0.0".format(IMAGE_DIR))

    def testGetLatestImageInvalid(self):
        with patch.object(
            command_executer.CommandExecuter, "ChrootRunCommandWOutput"
        ) as mocked_run:
            with patch.object(
                buildbot_utils, "DoesImageExist"
            ) as mocked_imageexist:
                IMAGE_DIR = "kefka-release"
                mocked_run.return_value = (
                    0,
                    self.GSUTILS_LS.format(IMAGE_DIR),
                    "",
                )
                mocked_imageexist.return_value = False
                image = buildbot_utils.GetLatestImage("", IMAGE_DIR)
                self.assertIsNone(image)

    def testGetLatestRecipeImageValid(self):
        with patch.object(
            command_executer.CommandExecuter, "ChrootRunCommandWOutput"
        ) as mocked_run:
            with patch.object(
                buildbot_utils, "DoesImageExist"
            ) as mocked_imageexist:
                IMAGE_DIR = "lulu-llvm-next-nightly"
                mocked_run.return_value = (
                    0,
                    self.GSUTILS_LS_RECIPE.format(IMAGE_DIR),
                    "",
                )
                mocked_imageexist.return_value = True
                image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR)
                self.assertEqual(
                    image,
                    "{0}/R83-13003.0.0-30218-8884712858556419".format(
                        IMAGE_DIR
                    ),
                )

    def testGetLatestRecipeImageInvalid(self):
        with patch.object(
            command_executer.CommandExecuter, "ChrootRunCommandWOutput"
        ) as mocked_run:
            with patch.object(
                buildbot_utils, "DoesImageExist"
            ) as mocked_imageexist:
                IMAGE_DIR = "kefka-llvm-next-nightly"
                mocked_run.return_value = (
                    0,
                    self.GSUTILS_LS_RECIPE.format(IMAGE_DIR),
                    "",
                )
                mocked_imageexist.return_value = False
                image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR)
                self.assertIsNone(image)

    def testGetLatestRecipeImageTwodays(self):
        with patch.object(
            command_executer.CommandExecuter, "ChrootRunCommandWOutput"
        ) as mocked_run:
            with patch.object(
                buildbot_utils, "DoesImageExist"
            ) as mocked_imageexist:
                IMAGE_DIR = "lulu-llvm-next-nightly"
                mocked_run.return_value = (
                    0,
                    self.GSUTILS_LS_RECIPE.format(IMAGE_DIR),
                    "",
                )
                mocked_imageexist.side_effect = [False, False, True]
                image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR)
                self.assertIsNone(image)
                mocked_imageexist.side_effect = [False, True, True]
                image = buildbot_utils.GetLatestRecipeImage("", IMAGE_DIR)
                self.assertEqual(
                    image,
                    "{0}/R83-13003.0.0-30196-8884755532184725".format(
                        IMAGE_DIR
                    ),
                )


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