Home | History | Annotate | Download | only in atest
      1 #!/usr/bin/env python
      2 #
      3 # Copyright 2018, The Android Open Source Project
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License");
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #     http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 
     17 """Unittests for test_finder_handler."""
     18 
     19 import unittest
     20 import mock
     21 
     22 import atest_error
     23 import test_finder_handler
     24 from test_finders import test_info
     25 from test_finders import test_finder_base
     26 
     27 #pylint: disable=protected-access
     28 REF_TYPE = test_finder_handler._REFERENCE_TYPE
     29 
     30 _EXAMPLE_FINDER_A = 'EXAMPLE_A'
     31 
     32 
     33 #pylint: disable=no-self-use
     34 @test_finder_base.find_method_register
     35 class ExampleFinderA(test_finder_base.TestFinderBase):
     36     """Example finder class A."""
     37     NAME = _EXAMPLE_FINDER_A
     38     _TEST_RUNNER = 'TEST_RUNNER'
     39 
     40     @test_finder_base.register()
     41     def registered_find_method_from_example_finder(self, test):
     42         """Registered Example find method."""
     43         if test == 'ExampleFinderATrigger':
     44             return test_info.TestInfo(test_name=test,
     45                                       test_runner=self._TEST_RUNNER,
     46                                       build_targets=set())
     47         return None
     48 
     49     def unregistered_find_method_from_example_finder(self, _test):
     50         """Unregistered Example find method, should never be called."""
     51         raise atest_error.ShouldNeverBeCalledError()
     52 
     53 
     54 _TEST_FINDERS_PATCH = {
     55     ExampleFinderA,
     56 }
     57 
     58 
     59 _FINDER_INSTANCES = {
     60     _EXAMPLE_FINDER_A: ExampleFinderA(),
     61 }
     62 
     63 
     64 class TestFinderHandlerUnittests(unittest.TestCase):
     65     """Unit tests for test_finder_handler.py"""
     66 
     67     def setUp(self):
     68         """Set up for testing."""
     69         # pylint: disable=invalid-name
     70         # This is so we can see the full diffs when there are mismatches.
     71         self.maxDiff = None
     72         self.empty_mod_info = None
     73         # We want to control the finders we return.
     74         mock.patch('test_finder_handler._get_test_finders',
     75                    lambda: _TEST_FINDERS_PATCH).start()
     76         # Since we're going to be comparing instance objects, we'll need to keep
     77         # track of the objects so they align.
     78         mock.patch('test_finder_handler._get_finder_instance_dict',
     79                    lambda x: _FINDER_INSTANCES).start()
     80         # We want to mock out the default find methods to make sure we got all
     81         # the methods we expect.
     82         mock.patch('test_finder_handler._get_default_find_methods',
     83                    lambda x, y: [test_finder_base.Finder(
     84                        _FINDER_INSTANCES[_EXAMPLE_FINDER_A],
     85                        ExampleFinderA.unregistered_find_method_from_example_finder)]).start()
     86 
     87     def tearDown(self):
     88         """Tear down."""
     89         mock.patch.stopall()
     90 
     91     def test_get_test_reference_types(self):
     92         """Test _get_test_reference_types parses reference types correctly."""
     93         self.assertEqual(
     94             test_finder_handler._get_test_reference_types('ModuleOrClassName'),
     95             [REF_TYPE.INTEGRATION, REF_TYPE.MODULE, REF_TYPE.CLASS]
     96         )
     97         self.assertEqual(
     98             test_finder_handler._get_test_reference_types('Module_or_Class_name'),
     99             [REF_TYPE.INTEGRATION, REF_TYPE.MODULE, REF_TYPE.CLASS]
    100         )
    101         self.assertEqual(
    102             test_finder_handler._get_test_reference_types('some.package'),
    103             [REF_TYPE.PACKAGE]
    104         )
    105         self.assertEqual(
    106             test_finder_handler._get_test_reference_types('fully.q.Class'),
    107             [REF_TYPE.QUALIFIED_CLASS]
    108         )
    109         self.assertEqual(
    110             test_finder_handler._get_test_reference_types('Integration.xml'),
    111             [REF_TYPE.INTEGRATION_FILE_PATH]
    112         )
    113         self.assertEqual(
    114             test_finder_handler._get_test_reference_types('SomeClass.java'),
    115             [REF_TYPE.MODULE_FILE_PATH]
    116         )
    117         self.assertEqual(
    118             test_finder_handler._get_test_reference_types('Android.mk'),
    119             [REF_TYPE.MODULE_FILE_PATH]
    120         )
    121         self.assertEqual(
    122             test_finder_handler._get_test_reference_types('Android.bp'),
    123             [REF_TYPE.MODULE_FILE_PATH]
    124         )
    125         self.assertEqual(
    126             test_finder_handler._get_test_reference_types('module:Class'),
    127             [REF_TYPE.INTEGRATION, REF_TYPE.MODULE_CLASS]
    128         )
    129         self.assertEqual(
    130             test_finder_handler._get_test_reference_types('module:f.q.Class'),
    131             [REF_TYPE.INTEGRATION, REF_TYPE.MODULE_CLASS]
    132         )
    133         self.assertEqual(
    134             test_finder_handler._get_test_reference_types('module:a.package'),
    135             [REF_TYPE.MODULE_PACKAGE]
    136         )
    137         self.assertEqual(
    138             test_finder_handler._get_test_reference_types('.'),
    139             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH]
    140         )
    141         self.assertEqual(
    142             test_finder_handler._get_test_reference_types('..'),
    143             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH]
    144         )
    145         self.assertEqual(
    146             test_finder_handler._get_test_reference_types('./rel/path/to/test'),
    147             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH]
    148         )
    149         self.assertEqual(
    150             test_finder_handler._get_test_reference_types('rel/path/to/test'),
    151             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH,
    152              REF_TYPE.INTEGRATION]
    153         )
    154         self.assertEqual(
    155             test_finder_handler._get_test_reference_types('/abs/path/to/test'),
    156             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH]
    157         )
    158         self.assertEqual(
    159             test_finder_handler._get_test_reference_types('int/test'),
    160             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH,
    161              REF_TYPE.INTEGRATION]
    162         )
    163         self.assertEqual(
    164             test_finder_handler._get_test_reference_types('int/test:fully.qual.Class#m'),
    165             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH,
    166              REF_TYPE.INTEGRATION]
    167         )
    168         self.assertEqual(
    169             test_finder_handler._get_test_reference_types('int/test:Class#method'),
    170             [REF_TYPE.INTEGRATION_FILE_PATH, REF_TYPE.MODULE_FILE_PATH,
    171              REF_TYPE.INTEGRATION]
    172         )
    173         self.assertEqual(
    174             test_finder_handler._get_test_reference_types('int_name_no_slash:Class#m'),
    175             [REF_TYPE.INTEGRATION, REF_TYPE.MODULE_CLASS]
    176         )
    177 
    178     def test_get_registered_find_methods(self):
    179         """Test that we get the registered find methods."""
    180         empty_mod_info = None
    181         example_finder_a_instance = test_finder_handler._get_finder_instance_dict(
    182             empty_mod_info)[_EXAMPLE_FINDER_A]
    183         should_equal = [
    184             test_finder_base.Finder(
    185                 example_finder_a_instance,
    186                 ExampleFinderA.registered_find_method_from_example_finder)]
    187         should_not_equal = [
    188             test_finder_base.Finder(
    189                 example_finder_a_instance,
    190                 ExampleFinderA.unregistered_find_method_from_example_finder)]
    191         # Let's make sure we see the registered method.
    192         self.assertEqual(
    193             should_equal,
    194             test_finder_handler._get_registered_find_methods(empty_mod_info)
    195         )
    196         # Make sure we don't see the unregistered method here.
    197         self.assertNotEqual(
    198             should_not_equal,
    199             test_finder_handler._get_registered_find_methods(empty_mod_info)
    200         )
    201 
    202     def test_get_find_methods_for_test(self):
    203         """Test that we get the find methods we expect."""
    204         # Let's see that we get the unregistered and registered find methods in
    205         # the order we expect.
    206         test = ''
    207         registered_find_methods = [
    208             test_finder_base.Finder(
    209                 _FINDER_INSTANCES[_EXAMPLE_FINDER_A],
    210                 ExampleFinderA.registered_find_method_from_example_finder)]
    211         default_find_methods = [
    212             test_finder_base.Finder(
    213                 _FINDER_INSTANCES[_EXAMPLE_FINDER_A],
    214                 ExampleFinderA.unregistered_find_method_from_example_finder)]
    215         should_equal = registered_find_methods + default_find_methods
    216         self.assertEqual(
    217             should_equal,
    218             test_finder_handler.get_find_methods_for_test(self.empty_mod_info,
    219                                                           test))
    220 
    221 
    222 if __name__ == '__main__':
    223     unittest.main()
    224