xref: /aosp_15_r20/tools/repohooks/rh/results_unittest.py (revision d68f33bc6fb0cc2476107c2af0573a2f5a63dfc1)
1*d68f33bcSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*d68f33bcSAndroid Build Coastguard Worker# Copyright 2023 The Android Open Source Project
3*d68f33bcSAndroid Build Coastguard Worker#
4*d68f33bcSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*d68f33bcSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*d68f33bcSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*d68f33bcSAndroid Build Coastguard Worker#
8*d68f33bcSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*d68f33bcSAndroid Build Coastguard Worker#
10*d68f33bcSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*d68f33bcSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*d68f33bcSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*d68f33bcSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*d68f33bcSAndroid Build Coastguard Worker# limitations under the License.
15*d68f33bcSAndroid Build Coastguard Worker
16*d68f33bcSAndroid Build Coastguard Worker"""Unittests for the results module."""
17*d68f33bcSAndroid Build Coastguard Worker
18*d68f33bcSAndroid Build Coastguard Workerimport os
19*d68f33bcSAndroid Build Coastguard Workerimport sys
20*d68f33bcSAndroid Build Coastguard Workerimport unittest
21*d68f33bcSAndroid Build Coastguard Worker
22*d68f33bcSAndroid Build Coastguard Worker_path = os.path.realpath(__file__ + '/../..')
23*d68f33bcSAndroid Build Coastguard Workerif sys.path[0] != _path:
24*d68f33bcSAndroid Build Coastguard Worker    sys.path.insert(0, _path)
25*d68f33bcSAndroid Build Coastguard Workerdel _path
26*d68f33bcSAndroid Build Coastguard Worker
27*d68f33bcSAndroid Build Coastguard Worker# We have to import our local modules after the sys.path tweak.  We can't use
28*d68f33bcSAndroid Build Coastguard Worker# relative imports because this is an executable program, not a module.
29*d68f33bcSAndroid Build Coastguard Worker# pylint: disable=wrong-import-position
30*d68f33bcSAndroid Build Coastguard Workerimport rh
31*d68f33bcSAndroid Build Coastguard Workerimport rh.results
32*d68f33bcSAndroid Build Coastguard Workerimport rh.utils
33*d68f33bcSAndroid Build Coastguard Worker
34*d68f33bcSAndroid Build Coastguard Worker
35*d68f33bcSAndroid Build Coastguard WorkerCOMPLETED_PROCESS_PASS = rh.utils.CompletedProcess(returncode=0)
36*d68f33bcSAndroid Build Coastguard WorkerCOMPLETED_PROCESS_FAIL = rh.utils.CompletedProcess(returncode=1)
37*d68f33bcSAndroid Build Coastguard WorkerCOMPLETED_PROCESS_WARN = rh.utils.CompletedProcess(returncode=77)
38*d68f33bcSAndroid Build Coastguard Worker
39*d68f33bcSAndroid Build Coastguard Worker
40*d68f33bcSAndroid Build Coastguard Workerclass HookResultTests(unittest.TestCase):
41*d68f33bcSAndroid Build Coastguard Worker    """Verify behavior of HookResult object."""
42*d68f33bcSAndroid Build Coastguard Worker
43*d68f33bcSAndroid Build Coastguard Worker    def test_error_warning(self):
44*d68f33bcSAndroid Build Coastguard Worker        """Check error & warning handling."""
45*d68f33bcSAndroid Build Coastguard Worker        # No errors.
46*d68f33bcSAndroid Build Coastguard Worker        result = rh.results.HookResult('hook', 'project', 'HEAD', False)
47*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result)
48*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result.is_warning())
49*d68f33bcSAndroid Build Coastguard Worker
50*d68f33bcSAndroid Build Coastguard Worker        # An error.
51*d68f33bcSAndroid Build Coastguard Worker        result = rh.results.HookResult('hook', 'project', 'HEAD', True)
52*d68f33bcSAndroid Build Coastguard Worker        self.assertTrue(result)
53*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result.is_warning())
54*d68f33bcSAndroid Build Coastguard Worker
55*d68f33bcSAndroid Build Coastguard Worker
56*d68f33bcSAndroid Build Coastguard Workerclass HookCommandResultTests(unittest.TestCase):
57*d68f33bcSAndroid Build Coastguard Worker    """Verify behavior of HookCommandResult object."""
58*d68f33bcSAndroid Build Coastguard Worker
59*d68f33bcSAndroid Build Coastguard Worker    def test_error_warning(self):
60*d68f33bcSAndroid Build Coastguard Worker        """Check error & warning handling."""
61*d68f33bcSAndroid Build Coastguard Worker        # No errors.
62*d68f33bcSAndroid Build Coastguard Worker        result = rh.results.HookCommandResult(
63*d68f33bcSAndroid Build Coastguard Worker            'hook', 'project', 'HEAD', COMPLETED_PROCESS_PASS)
64*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result)
65*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result.is_warning())
66*d68f33bcSAndroid Build Coastguard Worker
67*d68f33bcSAndroid Build Coastguard Worker        # An error.
68*d68f33bcSAndroid Build Coastguard Worker        result = rh.results.HookCommandResult(
69*d68f33bcSAndroid Build Coastguard Worker            'hook', 'project', 'HEAD', COMPLETED_PROCESS_FAIL)
70*d68f33bcSAndroid Build Coastguard Worker        self.assertTrue(result)
71*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result.is_warning())
72*d68f33bcSAndroid Build Coastguard Worker
73*d68f33bcSAndroid Build Coastguard Worker        # A warning.
74*d68f33bcSAndroid Build Coastguard Worker        result = rh.results.HookCommandResult(
75*d68f33bcSAndroid Build Coastguard Worker            'hook', 'project', 'HEAD', COMPLETED_PROCESS_WARN)
76*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result)
77*d68f33bcSAndroid Build Coastguard Worker        self.assertTrue(result.is_warning())
78*d68f33bcSAndroid Build Coastguard Worker
79*d68f33bcSAndroid Build Coastguard Worker
80*d68f33bcSAndroid Build Coastguard Workerclass ProjectResultsTests(unittest.TestCase):
81*d68f33bcSAndroid Build Coastguard Worker    """Verify behavior of ProjectResults object."""
82*d68f33bcSAndroid Build Coastguard Worker
83*d68f33bcSAndroid Build Coastguard Worker    def test_error_warning(self):
84*d68f33bcSAndroid Build Coastguard Worker        """Check error & warning handling."""
85*d68f33bcSAndroid Build Coastguard Worker        # No errors.
86*d68f33bcSAndroid Build Coastguard Worker        result = rh.results.ProjectResults('project', 'workdir')
87*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result)
88*d68f33bcSAndroid Build Coastguard Worker
89*d68f33bcSAndroid Build Coastguard Worker        # Warnings are not errors.
90*d68f33bcSAndroid Build Coastguard Worker        result.add_results([
91*d68f33bcSAndroid Build Coastguard Worker            rh.results.HookResult('hook', 'project', 'HEAD', False),
92*d68f33bcSAndroid Build Coastguard Worker            rh.results.HookCommandResult(
93*d68f33bcSAndroid Build Coastguard Worker                'hook', 'project', 'HEAD', COMPLETED_PROCESS_WARN),
94*d68f33bcSAndroid Build Coastguard Worker        ])
95*d68f33bcSAndroid Build Coastguard Worker        self.assertFalse(result)
96*d68f33bcSAndroid Build Coastguard Worker
97*d68f33bcSAndroid Build Coastguard Worker        # Errors are errors.
98*d68f33bcSAndroid Build Coastguard Worker        result.add_results([
99*d68f33bcSAndroid Build Coastguard Worker            rh.results.HookResult('hook', 'project', 'HEAD', True),
100*d68f33bcSAndroid Build Coastguard Worker        ])
101*d68f33bcSAndroid Build Coastguard Worker        self.assertTrue(result)
102*d68f33bcSAndroid Build Coastguard Worker
103*d68f33bcSAndroid Build Coastguard Worker
104*d68f33bcSAndroid Build Coastguard Workerif __name__ == '__main__':
105*d68f33bcSAndroid Build Coastguard Worker    unittest.main()
106