| # -*- 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-paladin" |
| acl_sets: "default" |
| schedule: "funky schedule" |
| buildbucket: { |
| server: "cr-buildbucket.appspot.com" |
| bucket: "luci.chromeos.general" |
| builder: "Prod" |
| tags: "cbb_branch:master" |
| tags: "cbb_config:amd64-generic-paladin" |
| tags: "cbb_display_label:MockLabel" |
| properties: "cbb_branch:master" |
| properties: "cbb_config:amd64-generic-paladin" |
| 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'] |
| builds = ['test_build'] |
| |
| expected = """ |
| trigger { |
| id: "simple" |
| acl_sets: "default" |
| schedule: "with 5m interval" |
| gitiles: { |
| repo: "url://repo" |
| refs: "refs/path" |
| } |
| triggers: "test_build" |
| } |
| """ |
| |
| result = gen_luci_scheduler.genSchedulerTrigger( |
| trigger_name, repo, refs, 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, 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-paladin" |
| acl_sets: "default" |
| schedule: "funky schedule" |
| buildbucket: { |
| server: "cr-buildbucket.appspot.com" |
| bucket: "luci.chromeos.general" |
| builder: "Prod" |
| tags: "cbb_branch:mock_branch" |
| tags: "cbb_config:amd64-generic-paladin" |
| tags: "cbb_display_label:MockLabel" |
| properties: "cbb_branch:mock_branch" |
| properties: "cbb_config:amd64-generic-paladin" |
| 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-paladin" |
| acl_sets: "default" |
| schedule: "funky schedule" |
| buildbucket: { |
| server: "cr-buildbucket.appspot.com" |
| bucket: "luci.chromeos.general" |
| builder: "Prod" |
| tags: "cbb_branch:master" |
| tags: "cbb_config:amd64-generic-paladin" |
| tags: "cbb_display_label:MockLabel" |
| tags: "cbb_workspace_branch:work_branch" |
| properties: "cbb_branch:master" |
| properties: "cbb_config:amd64-generic-paladin" |
| 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-paladin" |
| acl_sets: "default" |
| schedule: "funky schedule" |
| buildbucket: { |
| server: "cr-buildbucket.appspot.com" |
| bucket: "luci.chromeos.general" |
| builder: "Prod" |
| tags: "cbb_branch:master" |
| tags: "cbb_config:amd64-generic-paladin" |
| tags: "cbb_display_label:MockLabel" |
| tags: "cbb_goma_client_type:client_type" |
| properties: "cbb_branch:master" |
| properties: "cbb_config:amd64-generic-paladin" |
| 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='ProdBuilder', |
| display_label='MockLabel', |
| ) |
| |
| site_config.Add( |
| 'build_prod', |
| luci_builder='ProdBuilder', |
| 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='ProdBuilder', |
| 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" |
| } |
| } |
| |
| 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: "ProdBuilder" |
| 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: "ProdBuilder" |
| 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) |