# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Test gen_luci_scheduler."""
from __future__ import print_function

import sys

from chromite.config import chromeos_config
from chromite.lib import cros_test_lib
from chromite.lib import config_lib
from chromite.lib import config_lib_unittest
from chromite.scripts import gen_luci_scheduler


assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'


# It's reasonable for unittests to look at internals.
# pylint: disable=protected-access


class GenLuciSchedulerTest(cros_test_lib.MockTestCase):
  """Tests for cbuildbot_launch script."""
  def testSanityAgainstProd(self):
    """Test we can generate a luci scheduler config with live data."""
    # If it runs without crashing, we pass.
    gen_luci_scheduler.genLuciSchedulerConfig(
        config_lib.GetConfig(), chromeos_config.BranchScheduleConfig())

  def testGenSchedulerJob(self):
    """Test the job creation helper."""
    build_config = config_lib_unittest.MockBuildConfig().apply(
        schedule='funky schedule'
    )

    expected = """
job {
  id: "amd64-generic-release"
  acl_sets: "default"
  schedule: "funky schedule"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "LegacyRelease"
    tags: "cbb_branch:master"
    tags: "cbb_config:amd64-generic-release"
    tags: "cbb_display_label:MockLabel"
    properties: "cbb_branch:master"
    properties: "cbb_config:amd64-generic-release"
    properties: "cbb_display_label:MockLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}
"""

    result = gen_luci_scheduler.genSchedulerJob(build_config)
    self.assertEqual(result, expected)

  def testGenSchedulerTriggerSimple(self):
    """Test the trigger creation helper."""
    trigger_name = 'simple'
    repo = 'url://repo'
    refs = ['refs/path']
    path_regexps = ['path/regexps']
    builds = ['test_build']

    expected = """
trigger {
  id: "simple"
  acl_sets: "default"
  schedule: "with 5m interval"
  gitiles: {
    repo: "url://repo"
    refs: "refs/path"
    path_regexps: "path/regexps"
  }
  triggers: "test_build"
}
"""

    result = gen_luci_scheduler.genSchedulerTrigger(
        trigger_name, repo, refs, path_regexps, builds)

    self.assertEqual(result, expected)

  def testGenSchedulerTriggerComplex(self):
    """Test the trigger creation helper."""
    trigger_name = 'complex'
    repo = 'url://repo'
    refs = ['refs/path', 'refs/other_path']
    builds = ['test_build_a', 'test_build_b']

    expected = """
trigger {
  id: "complex"
  acl_sets: "default"
  schedule: "with 5m interval"
  gitiles: {
    repo: "url://repo"
    refs: "refs/path"
    refs: "refs/other_path"
  }
  triggers: "test_build_a"
  triggers: "test_build_b"
}
"""

    result = gen_luci_scheduler.genSchedulerTrigger(
        trigger_name, repo, refs, None, builds)

    self.assertEqual(result, expected)


  def testGenSchedulerBranched(self):
    """Test the job creation helper."""
    build_config = config_lib_unittest.MockBuildConfig().apply(
        schedule_branch='mock_branch',
        schedule='funky schedule',
    )

    expected = """
job {
  id: "mock_branch-amd64-generic-release"
  acl_sets: "default"
  schedule: "funky schedule"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "LegacyRelease"
    tags: "cbb_branch:mock_branch"
    tags: "cbb_config:amd64-generic-release"
    tags: "cbb_display_label:MockLabel"
    properties: "cbb_branch:mock_branch"
    properties: "cbb_config:amd64-generic-release"
    properties: "cbb_display_label:MockLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}
"""

    result = gen_luci_scheduler.genSchedulerJob(build_config)
    self.assertEqual(result, expected)

  def testGenSchedulerWorkspaceBranch(self):
    """Test the job creation helper."""
    build_config = config_lib_unittest.MockBuildConfig().apply(
        workspace_branch='work_branch',
        schedule='funky schedule',
    )

    expected = """
job {
  id: "amd64-generic-release"
  acl_sets: "default"
  schedule: "funky schedule"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "LegacyRelease"
    tags: "cbb_branch:master"
    tags: "cbb_config:amd64-generic-release"
    tags: "cbb_display_label:MockLabel"
    tags: "cbb_workspace_branch:work_branch"
    properties: "cbb_branch:master"
    properties: "cbb_config:amd64-generic-release"
    properties: "cbb_display_label:MockLabel"
    properties: "cbb_workspace_branch:work_branch"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}
"""

    result = gen_luci_scheduler.genSchedulerJob(build_config)
    self.assertEqual(result, expected)

  def testGenSchedulerGomaClientType(self):
    """Test the job creation helper."""
    build_config = config_lib_unittest.MockBuildConfig().apply(
        goma_client_type='client_type',
        schedule='funky schedule',
    )

    expected = """
job {
  id: "amd64-generic-release"
  acl_sets: "default"
  schedule: "funky schedule"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "LegacyRelease"
    tags: "cbb_branch:master"
    tags: "cbb_config:amd64-generic-release"
    tags: "cbb_display_label:MockLabel"
    tags: "cbb_goma_client_type:client_type"
    properties: "cbb_branch:master"
    properties: "cbb_config:amd64-generic-release"
    properties: "cbb_display_label:MockLabel"
    properties: "cbb_goma_client_type:client_type"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}
"""

    result = gen_luci_scheduler.genSchedulerJob(build_config)
    self.assertEqual(result, expected)

  def testGenLuciSchedulerConfig(self):
    """Test a full LUCI Scheduler config file."""
    site_config = config_lib.SiteConfig()

    site_config.Add(
        'not_scheduled',
        luci_builder='ReleaseBuilder',
        display_label='MockLabel',
    )

    site_config.Add(
        'build_prod',
        luci_builder='ReleaseBuilder',
        display_label='MockLabel',
        schedule='run once in a while',
    )

    site_config.Add(
        'build_tester',
        luci_builder='TestBuilder',
        display_label='TestLabel',
        schedule='run daily',
    )

    site_config.Add(
        'build_triggered_a',
        luci_builder='ReleaseBuilder',
        display_label='MockLabel',
        schedule='triggered',
        triggered_gitiles=[[
            'gitiles_url_a',
            ['ref_a', 'ref_b'],
        ], [
            'gitiles_url_b',
            ['ref_c'],
        ]],
    )

    site_config.Add(
        'build_triggered_b',
        luci_builder='ProdBuilder',
        display_label='MockLabel',
        schedule='triggered',
        triggered_gitiles=[[
            'gitiles_url_b',
            ['ref_c'],
        ]],
    )

    default_config = config_lib.GetConfig().GetDefault()

    branch_configs = [
        default_config.derive(
            name='branch_tester',
            luci_builder='TestBuilder',
            display_label='TestLabel',
            schedule='run daily',
            schedule_branch='test-branch',
        ),
        default_config.derive(
            name='branch_tester_triggered',
            luci_builder='TestBuilder',
            display_label='TestLabel',
            schedule='run daily',
            schedule_branch='test-branch',
            triggered_gitiles=[[
                'gitiles_url_a',
                ['ref_a', 'ref_b'],
            ]],
        ),
    ]

    expected = """# Defines buckets on luci-scheduler.appspot.com.
#
# For schema of this file and documentation see ProjectConfig message in
# https://github.com/luci/luci-go/blob/master/scheduler/appengine/messages/config.proto

# Generated with chromite/scripts/gen_luci_scheduler

# Autodeployed with:
# http://cros-goldeneye/chromeos/legoland/builderHistory?buildConfig=luci-scheduler-updater

acl_sets {
  name: "default"
  acls {
    role: READER
    granted_to: "group:googlers"
  }
  acls {
    role: OWNER
    granted_to: "group:project-chromeos-admins"
  }
  acls {
    role: TRIGGERER
    granted_to: "group:mdb/chromeos-build-access"
  }
  acls {
    role: TRIGGERER
    granted_to: "group:project-chromeos-buildbucket-schedulers"
  }
}

trigger {
  id: "trigger_0"
  acl_sets: "default"
  schedule: "with 5m interval"
  gitiles: {
    repo: "gitiles_url_a"
    refs: "ref_a"
    refs: "ref_b"
  }
  triggers: "build_triggered_a"
  triggers: "test-branch-branch_tester_triggered"
}

trigger {
  id: "trigger_1"
  acl_sets: "default"
  schedule: "with 5m interval"
  gitiles: {
    repo: "gitiles_url_b"
    refs: "ref_c"
  }
  triggers: "build_triggered_a"
  triggers: "build_triggered_b"
}

job {
  id: "build_prod"
  acl_sets: "default"
  schedule: "run once in a while"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "ReleaseBuilder"
    tags: "cbb_branch:master"
    tags: "cbb_config:build_prod"
    tags: "cbb_display_label:MockLabel"
    properties: "cbb_branch:master"
    properties: "cbb_config:build_prod"
    properties: "cbb_display_label:MockLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}

job {
  id: "build_tester"
  acl_sets: "default"
  schedule: "run daily"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "TestBuilder"
    tags: "cbb_branch:master"
    tags: "cbb_config:build_tester"
    tags: "cbb_display_label:TestLabel"
    properties: "cbb_branch:master"
    properties: "cbb_config:build_tester"
    properties: "cbb_display_label:TestLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}

job {
  id: "build_triggered_a"
  acl_sets: "default"
  schedule: "triggered"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "ReleaseBuilder"
    tags: "cbb_branch:master"
    tags: "cbb_config:build_triggered_a"
    tags: "cbb_display_label:MockLabel"
    properties: "cbb_branch:master"
    properties: "cbb_config:build_triggered_a"
    properties: "cbb_display_label:MockLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}

job {
  id: "build_triggered_b"
  acl_sets: "default"
  schedule: "triggered"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "ProdBuilder"
    tags: "cbb_branch:master"
    tags: "cbb_config:build_triggered_b"
    tags: "cbb_display_label:MockLabel"
    properties: "cbb_branch:master"
    properties: "cbb_config:build_triggered_b"
    properties: "cbb_display_label:MockLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}

job {
  id: "test-branch-branch_tester"
  acl_sets: "default"
  schedule: "run daily"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "TestBuilder"
    tags: "cbb_branch:test-branch"
    tags: "cbb_config:branch_tester"
    tags: "cbb_display_label:TestLabel"
    properties: "cbb_branch:test-branch"
    properties: "cbb_config:branch_tester"
    properties: "cbb_display_label:TestLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}

job {
  id: "test-branch-branch_tester_triggered"
  acl_sets: "default"
  schedule: "run daily"
  buildbucket: {
    server: "cr-buildbucket.appspot.com"
    bucket: "luci.chromeos.general"
    builder: "TestBuilder"
    tags: "cbb_branch:test-branch"
    tags: "cbb_config:branch_tester_triggered"
    tags: "cbb_display_label:TestLabel"
    properties: "cbb_branch:test-branch"
    properties: "cbb_config:branch_tester_triggered"
    properties: "cbb_display_label:TestLabel"
    properties: "cbb_extra_args:[\\"--buildbot\\"]"
  }
}
"""
    result = gen_luci_scheduler.genLuciSchedulerConfig(
        site_config, branch_configs)

    self.assertEqual(result, expected)
