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