Home | History | Annotate | Download | only in conventional
      1 #!/usr/bin/env python
      2 #
      3 # Copyright (C) 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 
     18 import logging
     19 import random
     20 
     21 from vts.runners.host import base_test
     22 from vts.runners.host import test_runner
     23 from vts.utils.python.controllers import android_device
     24 from vts.utils.python.fuzzer import GenePool
     25 
     26 
     27 class LightFuzzTest(base_test.BaseTestClass):
     28     """A sample fuzz testcase for the legacy lights HAL."""
     29 
     30     def setUpClass(self):
     31         required_params = ["gene_pool_size", "iteartion_count"]
     32         self.getUserParams(required_params)
     33         self.dut = self.registerController(android_device)[0]
     34         self.dut.hal.InitConventionalHal(target_type="light",
     35                                          target_basepaths=["/system/lib64/hw"],
     36                                          target_version=1.0,
     37                                          bits=64,
     38                                          target_package="hal.conventional.light")
     39         self.dut.hal.light.OpenConventionalHal("backlight")
     40         module_name = random.choice(
     41             [self.dut.hal.light.LIGHT_ID_BACKLIGHT,
     42              self.dut.hal.light.LIGHT_ID_NOTIFICATIONS,
     43              self.dut.hal.light.LIGHT_ID_ATTENTION])
     44 
     45         # TODO: broken on bullhead
     46         #   self.dut.hal.light.LIGHT_ID_KEYBOARD
     47         #   self.dut.hal.light.LIGHT_ID_BUTTONS
     48         #   self.dut.hal.light.LIGHT_ID_BATTERY
     49         #   self.dut.hal.light.LIGHT_ID_BLUETOOTH
     50         #   self.dut.hal.light.LIGHT_ID_WIFI
     51 
     52     def testTurnOnLightBlackBoxFuzzing(self):
     53         """A fuzz testcase which calls a function using different values."""
     54         logging.info("blackbox fuzzing")
     55         genes = GenePool.CreateGenePool(
     56             self.gene_pool_size,
     57             self.dut.hal.light.light_state_t,
     58             self.dut.hal.light.light_state_t_fuzz,
     59             color=0xffffff00,
     60             flashMode=self.dut.hal.light.LIGHT_FLASH_HARDWARE,
     61             flashOnMs=100,
     62             flashOffMs=200,
     63             brightnessMode=self.dut.hal.light.BRIGHTNESS_MODE_USER)
     64         for iteration in range(self.iteartion_count):
     65             index = 0
     66             logging.info("blackbox iteration %d", iteration)
     67             for gene in genes:
     68                 logging.debug("Gene %d", index)
     69                 self.dut.hal.light.set_light(None, gene)
     70                 index += 1
     71             evolution = GenePool.Evolution()
     72             genes = evolution.Evolve(genes,
     73                                      self.dut.hal.light.light_state_t_fuzz)
     74 
     75     def testTurnOnLightWhiteBoxFuzzing(self):
     76         """A fuzz testcase which calls a function using different values."""
     77         logging.info("whitebox fuzzing")
     78         genes = GenePool.CreateGenePool(
     79             self.gene_pool_size,
     80             self.dut.hal.light.light_state_t,
     81             self.dut.hal.light.light_state_t_fuzz,
     82             color=0xffffff00,
     83             flashMode=self.dut.hal.light.LIGHT_FLASH_HARDWARE,
     84             flashOnMs=100,
     85             flashOffMs=200,
     86             brightnessMode=self.dut.hal.light.BRIGHTNESS_MODE_USER)
     87 
     88         for iteration in range(self.iteartion_count):
     89             index = 0
     90             logging.info("whitebox iteration %d", iteration)
     91             coverages = []
     92             for gene in genes:
     93                 logging.debug("Gene %d", index)
     94                 result = self.dut.hal.light.set_light(None, gene)
     95                 if len(result.processed_coverage_data) > 0:
     96                     logging.info("coverage: %s", result.processed_coverage_data)
     97                     gene_coverage = []
     98                     for coverage_data in result.processed_coverage_data:
     99                         gene_coverage.append(coverage_data)
    100                     coverages.append(gene_coverage)
    101                 index += 1
    102             evolution = GenePool.Evolution()
    103             genes = evolution.Evolve(genes,
    104                                      self.dut.hal.light.light_state_t_fuzz,
    105                                      coverages=coverages)
    106 
    107 
    108 if __name__ == "__main__":
    109     test_runner.main()
    110