Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/env python3.4
      2 #
      3 #   Copyright 2016 - 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 import unittest
     18 
     19 from acts import records
     20 from acts import signals
     21 
     22 
     23 class ActsRecordsTest(unittest.TestCase):
     24     """This test class tests the implementation of classes in acts.records.
     25     """
     26 
     27     def setUp(self):
     28         self.tn = "test_name"
     29         self.details = "Some details about the test execution."
     30         self.float_extra = 12345.56789
     31         self.json_extra = {"ha": "whatever"}
     32 
     33     def verify_record(self, record, result, details, extras):
     34         # Verify each field.
     35         self.assertEqual(record.test_name, self.tn)
     36         self.assertEqual(record.result, result)
     37         self.assertEqual(record.details, details)
     38         self.assertEqual(record.extras, extras)
     39         self.assertTrue(record.begin_time, "begin time should not be empty.")
     40         self.assertTrue(record.end_time, "end time should not be empty.")
     41         # UID is not used at the moment, should always be None.
     42         self.assertIsNone(record.uid)
     43         # Verify to_dict.
     44         d = {}
     45         d[records.TestResultEnums.RECORD_NAME] = self.tn
     46         d[records.TestResultEnums.RECORD_RESULT] = result
     47         d[records.TestResultEnums.RECORD_DETAILS] = details
     48         d[records.TestResultEnums.RECORD_EXTRAS] = extras
     49         d[records.TestResultEnums.RECORD_BEGIN_TIME] = record.begin_time
     50         d[records.TestResultEnums.RECORD_END_TIME] = record.end_time
     51         d[records.TestResultEnums.RECORD_UID] = None
     52         d[records.TestResultEnums.RECORD_CLASS] = None
     53         d[records.TestResultEnums.RECORD_EXTRA_ERRORS] = {}
     54         actual_d = record.to_dict()
     55         self.assertDictEqual(actual_d, d)
     56         # Verify that these code paths do not cause crashes and yield non-empty
     57         # results.
     58         self.assertTrue(str(record), "str of the record should not be empty.")
     59         self.assertTrue(repr(record), "the record's repr shouldn't be empty.")
     60         self.assertTrue(record.json_str(), ("json str of the record should "
     61                                             "not be empty."))
     62 
     63     """ Begin of Tests """
     64 
     65     def test_result_record_pass_none(self):
     66         record = records.TestResultRecord(self.tn)
     67         record.test_begin()
     68         record.test_pass()
     69         self.verify_record(
     70             record=record,
     71             result=records.TestResultEnums.TEST_RESULT_PASS,
     72             details=None,
     73             extras=None)
     74 
     75     def test_result_record_pass_with_float_extra(self):
     76         record = records.TestResultRecord(self.tn)
     77         record.test_begin()
     78         s = signals.TestPass(self.details, self.float_extra)
     79         record.test_pass(s)
     80         self.verify_record(
     81             record=record,
     82             result=records.TestResultEnums.TEST_RESULT_PASS,
     83             details=self.details,
     84             extras=self.float_extra)
     85 
     86     def test_result_record_pass_with_json_extra(self):
     87         record = records.TestResultRecord(self.tn)
     88         record.test_begin()
     89         s = signals.TestPass(self.details, self.json_extra)
     90         record.test_pass(s)
     91         self.verify_record(
     92             record=record,
     93             result=records.TestResultEnums.TEST_RESULT_PASS,
     94             details=self.details,
     95             extras=self.json_extra)
     96 
     97     def test_result_record_fail_none(self):
     98         record = records.TestResultRecord(self.tn)
     99         record.test_begin()
    100         record.test_fail()
    101         self.verify_record(
    102             record=record,
    103             result=records.TestResultEnums.TEST_RESULT_FAIL,
    104             details=None,
    105             extras=None)
    106 
    107     def test_result_record_fail_with_float_extra(self):
    108         record = records.TestResultRecord(self.tn)
    109         record.test_begin()
    110         s = signals.TestFailure(self.details, self.float_extra)
    111         record.test_fail(s)
    112         self.verify_record(
    113             record=record,
    114             result=records.TestResultEnums.TEST_RESULT_FAIL,
    115             details=self.details,
    116             extras=self.float_extra)
    117 
    118     def test_result_record_fail_with_json_extra(self):
    119         record = records.TestResultRecord(self.tn)
    120         record.test_begin()
    121         s = signals.TestFailure(self.details, self.json_extra)
    122         record.test_fail(s)
    123         self.verify_record(
    124             record=record,
    125             result=records.TestResultEnums.TEST_RESULT_FAIL,
    126             details=self.details,
    127             extras=self.json_extra)
    128 
    129     def test_result_record_skip_none(self):
    130         record = records.TestResultRecord(self.tn)
    131         record.test_begin()
    132         record.test_skip()
    133         self.verify_record(
    134             record=record,
    135             result=records.TestResultEnums.TEST_RESULT_SKIP,
    136             details=None,
    137             extras=None)
    138 
    139     def test_result_record_skip_with_float_extra(self):
    140         record = records.TestResultRecord(self.tn)
    141         record.test_begin()
    142         s = signals.TestSkip(self.details, self.float_extra)
    143         record.test_skip(s)
    144         self.verify_record(
    145             record=record,
    146             result=records.TestResultEnums.TEST_RESULT_SKIP,
    147             details=self.details,
    148             extras=self.float_extra)
    149 
    150     def test_result_record_skip_with_json_extra(self):
    151         record = records.TestResultRecord(self.tn)
    152         record.test_begin()
    153         s = signals.TestSkip(self.details, self.json_extra)
    154         record.test_skip(s)
    155         self.verify_record(
    156             record=record,
    157             result=records.TestResultEnums.TEST_RESULT_SKIP,
    158             details=self.details,
    159             extras=self.json_extra)
    160 
    161     def test_result_add_operator_success(self):
    162         record1 = records.TestResultRecord(self.tn)
    163         record1.test_begin()
    164         s = signals.TestPass(self.details, self.float_extra)
    165         record1.test_pass(s)
    166         tr1 = records.TestResult()
    167         tr1.add_record(record1)
    168         tr1.add_controller_info("MockDevice", ["magicA", "magicB"])
    169         record2 = records.TestResultRecord(self.tn)
    170         record2.test_begin()
    171         s = signals.TestPass(self.details, self.json_extra)
    172         record2.test_pass(s)
    173         tr2 = records.TestResult()
    174         tr2.add_record(record2)
    175         tr2.add_controller_info("MockDevice", ["magicC"])
    176         tr2 += tr1
    177         self.assertTrue(tr2.passed, [tr1, tr2])
    178         self.assertTrue(tr2.controller_info, {"MockDevice": ["magicC"]})
    179 
    180     def test_result_add_operator_type_mismatch(self):
    181         record1 = records.TestResultRecord(self.tn)
    182         record1.test_begin()
    183         s = signals.TestPass(self.details, self.float_extra)
    184         record1.test_pass(s)
    185         tr1 = records.TestResult()
    186         tr1.add_record(record1)
    187         expected_msg = "Operand .* of type .* is not a TestResult."
    188         with self.assertRaisesRegexp(TypeError, expected_msg):
    189             tr1 += "haha"
    190 
    191     def test_is_all_pass(self):
    192         s = signals.TestPass(self.details, self.float_extra)
    193         record1 = records.TestResultRecord(self.tn)
    194         record1.test_begin()
    195         record1.test_pass(s)
    196         s = signals.TestSkip(self.details, self.float_extra)
    197         record2 = records.TestResultRecord(self.tn)
    198         record2.test_begin()
    199         record2.test_skip(s)
    200         tr = records.TestResult()
    201         tr.add_record(record1)
    202         tr.add_record(record2)
    203         tr.add_record(record1)
    204         self.assertEqual(len(tr.passed), 2)
    205         self.assertTrue(tr.is_all_pass)
    206 
    207     def test_is_all_pass_negative(self):
    208         s = signals.TestFailure(self.details, self.float_extra)
    209         record1 = records.TestResultRecord(self.tn)
    210         record1.test_begin()
    211         record1.test_fail(s)
    212         record2 = records.TestResultRecord(self.tn)
    213         record2.test_begin()
    214         record2.test_unknown(s)
    215         tr = records.TestResult()
    216         tr.add_record(record1)
    217         tr.add_record(record2)
    218         self.assertFalse(tr.is_all_pass)
    219 
    220 
    221 if __name__ == "__main__":
    222     unittest.main()