#!/usr/bin/env vpython3 # Copyright 2020 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. #pylint: disable=protected-access import os import sys import unittest if sys.version_info[0] == 2: import mock else: import unittest.mock as mock from skia_gold_common import skia_gold_properties from skia_gold_common import unittest_utils createSkiaGoldArgs = unittest_utils.createSkiaGoldArgs class SkiaGoldPropertiesInitializationTest(unittest.TestCase): """Tests that SkiaGoldProperties initializes (or doesn't) when expected.""" def verifySkiaGoldProperties( self, instance: skia_gold_properties.SkiaGoldProperties, expected: dict) -> None: self.assertEqual(instance._local_pixel_tests, expected.get('local_pixel_tests')) self.assertEqual(instance._no_luci_auth, expected.get('no_luci_auth')) self.assertEqual(instance._code_review_system, expected.get('code_review_system')) self.assertEqual(instance._continuous_integration_system, expected.get('continuous_integration_system')) self.assertEqual(instance._git_revision, expected.get('git_revision')) self.assertEqual(instance._issue, expected.get('gerrit_issue')) self.assertEqual(instance._patchset, expected.get('gerrit_patchset')) self.assertEqual(instance._job_id, expected.get('buildbucket_id')) self.assertEqual(instance._bypass_skia_gold_functionality, expected.get('bypass_skia_gold_functionality')) def test_initializeSkiaGoldAttributes_unsetLocal(self) -> None: args = createSkiaGoldArgs() sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {}) def test_initializeSkiaGoldAttributes_explicitLocal(self) -> None: args = createSkiaGoldArgs(local_pixel_tests=True) sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {'local_pixel_tests': True}) def test_initializeSkiaGoldAttributes_explicitNonLocal(self) -> None: args = createSkiaGoldArgs(local_pixel_tests=False) sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {'local_pixel_tests': False}) def test_initializeSkiaGoldAttributes_explicitNoLuciAuth(self) -> None: args = createSkiaGoldArgs(no_luci_auth=True) sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {'no_luci_auth': True}) def test_initializeSkiaGoldAttributes_explicitServiceAccount(self) -> None: args = createSkiaGoldArgs(service_account='a') sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, { 'service_account': 'a', 'no_luci_auth': True }) def test_initializeSkiaGoldAttributes_explicitCrs(self) -> None: args = createSkiaGoldArgs(code_review_system='foo') sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {'code_review_system': 'foo'}) def test_initializeSkiaGoldAttributes_explicitCis(self) -> None: args = createSkiaGoldArgs(continuous_integration_system='foo') sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {'continuous_integration_system': 'foo'}) def test_initializeSkiaGoldAttributes_bypassExplicitTrue(self) -> None: args = createSkiaGoldArgs(bypass_skia_gold_functionality=True) sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {'bypass_skia_gold_functionality': True}) def test_initializeSkiaGoldAttributes_explicitGitRevision(self) -> None: args = createSkiaGoldArgs(git_revision='a') sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {'git_revision': 'a'}) def test_initializeSkiaGoldAttributes_tryjobArgsIgnoredWithoutRevision( self) -> None: args = createSkiaGoldArgs(gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties(sgp, {}) def test_initializeSkiaGoldAttributes_tryjobArgs(self) -> None: args = createSkiaGoldArgs(git_revision='a', gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) sgp = skia_gold_properties.SkiaGoldProperties(args) self.verifySkiaGoldProperties( sgp, { 'git_revision': 'a', 'gerrit_issue': 1, 'gerrit_patchset': 2, 'buildbucket_id': 3 }) def test_initializeSkiaGoldAttributes_tryjobMissingPatchset(self) -> None: args = createSkiaGoldArgs(git_revision='a', gerrit_issue=1, buildbucket_id=3) with self.assertRaises(RuntimeError): skia_gold_properties.SkiaGoldProperties(args) def test_initializeSkiaGoldAttributes_tryjobMissingBuildbucket(self) -> None: args = createSkiaGoldArgs(git_revision='a', gerrit_issue=1, gerrit_patchset=2) with self.assertRaises(RuntimeError): skia_gold_properties.SkiaGoldProperties(args) class SkiaGoldPropertiesCalculationTest(unittest.TestCase): """Tests that SkiaGoldProperties properly calculates certain properties.""" def testLocalPixelTests_determineTrue(self) -> None: args = createSkiaGoldArgs() sgp = skia_gold_properties.SkiaGoldProperties(args) with mock.patch.dict(os.environ, {}, clear=True): self.assertTrue(sgp.local_pixel_tests) with mock.patch.dict(os.environ, {'RUNNING_IN_SKYLAB': '0'}, clear=True): self.assertTrue(sgp.local_pixel_tests) def testLocalPixelTests_determineFalse(self) -> None: args = createSkiaGoldArgs() sgp = skia_gold_properties.SkiaGoldProperties(args) with mock.patch.dict(os.environ, {'SWARMING_SERVER': ''}, clear=True): self.assertFalse(sgp.local_pixel_tests) with mock.patch.dict(os.environ, {'RUNNING_IN_SKYLAB': '1'}, clear=True): self.assertFalse(sgp.local_pixel_tests) def testIsTryjobRun_noIssue(self) -> None: args = createSkiaGoldArgs() sgp = skia_gold_properties.SkiaGoldProperties(args) self.assertFalse(sgp.IsTryjobRun()) def testIsTryjobRun_issue(self) -> None: args = createSkiaGoldArgs(git_revision='a', gerrit_issue=1, gerrit_patchset=2, buildbucket_id=3) sgp = skia_gold_properties.SkiaGoldProperties(args) self.assertTrue(sgp.IsTryjobRun()) def testGetGitRevision_revisionSet(self) -> None: args = createSkiaGoldArgs(git_revision='a') sgp = skia_gold_properties.SkiaGoldProperties(args) self.assertEqual(sgp.git_revision, 'a') def testGetGitRevision_findValidRevision(self) -> None: args = createSkiaGoldArgs(local_pixel_tests=True) sgp = skia_gold_properties.SkiaGoldProperties(args) with mock.patch.object(skia_gold_properties.SkiaGoldProperties, '_GetGitOriginMainHeadSha1') as patched_head: expected = 'a' * 40 patched_head.return_value = expected self.assertEqual(sgp.git_revision, expected) # Should be cached. self.assertEqual(sgp._git_revision, expected) def testGetGitRevision_noExplicitOnBot(self) -> None: args = createSkiaGoldArgs(local_pixel_tests=False) sgp = skia_gold_properties.SkiaGoldProperties(args) with self.assertRaises(RuntimeError): _ = sgp.git_revision def testGetGitRevision_findEmptyRevision(self) -> None: args = createSkiaGoldArgs(local_pixel_tests=True) sgp = skia_gold_properties.SkiaGoldProperties(args) with mock.patch.object(skia_gold_properties.SkiaGoldProperties, '_GetGitOriginMainHeadSha1') as patched_head: patched_head.return_value = '' with self.assertRaises(RuntimeError): _ = sgp.git_revision def testGetGitRevision_findMalformedRevision(self) -> None: args = createSkiaGoldArgs(local_pixel_tests=True) sgp = skia_gold_properties.SkiaGoldProperties(args) with mock.patch.object(skia_gold_properties.SkiaGoldProperties, '_GetGitOriginMainHeadSha1') as patched_head: patched_head.return_value = 'a' * 39 with self.assertRaises(RuntimeError): _ = sgp.git_revision if __name__ == '__main__': unittest.main(verbosity=2)