|  | #!/usr/bin/env vpython | 
|  | # Copyright 2020 The Chromium Authors. All rights reserved. | 
|  | # 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 unittest | 
|  |  | 
|  | import 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, expected): | 
|  | 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._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): | 
|  | args = createSkiaGoldArgs() | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.verifySkiaGoldProperties(sgp, {}) | 
|  |  | 
|  | def test_initializeSkiaGoldAttributes_explicitLocal(self): | 
|  | args = createSkiaGoldArgs(local_pixel_tests=True) | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.verifySkiaGoldProperties(sgp, {'local_pixel_tests': True}) | 
|  |  | 
|  | def test_initializeSkiaGoldAttributes_explicitNonLocal(self): | 
|  | args = createSkiaGoldArgs(local_pixel_tests=False) | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.verifySkiaGoldProperties(sgp, {'local_pixel_tests': False}) | 
|  |  | 
|  | def test_initializeSkiaGoldAttributes_explicitNoLuciAuth(self): | 
|  | args = createSkiaGoldArgs(no_luci_auth=True) | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.verifySkiaGoldProperties(sgp, {'no_luci_auth': True}) | 
|  |  | 
|  | def test_initializeSkiaGoldAttributes_explicitCrs(self): | 
|  | args = createSkiaGoldArgs(code_review_system='foo') | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.verifySkiaGoldProperties(sgp, {'code_review_system': 'foo'}) | 
|  |  | 
|  | def test_initializeSkiaGoldAttributes_bypassExplicitTrue(self): | 
|  | 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): | 
|  | args = createSkiaGoldArgs(git_revision='a') | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.verifySkiaGoldProperties(sgp, {'git_revision': 'a'}) | 
|  |  | 
|  | def test_initializeSkiaGoldAttributes_tryjobArgsIgnoredWithoutRevision(self): | 
|  | 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): | 
|  | 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): | 
|  | 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): | 
|  | 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): | 
|  | args = createSkiaGoldArgs() | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | with mock.patch.dict(os.environ, {}, clear=True): | 
|  | self.assertTrue(sgp.local_pixel_tests) | 
|  |  | 
|  | def testLocalPixelTests_determineFalse(self): | 
|  | args = createSkiaGoldArgs() | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | with mock.patch.dict(os.environ, {'SWARMING_SERVER': ''}, clear=True): | 
|  | self.assertFalse(sgp.local_pixel_tests) | 
|  |  | 
|  | def testIsTryjobRun_noIssue(self): | 
|  | args = createSkiaGoldArgs() | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.assertFalse(sgp.IsTryjobRun()) | 
|  |  | 
|  | def testIsTryjobRun_issue(self): | 
|  | 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): | 
|  | args = createSkiaGoldArgs(git_revision='a') | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | self.assertEqual(sgp.git_revision, 'a') | 
|  |  | 
|  | def testGetGitRevision_findValidRevision(self): | 
|  | args = createSkiaGoldArgs(local_pixel_tests=True) | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | with mock.patch.object(skia_gold_properties.SkiaGoldProperties, | 
|  | '_GetGitOriginMasterHeadSha1') 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): | 
|  | args = createSkiaGoldArgs(local_pixel_tests=False) | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | with self.assertRaises(RuntimeError): | 
|  | _ = sgp.git_revision | 
|  |  | 
|  | def testGetGitRevision_findEmptyRevision(self): | 
|  | args = createSkiaGoldArgs(local_pixel_tests=True) | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | with mock.patch.object(skia_gold_properties.SkiaGoldProperties, | 
|  | '_GetGitOriginMasterHeadSha1') as patched_head: | 
|  | patched_head.return_value = '' | 
|  | with self.assertRaises(RuntimeError): | 
|  | _ = sgp.git_revision | 
|  |  | 
|  | def testGetGitRevision_findMalformedRevision(self): | 
|  | args = createSkiaGoldArgs(local_pixel_tests=True) | 
|  | sgp = skia_gold_properties.SkiaGoldProperties(args) | 
|  | with mock.patch.object(skia_gold_properties.SkiaGoldProperties, | 
|  | '_GetGitOriginMasterHeadSha1') as patched_head: | 
|  | patched_head.return_value = 'a' * 39 | 
|  | with self.assertRaises(RuntimeError): | 
|  | _ = sgp.git_revision | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | unittest.main(verbosity=2) |