Home | History | Annotate | Download | only in listeners
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package dexfuzz.listeners;
     18 
     19 import dexfuzz.ExecutionResult;
     20 import dexfuzz.executors.Executor;
     21 import dexfuzz.program.Mutation;
     22 
     23 import java.util.List;
     24 import java.util.Map;
     25 
     26 /**
     27  * Logs output to the console, when not using --repeat.
     28  */
     29 public class ConsoleLoggerListener extends BaseListener {
     30   @Override
     31   public void setup() {
     32 
     33   }
     34 
     35   @Override
     36   public void shutdown() {
     37 
     38   }
     39 
     40   private void logToConsole(String msg) {
     41     System.out.println("CONSOLE: " + msg);
     42   }
     43 
     44   @Override
     45   public void handleSuccessfulHostVerification() {
     46     logToConsole("Successful host verification");
     47   }
     48 
     49   @Override
     50   public void handleFailedHostVerification(ExecutionResult verificationResult) {
     51     logToConsole("Failed host verification");
     52   }
     53 
     54   @Override
     55   public void handleMutations(List<Mutation> mutations) {
     56     for (Mutation mutation : mutations) {
     57       logToConsole("Applied mutation: " + mutation.toString());
     58     }
     59   }
     60 
     61   @Override
     62   public void handleArchitectureSplit() {
     63     logToConsole("Detected architectural split.");
     64   }
     65 
     66   @Override
     67   public void handleFailedTargetVerification() {
     68     logToConsole("Failed target verification");
     69   }
     70 
     71   @Override
     72   public void handleIterationStarted(int iteration) {
     73     logToConsole("Starting iteration " + iteration);
     74   }
     75 
     76   @Override
     77   public void handleIterationFinished(int iteration) {
     78     logToConsole("Finished iteration " + iteration);
     79   }
     80 
     81   @Override
     82   public void handleTimeouts(List<Executor> timedOut, List<Executor> didNotTimeOut) {
     83     logToConsole("Timed out: " + timedOut.size() + " Did not time out: " + didNotTimeOut.size());
     84   }
     85 
     86   @Override
     87   public void handleDivergences(Map<String, List<Executor>> outputMap) {
     88     logToConsole("Got divergences!");
     89     int outputCount = 1;
     90     for (List<Executor> executors : outputMap.values()) {
     91       logToConsole("Output " + outputCount + ":");
     92       for (Executor executor : executors) {
     93         logToConsole("  " + executor.getName());
     94       }
     95       outputCount++;
     96     }
     97   }
     98 
     99   @Override
    100   public void handleFuzzingFile(String inputFile) {
    101     logToConsole("Fuzzing: " + inputFile);
    102   }
    103 
    104   @Override
    105   public void handleSeed(long seed) {
    106     logToConsole("Seed: " + seed);
    107   }
    108 
    109   @Override
    110   public void handleHostVerificationSigabort(ExecutionResult verificationResult) {
    111     logToConsole("Sigaborted host verification");
    112   }
    113 
    114   @Override
    115   public void handleSuccessfullyFuzzedFile(String programName) {
    116     logToConsole("Program " + programName + " successfully fuzzed.");
    117   }
    118 
    119   @Override
    120   public void handleSuccess(Map<String, List<Executor>> outputMap) {
    121     logToConsole("Execution was successful");
    122   }
    123 
    124   @Override
    125   public void handleDumpOutput(String outputLine, Executor executor) {
    126     logToConsole(executor.getName() + " OUTPUT: " + outputLine);
    127   }
    128 
    129   @Override
    130   public void handleDumpVerify(String verifyLine) {
    131     logToConsole("VERIFY: " + verifyLine);
    132   }
    133 
    134   @Override
    135   public void handleMutationFail() {
    136     logToConsole("DEX file was not mutated");
    137   }
    138 
    139   @Override
    140   public void handleMutationStats(String statsString) {
    141     logToConsole("Mutations performed: " + statsString);
    142   }
    143 
    144   @Override
    145   public void handleTiming(String name, float elapsedTime) {
    146     logToConsole(String.format("'%s': %.3fs", name, elapsedTime));
    147   }
    148 
    149   @Override
    150   public void handleSummary() {
    151     logToConsole("--- SUMMARY ---");
    152   }
    153 
    154   @Override
    155   public void handleSelfDivergence() {
    156     logToConsole("Seen self divergence");
    157   }
    158 
    159   @Override
    160   public void handleMessage(String msg) {
    161     logToConsole(msg);
    162   }
    163 }
    164